mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-12 22:59:10 +00:00
add new meeting
This commit is contained in:
@@ -0,0 +1,418 @@
|
||||
# Meeting 서비스 백엔드 개발 결과
|
||||
|
||||
## 1. 개요
|
||||
|
||||
### 1.1 개발 범위
|
||||
- **서비스명**: Meeting Service
|
||||
- **포트**: 8081
|
||||
- **아키텍처**: Clean/Hexagonal Architecture
|
||||
- **프레임워크**: Spring Boot 3.3.0, Java 21
|
||||
- **데이터베이스**: PostgreSQL (meetingdb)
|
||||
- **캐시**: Redis (database: 1)
|
||||
- **메시징**: Azure Event Hubs
|
||||
|
||||
### 1.2 개발 방식
|
||||
3단계 점진적 개발:
|
||||
- **Stage 0 (준비)**: 프로젝트 구조 파악 및 메인 애플리케이션 생성
|
||||
- **Stage 1 (공통 모듈)**: common 모듈 검토
|
||||
- **Stage 2 (서비스 구현)**: Config, Domain, Service, Gateway, Controller 레이어 구현
|
||||
|
||||
---
|
||||
|
||||
## 2. Stage 0: 준비 단계
|
||||
|
||||
### 2.1 완료 항목
|
||||
✅ 기존 개발 결과 분석
|
||||
- 62개 Java 파일 확인 (Domain, Service, UseCase, Gateway, Entity, Repository)
|
||||
- Clean/Hexagonal 아키텍처 패턴 확인
|
||||
- 패키지 구조 문서 작성 (develop/dev/package-structure-meeting.md)
|
||||
|
||||
✅ MeetingApplication.java 생성
|
||||
```java
|
||||
위치: meeting/src/main/java/com/unicorn/hgzero/meeting/MeetingApplication.java
|
||||
패키지: com.unicorn.hgzero.meeting
|
||||
ComponentScan: {"com.unicorn.hgzero.meeting", "com.unicorn.hgzero.common"}
|
||||
```
|
||||
|
||||
✅ application.yml 확인
|
||||
```yaml
|
||||
서버 포트: 8081
|
||||
데이터베이스: PostgreSQL (meetingdb)
|
||||
Redis: database 1
|
||||
JWT 설정: access-token-validity 3600초
|
||||
CORS: http://localhost:*
|
||||
```
|
||||
|
||||
✅ 컴파일 에러 수정
|
||||
- TemplateEntity 패키지 경로 수정
|
||||
- Dashboard 도메인 클래스 확장:
|
||||
- userId, period 필드 추가
|
||||
- Statistics 클래스 필드 확장 (11개 필드)
|
||||
- 도메인 메서드 추가:
|
||||
- MinutesSection.update(String title, String content)
|
||||
- Todo.update(String title, String description, String assigneeId, LocalDate dueDate, String priority)
|
||||
- Minutes.incrementVersion()
|
||||
- Minutes.updateTitle(String title)
|
||||
|
||||
### 2.2 컴파일 결과
|
||||
```
|
||||
BUILD SUCCESSFUL
|
||||
경고: 1개 (MinutesEntity @Builder.Default)
|
||||
에러: 0개
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Stage 1: common 모듈
|
||||
|
||||
### 3.1 common 모듈 구성
|
||||
✅ 검토 완료
|
||||
|
||||
| 카테고리 | 클래스 | 설명 |
|
||||
|---------|--------|------|
|
||||
| AOP | LoggingAspect | 로깅 관점 |
|
||||
| Config | JpaConfig | JPA 설정 |
|
||||
| DTO | ApiResponse | API 응답 포맷 |
|
||||
| DTO | JwtTokenDTO, JwtTokenRefreshDTO, JwtTokenVerifyDTO | JWT 토큰 DTO |
|
||||
| Entity | BaseTimeEntity | 생성/수정 시간 베이스 엔티티 |
|
||||
| Exception | BusinessException | 비즈니스 예외 |
|
||||
| Exception | ErrorCode | 에러 코드 |
|
||||
| Exception | InfraException | 인프라 예외 |
|
||||
| Util | DateUtil | 날짜 유틸리티 |
|
||||
| Util | StringUtil | 문자열 유틸리티 |
|
||||
|
||||
### 3.2 컴파일 결과
|
||||
```
|
||||
BUILD SUCCESSFUL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Stage 2: meeting 서비스 구현
|
||||
|
||||
### 4.1 Config 레이어 (완료)
|
||||
|
||||
#### 4.1.1 SecurityConfig
|
||||
✅ 구현 완료
|
||||
```
|
||||
위치: infra/config/SecurityConfig.java
|
||||
기능:
|
||||
- JWT 기반 인증
|
||||
- CORS 설정 (환경변수 기반)
|
||||
- Stateless 세션 관리
|
||||
- 공개 엔드포인트: /actuator/**, /swagger-ui/**, /health, /ws/**
|
||||
- WebSocket 엔드포인트 허용
|
||||
```
|
||||
|
||||
#### 4.1.2 JWT 인증 시스템
|
||||
✅ 구현 완료
|
||||
```
|
||||
위치: infra/config/jwt/
|
||||
|
||||
JwtTokenProvider:
|
||||
- JWT 토큰 검증 및 파싱
|
||||
- 사용자 정보 추출 (userId, username, authority)
|
||||
- 토큰 만료 확인
|
||||
|
||||
JwtAuthenticationFilter:
|
||||
- HTTP 요청에서 JWT 토큰 추출
|
||||
- Spring Security 인증 컨텍스트 설정
|
||||
- 공개 엔드포인트 필터 제외
|
||||
|
||||
UserPrincipal:
|
||||
- 인증된 사용자 정보 객체
|
||||
- userId, username, authority 필드
|
||||
- 권한 확인 메서드 (isAdmin, isUser)
|
||||
```
|
||||
|
||||
#### 4.1.3 SwaggerConfig
|
||||
✅ 구현 완료
|
||||
```
|
||||
위치: infra/config/SwaggerConfig.java
|
||||
기능:
|
||||
- OpenAPI 3.0 설정
|
||||
- Bearer JWT 인증 스킴
|
||||
- 서버 설정 (localhost:8081, 커스텀 서버)
|
||||
- API 정보 (제목, 설명, 버전, 연락처)
|
||||
```
|
||||
|
||||
### 4.2 컴파일 결과
|
||||
```
|
||||
BUILD SUCCESSFUL
|
||||
경고: 1개 (deprecated API 사용)
|
||||
에러: 0개
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 기존 구현 현황
|
||||
|
||||
### 5.1 Domain 레이어 (6개 클래스)
|
||||
✅ 기존 구현 확인
|
||||
- Meeting: 회의 도메인
|
||||
- Minutes: 회의록 도메인 (updateTitle, incrementVersion 메서드 추가)
|
||||
- MinutesSection: 회의록 섹션 도메인 (update 메서드 추가)
|
||||
- Todo: Todo 도메인 (update 메서드 추가)
|
||||
- Template: 템플릿 도메인
|
||||
- Dashboard: 대시보드 도메인 (userId, period 필드 추가, Statistics 확장)
|
||||
|
||||
### 5.2 Service 레이어 (6개 클래스)
|
||||
✅ 기존 구현 확인
|
||||
- MeetingService: 회의 비즈니스 로직
|
||||
- MinutesService: 회의록 비즈니스 로직
|
||||
- MinutesSectionService: 회의록 섹션 비즈니스 로직
|
||||
- TodoService: Todo 비즈니스 로직
|
||||
- TemplateService: 템플릿 비즈니스 로직
|
||||
- DashboardService: 대시보드 비즈니스 로직
|
||||
|
||||
### 5.3 UseCase 레이어 (28개 인터페이스)
|
||||
✅ 기존 구현 확인
|
||||
- UseCase In (16개): Service 입력 포트
|
||||
- UseCase Out (12개): Gateway 출력 포트
|
||||
|
||||
### 5.4 Gateway 레이어 (6개 클래스)
|
||||
✅ 기존 구현 확인
|
||||
- MeetingGateway: 회의 게이트웨이
|
||||
- MinutesGateway: 회의록 게이트웨이
|
||||
- TodoGateway: Todo 게이트웨이
|
||||
- TemplateGateway: 템플릿 게이트웨이
|
||||
- DashboardGateway: 대시보드 게이트웨이
|
||||
- CacheGateway: 캐시 게이트웨이
|
||||
|
||||
### 5.5 Entity 레이어 (5개 클래스)
|
||||
✅ 기존 구현 확인
|
||||
- MeetingEntity: 회의 엔티티
|
||||
- MinutesEntity: 회의록 엔티티
|
||||
- MinutesSectionEntity: 회의록 섹션 엔티티 (package 수정)
|
||||
- TodoEntity: Todo 엔티티
|
||||
- TemplateEntity: 템플릿 엔티티 (package 수정, import 추가)
|
||||
|
||||
### 5.6 Repository 레이어 (5개 인터페이스)
|
||||
✅ 기존 구현 확인
|
||||
- MeetingJpaRepository
|
||||
- MinutesJpaRepository
|
||||
- TodoJpaRepository
|
||||
- TemplateJpaRepository
|
||||
- MinutesSectionJpaRepository
|
||||
|
||||
---
|
||||
|
||||
## 6. 추가 구현 필요 항목
|
||||
|
||||
### 6.1 Controller 레이어 (5개 클래스)
|
||||
⏳ 구현 필요
|
||||
- DashboardController (GET /dashboard)
|
||||
- MeetingController (POST, PUT, POST /meetings 관련 4개 API)
|
||||
- MinutesController (GET, PATCH, POST, DELETE /minutes 관련 7개 API)
|
||||
- TodoController (POST, PATCH /todos 관련 2개 API)
|
||||
- TemplateController (GET /templates 관련 2개 API)
|
||||
|
||||
### 6.2 DTO 레이어 (~20개 클래스)
|
||||
⏳ 구현 필요
|
||||
- Request DTOs (~10개): 각 API의 요청 DTO
|
||||
- Response DTOs (~10개): 각 API의 응답 DTO
|
||||
|
||||
### 6.3 WebSocket 레이어 (3개 클래스)
|
||||
⏳ 구현 필요
|
||||
- WebSocketConfig: WebSocket 설정
|
||||
- WebSocketHandler: WebSocket 메시지 핸들러
|
||||
- CollaborationMessage: 실시간 협업 메시지
|
||||
|
||||
### 6.4 Event 레이어 (6개 클래스)
|
||||
⏳ 구현 필요
|
||||
- Event Publishers (3개):
|
||||
- MeetingEventPublisher
|
||||
- MinutesEventPublisher
|
||||
- TodoEventPublisher
|
||||
- Event Messages (3개):
|
||||
- MeetingStartedEvent
|
||||
- MeetingEndedEvent
|
||||
- NotificationRequestEvent
|
||||
|
||||
### 6.5 Cache 레이어 (2개 클래스)
|
||||
⏳ 구현 필요
|
||||
- CacheService: 캐시 서비스 구현체
|
||||
- CacheKeyGenerator: 캐시 키 생성기
|
||||
|
||||
### 6.6 추가 Config (2개 클래스)
|
||||
⏳ 구현 필요
|
||||
- RedisConfig: Redis 설정
|
||||
- WebSocketConfig: WebSocket 설정
|
||||
|
||||
---
|
||||
|
||||
## 7. 다음 단계 계획
|
||||
|
||||
### 7.1 Controller 및 DTO 구현
|
||||
우선순위: 높음
|
||||
|
||||
1. **DashboardController + DTO**
|
||||
- GET /dashboard
|
||||
- DashboardResponse
|
||||
|
||||
2. **MeetingController + DTOs**
|
||||
- POST /meetings (CreateMeetingRequest/Response)
|
||||
- PUT /meetings/{id}/template (SelectTemplateRequest/Response)
|
||||
- POST /meetings/{id}/start (StartMeetingRequest/Response)
|
||||
- POST /meetings/{id}/end (EndMeetingRequest/Response)
|
||||
|
||||
3. **MinutesController + DTOs**
|
||||
- 7개 API + Request/Response DTOs
|
||||
|
||||
4. **TodoController + DTOs**
|
||||
- 2개 API + Request/Response DTOs
|
||||
|
||||
5. **TemplateController + DTOs**
|
||||
- 2개 API + Response DTOs
|
||||
|
||||
### 7.2 WebSocket 구현
|
||||
우선순위: 중간
|
||||
|
||||
- WebSocketConfig
|
||||
- WebSocketHandler
|
||||
- CollaborationMessage
|
||||
|
||||
### 7.3 Event 및 Cache 구현
|
||||
우선순위: 중간
|
||||
|
||||
- Event Publishers
|
||||
- Event Messages
|
||||
- Cache Service
|
||||
- Redis Config
|
||||
|
||||
### 7.4 통합 테스트
|
||||
우선순위: 높음
|
||||
|
||||
- 전체 빌드 (./gradlew meeting:build)
|
||||
- API 통합 테스트
|
||||
- WebSocket 연결 테스트
|
||||
|
||||
---
|
||||
|
||||
## 8. 개발 환경
|
||||
|
||||
### 8.1 기술 스택
|
||||
- **언어**: Java 21
|
||||
- **프레임워크**: Spring Boot 3.3.0
|
||||
- **빌드 도구**: Gradle 8.14
|
||||
- **데이터베이스**: PostgreSQL 14
|
||||
- **캐시**: Redis 7
|
||||
- **메시징**: Azure Event Hubs
|
||||
- **API 문서**: OpenAPI 3.0 (Swagger)
|
||||
|
||||
### 8.2 의존성
|
||||
```gradle
|
||||
Spring Boot Starter Web
|
||||
Spring Boot Starter Data JPA
|
||||
Spring Boot Starter Security
|
||||
Spring Boot Starter WebSocket
|
||||
Spring Boot Starter Data Redis
|
||||
Spring Boot Starter Actuator
|
||||
SpringDoc OpenAPI (2.5.0)
|
||||
JJWT (0.12.5)
|
||||
Lombok
|
||||
PostgreSQL Driver
|
||||
```
|
||||
|
||||
### 8.3 데이터베이스 연결 정보
|
||||
```yaml
|
||||
호스트: 4.230.48.72
|
||||
포트: 5432
|
||||
데이터베이스: meetingdb
|
||||
사용자: hgzerouser
|
||||
```
|
||||
|
||||
### 8.4 Redis 연결 정보
|
||||
```yaml
|
||||
호스트: 20.249.177.114
|
||||
포트: 6379
|
||||
데이터베이스: 1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. 컴파일 및 빌드
|
||||
|
||||
### 9.1 컴파일 명령
|
||||
```bash
|
||||
# Meeting 서비스 컴파일
|
||||
./gradlew meeting:compileJava
|
||||
|
||||
# Common 모듈 컴파일
|
||||
./gradlew common:compileJava
|
||||
|
||||
# 전체 프로젝트 컴파일
|
||||
./gradlew compileJava
|
||||
```
|
||||
|
||||
### 9.2 빌드 명령
|
||||
```bash
|
||||
# Meeting 서비스 빌드
|
||||
./gradlew meeting:build
|
||||
|
||||
# 전체 프로젝트 빌드
|
||||
./gradlew build
|
||||
```
|
||||
|
||||
### 9.3 실행 명령
|
||||
```bash
|
||||
# Meeting 서비스 실행
|
||||
./gradlew meeting:bootRun
|
||||
|
||||
# 또는 jar 실행
|
||||
java -jar meeting/build/libs/meeting.jar
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. API 엔드포인트
|
||||
|
||||
### 10.1 Dashboard APIs (1개)
|
||||
| Method | Endpoint | 설명 | 상태 |
|
||||
|--------|----------|------|-----|
|
||||
| GET | /dashboard | 대시보드 데이터 조회 | ⏳ 미구현 |
|
||||
|
||||
### 10.2 Meeting APIs (4개)
|
||||
| Method | Endpoint | 설명 | 상태 |
|
||||
|--------|----------|------|-----|
|
||||
| POST | /meetings | 회의 예약 | ⏳ 미구현 |
|
||||
| PUT | /meetings/{meetingId}/template | 템플릿 선택 | ⏳ 미구현 |
|
||||
| POST | /meetings/{meetingId}/start | 회의 시작 | ⏳ 미구현 |
|
||||
| POST | /meetings/{meetingId}/end | 회의 종료 | ⏳ 미구현 |
|
||||
|
||||
### 10.3 Minutes APIs (7개)
|
||||
| Method | Endpoint | 설명 | 상태 |
|
||||
|--------|----------|------|-----|
|
||||
| GET | /minutes | 회의록 목록 조회 | ⏳ 미구현 |
|
||||
| GET | /minutes/{minutesId} | 회의록 상세 조회 | ⏳ 미구현 |
|
||||
| PATCH | /minutes/{minutesId} | 회의록 수정 | ⏳ 미구현 |
|
||||
| POST | /minutes/{minutesId}/finalize | 회의록 확정 | ⏳ 미구현 |
|
||||
| POST | /minutes/{minutesId}/sections/{sectionId}/verify | 섹션 검증 완료 | ⏳ 미구현 |
|
||||
| POST | /minutes/{minutesId}/sections/{sectionId}/lock | 섹션 잠금 | ⏳ 미구현 |
|
||||
| DELETE | /minutes/{minutesId}/sections/{sectionId}/lock | 섹션 잠금 해제 | ⏳ 미구현 |
|
||||
|
||||
### 10.4 Todo APIs (2개)
|
||||
| Method | Endpoint | 설명 | 상태 |
|
||||
|--------|----------|------|-----|
|
||||
| POST | /todos | Todo 할당 | ⏳ 미구현 |
|
||||
| PATCH | /todos/{todoId}/complete | Todo 완료 | ⏳ 미구현 |
|
||||
|
||||
### 10.5 Template APIs (2개)
|
||||
| Method | Endpoint | 설명 | 상태 |
|
||||
|--------|----------|------|-----|
|
||||
| GET | /templates | 템플릿 목록 조회 | ⏳ 미구현 |
|
||||
| GET | /templates/{templateId} | 템플릿 상세 조회 | ⏳ 미구현 |
|
||||
|
||||
### 10.6 WebSocket
|
||||
| Endpoint | 설명 | 상태 |
|
||||
|----------|------|-----|
|
||||
| GET /ws/minutes/{minutesId} | 회의록 실시간 협업 | ⏳ 미구현 |
|
||||
|
||||
---
|
||||
|
||||
## 11. 참고 문서
|
||||
- 패키지 구조도: develop/dev/package-structure-meeting.md
|
||||
- API 설계서: design/backend/api/API설계서.md
|
||||
- 논리 아키텍처: design/backend/logical/logical-architecture.md
|
||||
- 내부 시퀀스: design/backend/sequence/inner/*.puml
|
||||
- 데이터베이스 설치 결과: develop/database/exec/db-exec-dev.md
|
||||
@@ -0,0 +1,312 @@
|
||||
# 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단계: 컴파일 및 검증**
|
||||
- 각 단계별 컴파일
|
||||
- 에러 수정
|
||||
- 최종 빌드
|
||||
Reference in New Issue
Block a user