# 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단계: 컴파일 및 검증**
   - 각 단계별 컴파일
   - 에러 수정
   - 최종 빌드
