모듈
이 페이지는 현재 lumie-backend/settings.gradle.kts에 포함된 Gradle
서브프로젝트의 overview 맵입니다. 이 문서를 통해 모듈 계열과 공유
라이브러리를 파악하고, 레퍼런스 수준의 세부 내용을 보려면 어디로
이동해야 하는지 이해할 수 있습니다. 라우트, DTO, 실패 계약의 구체적인
사항은 아래에 링크된 개별 모듈 페이지를 참고하세요.
여기에 있는 모든 모듈은 동일한 Spring Boot 애플리케이션 안에서 배포되며, 같은 JVM, transaction manager, PostgreSQL 테넌트 모델을 공유합니다.
공통 라이브러리
| 경로 | 소유 범위 |
|---|---|
libs/common | 테넌트, auth, exception, idempotency, logging, base-entity를 가로지르는 공통 지원 |
libs/internal-api | 공개된 프로세스 내부 service interface와 모듈 간 event |
libs/messaging | queue 기반 exam 흐름에서 사용하는 공통 AMQP 상수 |
이 맵 읽는 방법
app,libs/*, 그리고 포함된 모든modules/*서브프로젝트는 하나의 배포 가능한 백엔드 jar로 조립됩니다.- 모듈 이름은 모놀리스 내부의 소유 경계를 설명할 뿐, 따로 배포되는 Java 서비스가 아닙니다.
- 링크된 각 모듈 페이지는 해당 모듈의 공개 인터페이스, 내부 API, data contract, failure behavior에 대한 기준입니다.
플랫폼 모듈
| 문서 페이지 | Gradle 모듈 | 기본 소스 루트 | 주요 소유 범위 | 주요 경계 |
|---|---|---|---|---|
| 테넌트 서비스 | modules:tenant | modules/tenant/src/main/java/com/lumie/tenant | 테넌트 레지스트리, 수명주기 상태, custom ID/domain, onboarding, logo | TenantService와 TenantCreatedEvent를 발행하며 auth, homepage, billing이 사용 |
| 인증 서비스 | modules:auth | modules/auth/src/main/java/com/lumie/auth | 등록, login, JWT, 갱신, 세션, 프로필, avatar | AuthService, OwnerRegisteredEvent, StudentSelfRegisteredEvent를 발행하고 Redis 및 테넌트 lookup에 의존 |
| 빌링 서비스 | modules:billing | modules/billing/src/main/java/com/lumie/billing | plan, subscription, billing key, invoice, Alimtalk credit, tax invoice | TenantCreatedEvent를 소비하고 BillingService를 발행하며 Toss와 stubbed Popbill adapter를 통합 |
| 홈페이지 서비스 | modules:homepage | modules/homepage/src/main/java/com/lumie/homepage | 테넌트 홈페이지 설정과 anonymous public homepage 조회 | TenantLookupPort를 통해 TenantService를 소비하며 write는 OWNER 전용 |
| AI 서비스 | modules:ai | modules/ai/src/main/java/com/lumie/ai | conversation, chat proxying, tool execution, scheduled AI task | chatbot-svc와 통합되며 /internal/chatbot/**로 백엔드에 재진입하고 전용 읽기 전용 JDBC 경로를 사용 |
| 알림 서비스 | modules:notification | modules/notification/src/main/java/com/lumie/notification | SMS 발송, 메시지 이력, 템플릿 | 테넌트 범위 메시지 기록과 billing quota check를 사용 |
| 파일 서비스 | modules:file | modules/file/src/main/java/com/lumie/file | 파일 메타데이터, 업로드/다운로드, 교재 폴더, 파일 링크 | MinIO와 통합되며 DB 커밋 후 object deletion을 예약 |
교육 및 운영 모듈
| 문서 페이지 | Gradle 모듈 | 기본 소스 루트 | 주요 소유 범위 | 주요 경계 |
|---|---|---|---|---|
| 학생 서비스 | modules:student | modules/student/src/main/java/com/lumie/student | 학생 기록, 가져오기, 내보내기, 수명주기, credential linkage | StudentService와 StudentRegisteredEvent를 발행하고 auth 및 수업 규칙에 의존 |
| 스태프 서비스 | modules:staff | modules/staff/src/main/java/com/lumie/staff | staff 수명주기, 권한 카탈로그, staff permission assignment | StaffService를 발행하고 OwnerRegisteredEvent를 소비하며 auth, billing, class에 의존 |
| 반 서비스 | modules:class | modules/class/src/main/java/com/lumie/classroom | 수업, schedule, enrollment, dashboard | ClassService를 발행하며 staff, attendance, lecture, assignment가 사용 |
| 출석 서비스 | modules:attendance | modules/attendance/src/main/java/com/lumie/attendance | attendance 세션, record, 내보내기, statistics | class와 student reference에 의존 |
| 과제 서비스 | modules:assignment | modules/assignment/src/main/java/com/lumie/assignment | 과제, 대상 타기팅, 제출물, 대시보드, 시험 연계 수동 과제 채점 오케스트레이션 | AssignmentService를 발행하며 수업, student, exam 내부 API에 의존 |
| 강의 서비스 | modules:lecture | modules/lecture/src/main/java/com/lumie/lecture | lecture와 수업 대상 lecture visibility | 수업 reference와 테넌트-safe 수업-target table에 의존 |
| 콘텐츠 서비스 | modules:content | modules/content/src/main/java/com/lumie/content | announcement, Q&A, review | file link와 수업-aware visibility rule에 의존 |
| 시험 서비스 | modules:exam | modules/exam/src/main/java/com/lumie/exam | exam, template, OMR job, report, analytics | RabbitMQ, MinIO, 직접 워커 HTTP, 내부 report/OMR 인터페이스, student backfill event |
| 수강료 서비스 | modules:tuition | modules/tuition/src/main/java/com/lumie/tuition | 보호자, tuition invoice, tuition payment, cash receipt | 외부 cash receipt 및 billing adapter와 통합되며, 현재는 공개된 내부 API 인터페이스가 거의 없음 |
서브시스템 구조
포함된 모듈은 몇 가지 안정적인 백엔드 서브시스템으로 묶입니다.
| 서브시스템 | 모듈 | 함께 묶이는 이유 |
|---|---|---|
| 테넌트와 신원 | tenant, auth, billing, homepage | 테넌트 부트스트랩, authentication, quota, 테넌트-facing config |
| 핵심 학원 운영 | student, staff, class, attendance, assignment, lecture, content | 일상적인 학원 데이터, scheduling, visibility, 수명주기 흐름 |
| 무거운 비동기 또는 외부 통합 | exam, ai, notification, file, tuition | 워커 호출, messaging, storage, payment, 문서 지향 integration |
현재 사용 중인 모듈 간 패턴
adapter/in/internal/*Adapter는libs/internal-api구현을 위한 일반적인 동기 경계 형태입니다.@ApplicationModuleListener는 커밋 후 모듈 간 후속 처리를 위한 일반적인 비동기 경계 형태입니다.- 현재
libs/messaging을 직접 사용하는 모듈은exam하나뿐이며, 이는 RabbitMQ 기반 grading 및 report pipeline을 소유하기 때문입니다. homepage와staff는 다른 모듈의 repository에 직접 접근하지 않고 공개된 계약을 소비하는 선호 패턴을 보여줍니다.
현재 빌드 참고 사항
app/build.gradle.kts는 위에 나열된 모든 모듈을 백엔드 jar에 포함합니다.modules/activity-log는 리포지토리에는 존재하지만settings.gradle.kts에는 없으므로 배포되지 않습니다.admin-svc.md는 기존 백엔드 naming을 유지하기 때문에staff모듈을 문서화합니다.modules:class는 Gradle 수준 이름은class이지만 Java 패키지 root는com.lumie.classroom을 사용합니다.
검증
cd /Users/bluemayne/Projects/Lumie/lumie-backend
./gradlew projects
cd /Users/bluemayne/Projects/Lumie/lumie-document/docusaurus
npm run build
예상 성공 신호:
./gradlew projects가settings.gradle.kts에 포함된 모듈 경로를 나열하며, 여기에는modules:student,modules:staff,modules:class,modules:attendance,modules:assignment,modules:lecture,modules:content가 포함됩니다.- Docusaurus가
backend/modules에 대해 MDX 또는 broken-link 오류 없이 완료됩니다.