mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 19:36:23 +00:00
420 lines
14 KiB
Markdown
420 lines
14 KiB
Markdown
# 패키지 구조도
|
|
|
|
## 전체 프로젝트 구조
|
|
|
|
```
|
|
HGZero/
|
|
├── common/ # 공통 모듈
|
|
├── user/ # User Service (Layered)
|
|
├── meeting/ # Meeting Service (Clean)
|
|
├── stt/ # STT Service (Layered)
|
|
├── ai/ # AI Service (Clean)
|
|
├── notification/ # Notification Service (Layered)
|
|
├── settings.gradle # Gradle 설정
|
|
└── build.gradle # 루트 build.gradle
|
|
```
|
|
|
|
## 1. Common 모듈
|
|
|
|
```
|
|
common/
|
|
└── src/main/java/com/unicorn/hgzero/common/
|
|
├── dto/
|
|
│ ├── ApiResponse.java
|
|
│ ├── JwtTokenDTO.java
|
|
│ ├── JwtTokenRefreshDTO.java
|
|
│ └── JwtTokenVerifyDTO.java
|
|
├── entity/
|
|
│ └── BaseTimeEntity.java
|
|
├── config/
|
|
│ └── JpaConfig.java
|
|
├── util/
|
|
│ ├── DateUtil.java
|
|
│ └── StringUtil.java
|
|
├── aop/
|
|
│ └── LoggingAspect.java
|
|
└── exception/
|
|
├── ErrorCode.java
|
|
├── BusinessException.java
|
|
└── InfraException.java
|
|
```
|
|
|
|
## 2. User Service (Layered Architecture)
|
|
|
|
```
|
|
user/
|
|
└── src/main/java/com/unicorn/hgzero/user/
|
|
├── UserApplication.java
|
|
├── controller/
|
|
│ └── UserController.java
|
|
├── dto/
|
|
│ ├── LoginRequest.java
|
|
│ ├── LoginResponse.java
|
|
│ ├── RefreshTokenRequest.java
|
|
│ ├── RefreshTokenResponse.java
|
|
│ ├── LogoutRequest.java
|
|
│ └── TokenValidateResponse.java
|
|
├── service/
|
|
│ ├── UserService.java
|
|
│ └── UserServiceImpl.java
|
|
├── domain/
|
|
│ └── User.java
|
|
├── repository/
|
|
│ ├── entity/
|
|
│ │ └── UserEntity.java
|
|
│ └── jpa/
|
|
│ └── UserRepository.java
|
|
└── config/
|
|
├── SecurityConfig.java
|
|
├── SwaggerConfig.java
|
|
├── LdapConfig.java
|
|
└── jwt/
|
|
├── JwtAuthenticationFilter.java
|
|
├── JwtTokenProvider.java
|
|
└── UserPrincipal.java
|
|
```
|
|
|
|
## 3. Meeting Service (Clean Architecture)
|
|
|
|
```
|
|
meeting/
|
|
└── src/main/java/com/unicorn/hgzero/meeting/
|
|
├── biz/
|
|
│ ├── domain/
|
|
│ │ ├── Meeting.java
|
|
│ │ ├── Minutes.java
|
|
│ │ ├── MinutesSection.java
|
|
│ │ ├── Todo.java
|
|
│ │ ├── Template.java
|
|
│ │ └── Dashboard.java
|
|
│ ├── dto/
|
|
│ │ ├── MeetingDto.java
|
|
│ │ ├── MinutesDto.java
|
|
│ │ ├── TodoDto.java
|
|
│ │ ├── TemplateDto.java
|
|
│ │ ├── DashboardDto.java
|
|
│ │ └── WebSocketMessageDto.java
|
|
│ ├── usecase/
|
|
│ │ ├── in/
|
|
│ │ │ ├── CreateMeetingUseCase.java
|
|
│ │ │ ├── SelectTemplateUseCase.java
|
|
│ │ │ ├── StartMeetingUseCase.java
|
|
│ │ │ ├── EndMeetingUseCase.java
|
|
│ │ │ ├── GetMinutesListUseCase.java
|
|
│ │ │ ├── GetMinutesDetailUseCase.java
|
|
│ │ │ ├── UpdateMinutesUseCase.java
|
|
│ │ │ ├── FinalizeMinutesUseCase.java
|
|
│ │ │ ├── VerifySectionUseCase.java
|
|
│ │ │ ├── LockSectionUseCase.java
|
|
│ │ │ ├── UnlockSectionUseCase.java
|
|
│ │ │ ├── CreateTodoUseCase.java
|
|
│ │ │ ├── CompleteTodoUseCase.java
|
|
│ │ │ ├── GetTemplateListUseCase.java
|
|
│ │ │ ├── GetTemplateDetailUseCase.java
|
|
│ │ │ └── GetDashboardUseCase.java
|
|
│ │ └── out/
|
|
│ │ ├── MeetingReader.java
|
|
│ │ ├── MeetingWriter.java
|
|
│ │ ├── MinutesReader.java
|
|
│ │ ├── MinutesWriter.java
|
|
│ │ ├── TodoReader.java
|
|
│ │ ├── TodoWriter.java
|
|
│ │ ├── TemplateReader.java
|
|
│ │ ├── CacheManager.java
|
|
│ │ └── EventPublisher.java
|
|
│ └── service/
|
|
│ ├── MeetingService.java
|
|
│ ├── MinutesService.java
|
|
│ ├── TodoService.java
|
|
│ ├── TemplateService.java
|
|
│ ├── DashboardService.java
|
|
│ └── WebSocketService.java
|
|
└── infra/
|
|
├── MeetingApplication.java
|
|
├── controller/
|
|
│ ├── MeetingController.java
|
|
│ ├── MinutesController.java
|
|
│ ├── TodoController.java
|
|
│ ├── TemplateController.java
|
|
│ ├── DashboardController.java
|
|
│ └── WebSocketController.java
|
|
├── gateway/
|
|
│ ├── entity/
|
|
│ │ ├── MeetingEntity.java
|
|
│ │ ├── MinutesEntity.java
|
|
│ │ ├── MinutesSectionEntity.java
|
|
│ │ ├── TodoEntity.java
|
|
│ │ └── TemplateEntity.java
|
|
│ ├── repository/
|
|
│ │ ├── MeetingJpaRepository.java
|
|
│ │ ├── MinutesJpaRepository.java
|
|
│ │ ├── TodoJpaRepository.java
|
|
│ │ └── TemplateJpaRepository.java
|
|
│ ├── MeetingGateway.java
|
|
│ ├── MinutesGateway.java
|
|
│ ├── TodoGateway.java
|
|
│ ├── TemplateGateway.java
|
|
│ ├── CacheGateway.java
|
|
│ └── EventPublisherGateway.java
|
|
└── config/
|
|
├── SecurityConfig.java
|
|
├── SwaggerConfig.java
|
|
├── WebSocketConfig.java
|
|
├── RedisConfig.java
|
|
└── jwt/
|
|
├── JwtAuthenticationFilter.java
|
|
├── JwtTokenProvider.java
|
|
└── UserPrincipal.java
|
|
```
|
|
|
|
## 4. STT Service (Layered Architecture)
|
|
|
|
```
|
|
stt/
|
|
└── src/main/java/com/unicorn/hgzero/stt/
|
|
├── SttApplication.java
|
|
├── controller/
|
|
│ ├── RecordingController.java
|
|
│ ├── TranscriptionController.java
|
|
│ └── SpeakerController.java
|
|
├── dto/
|
|
│ ├── RecordingDto.java
|
|
│ ├── TranscriptionDto.java
|
|
│ ├── SpeakerDto.java
|
|
│ └── TranscriptSegmentDto.java
|
|
├── service/
|
|
│ ├── RecordingService.java
|
|
│ ├── RecordingServiceImpl.java
|
|
│ ├── TranscriptionService.java
|
|
│ ├── TranscriptionServiceImpl.java
|
|
│ ├── SpeakerService.java
|
|
│ └── SpeakerServiceImpl.java
|
|
├── domain/
|
|
│ ├── Recording.java
|
|
│ ├── Transcription.java
|
|
│ ├── TranscriptSegment.java
|
|
│ └── Speaker.java
|
|
├── repository/
|
|
│ ├── entity/
|
|
│ │ ├── RecordingEntity.java
|
|
│ │ ├── TranscriptionEntity.java
|
|
│ │ └── SpeakerEntity.java
|
|
│ └── jpa/
|
|
│ ├── RecordingRepository.java
|
|
│ ├── TranscriptionRepository.java
|
|
│ └── SpeakerRepository.java
|
|
└── config/
|
|
├── SecurityConfig.java
|
|
├── SwaggerConfig.java
|
|
├── AzureSpeechConfig.java
|
|
├── AzureBlobConfig.java
|
|
├── WebSocketConfig.java
|
|
└── jwt/
|
|
├── JwtAuthenticationFilter.java
|
|
├── JwtTokenProvider.java
|
|
└── UserPrincipal.java
|
|
```
|
|
|
|
## 5. AI Service (Clean Architecture)
|
|
|
|
```
|
|
ai/
|
|
└── src/main/java/com/unicorn/hgzero/ai/
|
|
├── biz/
|
|
│ ├── domain/
|
|
│ │ ├── ProcessedTranscript.java
|
|
│ │ ├── ExtractedTodo.java
|
|
│ │ ├── RelatedMinutes.java
|
|
│ │ ├── Term.java
|
|
│ │ └── Suggestion.java
|
|
│ ├── dto/
|
|
│ │ ├── TranscriptDto.java
|
|
│ │ ├── TodoDto.java
|
|
│ │ ├── RelatedMinutesDto.java
|
|
│ │ ├── TermDto.java
|
|
│ │ └── SuggestionDto.java
|
|
│ ├── usecase/
|
|
│ │ ├── in/
|
|
│ │ │ ├── ProcessTranscriptUseCase.java
|
|
│ │ │ ├── ImproveTranscriptUseCase.java
|
|
│ │ │ ├── ExtractTodoUseCase.java
|
|
│ │ │ ├── GetRelatedMinutesUseCase.java
|
|
│ │ │ ├── DetectTermsUseCase.java
|
|
│ │ │ ├── ExplainTermUseCase.java
|
|
│ │ │ ├── SuggestDiscussionUseCase.java
|
|
│ │ │ └── SuggestDecisionUseCase.java
|
|
│ │ └── out/
|
|
│ │ ├── TranscriptReader.java
|
|
│ │ ├── TranscriptWriter.java
|
|
│ │ ├── TodoWriter.java
|
|
│ │ ├── RelatedMinutesReader.java
|
|
│ │ ├── TermReader.java
|
|
│ │ ├── LlmClient.java
|
|
│ │ ├── VectorSearchClient.java
|
|
│ │ └── CacheManager.java
|
|
│ └── service/
|
|
│ ├── TranscriptService.java
|
|
│ ├── TodoService.java
|
|
│ ├── RelatedMinutesService.java
|
|
│ ├── TermService.java
|
|
│ └── SuggestionService.java
|
|
└── infra/
|
|
├── AiApplication.java
|
|
├── controller/
|
|
│ ├── TranscriptController.java
|
|
│ ├── TodoController.java
|
|
│ ├── TermController.java
|
|
│ └── SuggestionController.java
|
|
├── gateway/
|
|
│ ├── entity/
|
|
│ │ ├── TranscriptEntity.java
|
|
│ │ └── TermEntity.java
|
|
│ ├── repository/
|
|
│ │ ├── TranscriptJpaRepository.java
|
|
│ │ └── TermJpaRepository.java
|
|
│ ├── TranscriptGateway.java
|
|
│ ├── TodoGateway.java
|
|
│ ├── RelatedMinutesGateway.java
|
|
│ ├── TermGateway.java
|
|
│ ├── LlmGateway.java
|
|
│ ├── VectorSearchGateway.java
|
|
│ └── CacheGateway.java
|
|
└── config/
|
|
├── SecurityConfig.java
|
|
├── SwaggerConfig.java
|
|
├── OpenAiConfig.java
|
|
├── AzureAiSearchConfig.java
|
|
├── RedisConfig.java
|
|
└── jwt/
|
|
├── JwtAuthenticationFilter.java
|
|
├── JwtTokenProvider.java
|
|
└── UserPrincipal.java
|
|
```
|
|
|
|
## 6. Notification Service (Layered Architecture)
|
|
|
|
```
|
|
notification/
|
|
└── src/main/java/com/unicorn/hgzero/notification/
|
|
├── NotificationApplication.java
|
|
├── controller/
|
|
│ ├── NotificationController.java
|
|
│ └── NotificationSettingsController.java
|
|
├── dto/
|
|
│ ├── NotificationDto.java
|
|
│ ├── NotificationSettingsDto.java
|
|
│ ├── EmailTemplateDto.java
|
|
│ └── InvitationNotificationDto.java
|
|
├── service/
|
|
│ ├── NotificationService.java
|
|
│ ├── NotificationServiceImpl.java
|
|
│ ├── NotificationSettingsService.java
|
|
│ ├── NotificationSettingsServiceImpl.java
|
|
│ ├── EmailService.java
|
|
│ └── EmailServiceImpl.java
|
|
├── domain/
|
|
│ ├── Notification.java
|
|
│ ├── NotificationSettings.java
|
|
│ └── EmailTemplate.java
|
|
├── repository/
|
|
│ ├── entity/
|
|
│ │ ├── NotificationEntity.java
|
|
│ │ └── NotificationSettingsEntity.java
|
|
│ └── jpa/
|
|
│ ├── NotificationRepository.java
|
|
│ └── NotificationSettingsRepository.java
|
|
└── config/
|
|
├── SecurityConfig.java
|
|
├── SwaggerConfig.java
|
|
├── EmailConfig.java
|
|
├── EventHubConfig.java
|
|
└── jwt/
|
|
├── JwtAuthenticationFilter.java
|
|
├── JwtTokenProvider.java
|
|
└── UserPrincipal.java
|
|
```
|
|
|
|
## 패키지 네이밍 규칙
|
|
|
|
### 공통
|
|
- **Base Package**: `com.unicorn.hgzero`
|
|
|
|
### Layered Architecture (User, STT, Notification)
|
|
- **Package**: `com.unicorn.hgzero.{service-name}`
|
|
- **구조**:
|
|
- controller: REST API 컨트롤러
|
|
- service: 비즈니스 로직
|
|
- domain: 도메인 모델
|
|
- dto: 데이터 전송 객체
|
|
- repository: 데이터 액세스
|
|
- entity: JPA 엔티티
|
|
- jpa: JPA Repository
|
|
- config: 설정 클래스
|
|
|
|
### Clean Architecture (Meeting, AI)
|
|
- **Base Package**: `com.unicorn.hgzero.{service-name}`
|
|
- **구조**:
|
|
- biz: 비즈니스 레이어
|
|
- domain: 도메인 모델
|
|
- dto: 비즈니스 DTO
|
|
- usecase: 유스케이스
|
|
- in: 입력 포트 (인터페이스)
|
|
- out: 출력 포트 (인터페이스)
|
|
- service: 유스케이스 구현체
|
|
- infra: 인프라스트럭처 레이어
|
|
- controller: REST API 컨트롤러
|
|
- gateway: 출력 포트 구현체
|
|
- entity: JPA 엔티티
|
|
- repository: JPA Repository
|
|
- config: 설정 클래스
|
|
|
|
## 설정 파일 구조
|
|
|
|
```
|
|
각 서비스/
|
|
├── src/main/resources/
|
|
│ ├── application.yml # 메인 설정
|
|
│ └── application-dev.yml # 개발 환경 설정
|
|
└── build.gradle # Gradle 빌드 설정
|
|
```
|
|
|
|
## 공통 라이브러리 의존성 (루트 build.gradle에 정의)
|
|
|
|
- Spring Boot Starter Web
|
|
- Spring Boot Starter Data JPA
|
|
- Spring Boot Starter Security
|
|
- Spring Boot Starter Actuator
|
|
- Spring Boot Configuration Processor
|
|
- Lombok
|
|
- MapStruct
|
|
- Springdoc OpenAPI (Swagger)
|
|
- JWT (jjwt-api, jjwt-impl, jjwt-jackson)
|
|
- PostgreSQL Driver
|
|
- Redis (Lettuce)
|
|
- Apache Commons Lang3
|
|
- Apache Commons IO
|
|
|
|
## 서비스별 추가 의존성
|
|
|
|
### User Service
|
|
- Spring LDAP
|
|
|
|
### Meeting Service
|
|
- Spring WebSocket
|
|
- Spring Messaging
|
|
|
|
### STT Service
|
|
- Azure Speech SDK
|
|
- Azure Blob Storage SDK
|
|
- Spring WebSocket
|
|
|
|
### AI Service
|
|
- OpenAI Java Client
|
|
- Azure AI Search SDK
|
|
- Spring AI
|
|
|
|
### Notification Service
|
|
- Spring Mail
|
|
- Azure Event Hubs SDK
|
|
- Thymeleaf (Email Template)
|