hgzero/develop/dev/package-structure-meeting.md
2025-10-23 17:23:52 +09:00

15 KiB

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단계: 컴파일 및 검증

    • 각 단계별 컴파일
    • 에러 수정
    • 최종 빌드