# Meeting Service 패키지 구조도 ## 전체 구조 ``` meeting/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/unicorn/hgzero/meeting/ │ │ │ ├── MeetingApplication.java │ │ │ ├── biz/ │ │ │ │ ├── domain/ │ │ │ │ │ ├── Dashboard.java (✅ 기존) │ │ │ │ │ ├── Meeting.java (✅ 기존) │ │ │ │ │ ├── Minutes.java (✅ 기존) │ │ │ │ │ ├── MinutesSection.java (✅ 기존) │ │ │ │ │ ├── Template.java (✅ 기존) │ │ │ │ │ ├── Todo.java (✅ 기존) │ │ │ │ │ ├── Session.java │ │ │ │ │ ├── Participant.java │ │ │ │ │ ├── CollaborationEvent.java │ │ │ │ │ └── Statistics.java │ │ │ │ ├── service/ │ │ │ │ │ ├── DashboardService.java (✅ 기존) │ │ │ │ │ ├── MeetingService.java (✅ 기존) │ │ │ │ │ ├── MinutesService.java (✅ 기존) │ │ │ │ │ ├── MinutesSectionService.java (✅ 기존) │ │ │ │ │ ├── TemplateService.java (✅ 기존) │ │ │ │ │ ├── TodoService.java (✅ 기존) │ │ │ │ │ ├── SessionService.java │ │ │ │ │ ├── CollaborationService.java │ │ │ │ │ └── StatisticsService.java │ │ │ │ ├── usecase/ │ │ │ │ │ ├── in/ │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ └── GetDashboardUseCase.java (✅ 기존) │ │ │ │ │ │ ├── meeting/ │ │ │ │ │ │ │ ├── CreateMeetingUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── StartMeetingUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── EndMeetingUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── GetMeetingUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── CancelMeetingUseCase.java (✅ 기존) │ │ │ │ │ │ │ └── SelectTemplateUseCase.java │ │ │ │ │ │ ├── minutes/ │ │ │ │ │ │ │ ├── CreateMinutesUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── GetMinutesUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── UpdateMinutesUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── FinalizeMinutesUseCase.java (✅ 기존) │ │ │ │ │ │ │ └── GetMinutesListUseCase.java │ │ │ │ │ │ ├── section/ │ │ │ │ │ │ │ ├── CreateSectionUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── GetSectionUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── UpdateSectionUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── DeleteSectionUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── VerifySectionUseCase.java (✅ 기존) │ │ │ │ │ │ │ └── LockSectionUseCase.java (✅ 기존) │ │ │ │ │ │ ├── template/ │ │ │ │ │ │ │ ├── CreateTemplateUseCase.java (✅ 기존) │ │ │ │ │ │ │ ├── GetTemplateUseCase.java (✅ 기존) │ │ │ │ │ │ │ └── GetTemplateListUseCase.java │ │ │ │ │ │ └── todo/ │ │ │ │ │ │ ├── CreateTodoUseCase.java (✅ 기존) │ │ │ │ │ │ ├── GetTodoUseCase.java (✅ 기존) │ │ │ │ │ │ ├── UpdateTodoUseCase.java (✅ 기존) │ │ │ │ │ │ ├── CompleteTodoUseCase.java (✅ 기존) │ │ │ │ │ │ └── CancelTodoUseCase.java (✅ 기존) │ │ │ │ │ └── out/ │ │ │ │ │ ├── DashboardReader.java (✅ 기존) │ │ │ │ │ ├── MeetingReader.java (✅ 기존) │ │ │ │ │ ├── MeetingWriter.java (✅ 기존) │ │ │ │ │ ├── MinutesReader.java (✅ 기존) │ │ │ │ │ ├── MinutesWriter.java (✅ 기존) │ │ │ │ │ ├── MinutesSectionReader.java (✅ 기존) │ │ │ │ │ ├── MinutesSectionWriter.java (✅ 기존) │ │ │ │ │ ├── TemplateReader.java (✅ 기존) │ │ │ │ │ ├── TemplateWriter.java (✅ 기존) │ │ │ │ │ ├── TodoReader.java (✅ 기존) │ │ │ │ │ ├── TodoWriter.java (✅ 기존) │ │ │ │ │ ├── SessionReader.java │ │ │ │ │ ├── SessionWriter.java │ │ │ │ │ ├── ParticipantReader.java │ │ │ │ │ ├── ParticipantWriter.java │ │ │ │ │ ├── CollaborationEventWriter.java │ │ │ │ │ └── StatisticsWriter.java │ │ │ │ └── dto/ │ │ │ │ ├── DashboardDTO.java │ │ │ │ ├── MeetingDTO.java │ │ │ │ ├── MinutesDTO.java │ │ │ │ ├── SectionDTO.java │ │ │ │ ├── TemplateDTO.java │ │ │ │ └── TodoDTO.java │ │ │ └── infra/ │ │ │ ├── controller/ │ │ │ │ ├── DashboardController.java │ │ │ │ ├── MeetingController.java │ │ │ │ ├── MinutesController.java │ │ │ │ ├── TemplateController.java │ │ │ │ └── TodoController.java │ │ │ ├── dto/ │ │ │ │ ├── request/ │ │ │ │ │ ├── CreateMeetingRequest.java │ │ │ │ │ ├── UpdateMeetingRequest.java │ │ │ │ │ ├── CreateMinutesRequest.java │ │ │ │ │ ├── UpdateMinutesRequest.java │ │ │ │ │ ├── CreateSectionRequest.java │ │ │ │ │ ├── UpdateSectionRequest.java │ │ │ │ │ ├── CreateTodoRequest.java │ │ │ │ │ ├── UpdateTodoRequest.java │ │ │ │ │ ├── CreateTemplateRequest.java │ │ │ │ │ └── SelectTemplateRequest.java │ │ │ │ └── response/ │ │ │ │ ├── DashboardResponse.java │ │ │ │ ├── MeetingResponse.java │ │ │ │ ├── SessionResponse.java │ │ │ │ ├── MeetingEndResponse.java │ │ │ │ ├── MinutesResponse.java │ │ │ │ ├── MinutesDetailResponse.java │ │ │ │ ├── MinutesListResponse.java │ │ │ │ ├── SectionResponse.java │ │ │ │ ├── TemplateResponse.java │ │ │ │ ├── TemplateListResponse.java │ │ │ │ └── TodoResponse.java │ │ │ ├── gateway/ │ │ │ │ ├── DashboardGateway.java (✅ 기존) │ │ │ │ ├── MeetingGateway.java (✅ 기존) │ │ │ │ ├── MinutesGateway.java (✅ 기존) │ │ │ │ ├── MinutesSectionGateway.java (✅ 기존) │ │ │ │ ├── TemplateGateway.java (✅ 기존) │ │ │ │ ├── TodoGateway.java (✅ 기존) │ │ │ │ ├── SessionGateway.java │ │ │ │ ├── ParticipantGateway.java │ │ │ │ ├── CollaborationEventGateway.java │ │ │ │ ├── StatisticsGateway.java │ │ │ │ └── entity/ │ │ │ │ ├── MeetingEntity.java (✅ 기존) │ │ │ │ ├── MinutesEntity.java (✅ 기존) │ │ │ │ ├── MinutesSectionEntity.java (✅ 기존) │ │ │ │ ├── TemplateEntity.java (✅ 기존) │ │ │ │ ├── TodoEntity.java (✅ 기존) │ │ │ │ ├── SessionEntity.java │ │ │ │ ├── ParticipantEntity.java │ │ │ │ ├── CollaborationEventEntity.java │ │ │ │ └── StatisticsEntity.java │ │ │ │ └── repository/ │ │ │ │ ├── MeetingJpaRepository.java (✅ 기존) │ │ │ │ ├── MinutesJpaRepository.java (✅ 기존) │ │ │ │ ├── MinutesSectionJpaRepository.java (✅ 기존) │ │ │ │ ├── TemplateJpaRepository.java (✅ 기존) │ │ │ │ ├── TodoJpaRepository.java (✅ 기존) │ │ │ │ ├── SessionJpaRepository.java │ │ │ │ ├── ParticipantJpaRepository.java │ │ │ │ ├── CollaborationEventJpaRepository.java │ │ │ │ └── StatisticsJpaRepository.java │ │ │ ├── websocket/ │ │ │ │ ├── WebSocketConfig.java │ │ │ │ ├── WebSocketHandler.java │ │ │ │ └── CollaborationMessageHandler.java │ │ │ ├── event/ │ │ │ │ ├── publisher/ │ │ │ │ │ ├── EventPublisher.java │ │ │ │ │ └── EventHubPublisher.java │ │ │ │ └── dto/ │ │ │ │ ├── MeetingStartedEvent.java │ │ │ │ ├── MeetingEndedEvent.java │ │ │ │ ├── TodoAssignedEvent.java │ │ │ │ └── NotificationRequestEvent.java │ │ │ ├── cache/ │ │ │ │ ├── CacheConfig.java │ │ │ │ └── CacheService.java │ │ │ └── config/ │ │ │ ├── SecurityConfig.java │ │ │ ├── SwaggerConfig.java │ │ │ ├── JpaConfig.java │ │ │ └── jwt/ │ │ │ ├── JwtAuthenticationFilter.java │ │ │ ├── JwtTokenProvider.java │ │ │ └── UserPrincipal.java │ │ └── resources/ │ │ ├── application.yml (✅ 기존) │ │ └── application-dev.yml │ └── test/ │ └── java/ │ └── com/unicorn/hgzero/meeting/ │ └── (테스트 코드는 제외) └── build.gradle (✅ 기존) ``` ## 패키지별 역할 ### 1. biz (비즈니스 로직 레이어) #### 1.1 domain - **역할**: 비즈니스 도메인 모델 - **파일**: - Dashboard, Meeting, Minutes, MinutesSection, Template, Todo (✅ 기존) - Session, Participant, CollaborationEvent, Statistics (신규 필요) #### 1.2 service - **역할**: 비즈니스 로직 구현 (UseCase 구현체) - **파일**: - DashboardService, MeetingService, MinutesService, MinutesSectionService, TemplateService, TodoService (✅ 기존) - SessionService, CollaborationService, StatisticsService (신규 필요) #### 1.3 usecase/in - **역할**: Input Port (애플리케이션 서비스 인터페이스) - **파일**: 16개 기존, 3개 신규 필요 - SelectTemplateUseCase - GetMinutesListUseCase - GetTemplateListUseCase #### 1.4 usecase/out - **역할**: Output Port (Repository 인터페이스) - **파일**: 12개 기존, 7개 신규 필요 - SessionReader/Writer - ParticipantReader/Writer - CollaborationEventWriter - StatisticsWriter #### 1.5 dto - **역할**: 비즈니스 레이어 DTO - **파일**: 전부 신규 필요 (6개) ### 2. infra (인프라 레이어) #### 2.1 controller - **역할**: REST API 엔드포인트 - **파일**: 전부 신규 필요 (5개) #### 2.2 dto/request & dto/response - **역할**: API 요청/응답 DTO - **파일**: 전부 신규 필요 (약 20개) #### 2.3 gateway - **역할**: Repository 구현체 (Adapter) - **파일**: - 6개 Gateway 기존, 4개 신규 필요 - 5개 Entity 기존, 4개 신규 필요 - 5개 Repository 기존, 4개 신규 필요 #### 2.4 websocket - **역할**: 실시간 협업 WebSocket 처리 - **파일**: 전부 신규 필요 (3개) #### 2.5 event - **역할**: 이벤트 발행 - **파일**: 전부 신규 필요 (6개) #### 2.6 cache - **역할**: Redis 캐시 처리 - **파일**: 전부 신규 필요 (2개) #### 2.7 config - **역할**: Spring 설정 - **파일**: 전부 신규 필요 (7개) ## 구현 상태 요약 ### ✅ 구현 완료 (62개 파일) - Domain: 6개 - Service: 6개 - UseCase In: 16개 - UseCase Out: 12개 - Gateway: 6개 - Entity: 5개 - Repository: 5개 - Application Config: 1개 (application.yml) - Build Config: 1개 (build.gradle) - Main Class: 0개 ### ❌ 구현 필요 (약 80개 파일) - Main Application: 1개 - Domain: 4개 - Service: 3개 - UseCase In: 3개 - UseCase Out: 7개 - Business DTO: 6개 - Controller: 5개 - API DTO: ~20개 - Gateway: 4개 - Entity: 4개 - Repository: 4개 - WebSocket: 3개 - Event: 6개 - Cache: 2개 - Config: 7개 - Application Config: 1개 (application-dev.yml) ## 다음 단계 1. **0단계: 준비** - ✅ 패키지 구조도 작성 완료 - Application 메인 클래스 작성 - application-dev.yml 작성 2. **1단계: common 모듈 확인 및 보완** - common 모듈 검토 - 필요한 공통 클래스 추가 3. **2단계: meeting 서비스 구현** - Config 레이어 (SecurityConfig, SwaggerConfig, JWT 등) - Event 발행 인프라 - Cache 서비스 - Controller 레이어 - DTO 레이어 - 누락된 Domain/Service/Gateway - WebSocket 실시간 협업 4. **3단계: 컴파일 및 검증** - 각 단계별 컴파일 - 에러 수정 - 최종 빌드