mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-12 22:59:10 +00:00
develop
This commit is contained in:
@@ -0,0 +1,419 @@
|
||||
# 패키지 구조도
|
||||
|
||||
## 전체 프로젝트 구조
|
||||
|
||||
```
|
||||
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)
|
||||
Reference in New Issue
Block a user