mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 07:56:24 +00:00
419 lines
11 KiB
Markdown
419 lines
11 KiB
Markdown
# 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
|