mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 21:56:24 +00:00
147 lines
7.3 KiB
Markdown
147 lines
7.3 KiB
Markdown
# Notification Service - 패키지 구조도
|
|
|
|
## 아키텍처 패턴
|
|
- **Layered Architecture**: 단순하고 명확한 계층 구조
|
|
|
|
## 패키지 구조
|
|
|
|
```
|
|
notification/
|
|
└── src/
|
|
└── main/
|
|
├── java/
|
|
│ └── com/
|
|
│ └── unicorn/
|
|
│ └── hgzero/
|
|
│ └── notification/
|
|
│ ├── NotificationApplication.java
|
|
│ │
|
|
│ ├── domain/ # Domain Layer
|
|
│ │ ├── Notification.java # 알림 Entity
|
|
│ │ ├── NotificationRecipient.java # 수신자 Entity
|
|
│ │ └── NotificationSetting.java # 알림 설정 Entity
|
|
│ │
|
|
│ ├── repository/ # Data Access Layer
|
|
│ │ ├── NotificationRepository.java
|
|
│ │ ├── NotificationRecipientRepository.java
|
|
│ │ └── NotificationSettingRepository.java
|
|
│ │
|
|
│ ├── service/ # Business Logic Layer
|
|
│ │ ├── NotificationService.java # 알림 비즈니스 로직
|
|
│ │ ├── EmailTemplateService.java # 이메일 템플릿 렌더링
|
|
│ │ └── EmailClient.java # 이메일 발송 클라이언트
|
|
│ │
|
|
│ ├── controller/ # Presentation Layer
|
|
│ │ ├── NotificationController.java # Public API
|
|
│ │ └── NotificationSettingsController.java # 설정 API
|
|
│ │
|
|
│ ├── event/ # Event Handler Layer
|
|
│ │ ├── EventHandler.java # Event Hub 이벤트 핸들러
|
|
│ │ ├── event/
|
|
│ │ │ ├── MeetingCreatedEvent.java # 회의 생성 이벤트
|
|
│ │ │ └── TodoAssignedEvent.java # Todo 할당 이벤트
|
|
│ │ └── processor/
|
|
│ │ └── EventProcessorService.java # Processor 라이프사이클
|
|
│ │
|
|
│ ├── dto/ # Data Transfer Objects
|
|
│ │ ├── request/
|
|
│ │ │ ├── SendNotificationRequest.java
|
|
│ │ │ └── UpdateSettingsRequest.java
|
|
│ │ └── response/
|
|
│ │ ├── NotificationResponse.java
|
|
│ │ ├── NotificationListResponse.java
|
|
│ │ └── SettingsResponse.java
|
|
│ │
|
|
│ ├── config/ # Configuration Layer
|
|
│ │ ├── EventHubConfig.java # Event Hub 설정
|
|
│ │ ├── BlobStorageConfig.java # Blob Storage 설정
|
|
│ │ ├── RetryConfig.java # 재시도 정책 설정
|
|
│ │ ├── SecurityConfig.java # Spring Security 설정
|
|
│ │ ├── SwaggerConfig.java # Swagger 설정
|
|
│ │ └── EmailConfig.java # Email 설정
|
|
│ │
|
|
│ └── exception/ # Exception Handling
|
|
│ ├── GlobalExceptionHandler.java
|
|
│ ├── NotificationException.java
|
|
│ └── EventProcessingException.java
|
|
│
|
|
└── resources/
|
|
├── application.yml # 메인 설정 파일
|
|
├── application-dev.yml # 개발 환경 설정
|
|
├── application-prod.yml # 운영 환경 설정
|
|
└── templates/ # Email Templates
|
|
├── meeting-invitation.html # 회의 초대 템플릿
|
|
├── todo-assigned.html # Todo 할당 템플릿
|
|
└── reminder.html # 리마인더 템플릿
|
|
```
|
|
|
|
## 주요 클래스 역할
|
|
|
|
### Domain Layer
|
|
- **Notification**: 알림 정보 엔티티 (알림ID, 유형, 상태, 발송일시)
|
|
- **NotificationRecipient**: 수신자별 알림 상태 (발송완료, 실패, 재시도)
|
|
- **NotificationSetting**: 사용자별 알림 설정 (채널, 유형, 방해금지 시간대)
|
|
|
|
### Repository Layer
|
|
- **NotificationRepository**: 알림 이력 조회/저장
|
|
- **NotificationRecipientRepository**: 수신자별 상태 관리
|
|
- **NotificationSettingRepository**: 알림 설정 관리
|
|
|
|
### Service Layer
|
|
- **NotificationService**: 알림 발송 비즈니스 로직, 중복 방지, 재시도 관리
|
|
- **EmailTemplateService**: Thymeleaf 템플릿 렌더링
|
|
- **EmailClient**: SMTP 이메일 발송, 에러 처리
|
|
|
|
### Controller Layer
|
|
- **NotificationController**: 알림 발송 API, 알림 이력 조회 API
|
|
- **NotificationSettingsController**: 알림 설정 조회/업데이트 API
|
|
|
|
### Event Handler Layer
|
|
- **EventHandler**: Event Hub 이벤트 수신 및 처리 (Consumer<EventContext> 구현)
|
|
- **EventProcessorService**: EventProcessorClient 라이프사이클 관리
|
|
- **MeetingCreatedEvent**: 회의 생성 이벤트 DTO
|
|
- **TodoAssignedEvent**: Todo 할당 이벤트 DTO
|
|
|
|
### Config Layer
|
|
- **EventHubConfig**: EventProcessorClient Bean 생성, CheckpointStore 설정
|
|
- **BlobStorageConfig**: Azure Blob Storage 연결 설정
|
|
- **RetryConfig**: @EnableRetry, ExponentialBackOffPolicy 설정
|
|
- **SecurityConfig**: JWT 인증, CORS 설정
|
|
- **SwaggerConfig**: OpenAPI 문서화 설정
|
|
- **EmailConfig**: JavaMailSender 설정
|
|
|
|
## 의존성 흐름
|
|
```
|
|
Controller → Service → Repository → Entity
|
|
↓
|
|
EmailClient
|
|
↓
|
|
EmailTemplateService
|
|
|
|
EventHandler → Service → Repository
|
|
```
|
|
|
|
## 기술 스택
|
|
- **Framework**: Spring Boot 3.3.0, Java 21
|
|
- **Database**: PostgreSQL (JPA/Hibernate)
|
|
- **Messaging**: Azure Event Hubs
|
|
- **Storage**: Azure Blob Storage (Checkpoint)
|
|
- **Email**: Spring Mail (SMTP)
|
|
- **Template**: Thymeleaf
|
|
- **Retry**: Spring Retry
|
|
- **Security**: Spring Security + JWT
|
|
- **Documentation**: SpringDoc OpenAPI
|
|
|
|
## 특징
|
|
1. **Layered Architecture**: 계층 분리로 명확한 역할과 책임
|
|
2. **Event-Driven**: Azure Event Hubs 기반 비동기 처리
|
|
3. **Retry Mechanism**: Exponential Backoff 기반 재시도
|
|
4. **Template Engine**: Thymeleaf로 동적 이메일 생성
|
|
5. **Idempotency**: 이벤트 ID 기반 중복 발송 방지
|
|
6. **Monitoring**: Actuator Health Check, Metrics
|
|
|
|
---
|
|
|
|
**작성일**: 2025-10-23
|
|
**작성자**: 준호 (Backend Developer)
|