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

11 KiB

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 생성

위치: 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 확인

서버 포트: 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 의존성

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 데이터베이스 연결 정보

호스트: 4.230.48.72
포트: 5432
데이터베이스: meetingdb
사용자: hgzerouser

8.4 Redis 연결 정보

호스트: 20.249.177.114
포트: 6379
데이터베이스: 1

9. 컴파일 및 빌드

9.1 컴파일 명령

# Meeting 서비스 컴파일
./gradlew meeting:compileJava

# Common 모듈 컴파일
./gradlew common:compileJava

# 전체 프로젝트 컴파일
./gradlew compileJava

9.2 빌드 명령

# Meeting 서비스 빌드
./gradlew meeting:build

# 전체 프로젝트 빌드
./gradlew build

9.3 실행 명령

# 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