mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2026-06-12 23:19:10 +00:00
논리 아키텍처 Job Topic 명칭 변경
- ai-job → ai 이벤트 생성 - image-job → 이미지 생성 - logical-architecture.md 및 .mmd 파일 업데이트 - 테스트용 스크립트 및 파일 정리 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -49,7 +49,7 @@
|
||||
|
||||
#### Kafka 통합 전략
|
||||
- **Event Topics**: 도메인 이벤트 발행/구독 (EventCreated, ParticipantRegistered 등)
|
||||
- **Job Topics**: 비동기 작업 요청/처리 (ai-job, image-job)
|
||||
- **Job Topics**: 비동기 작업 요청/처리 (ai 이벤트 생성, 이미지 생성)
|
||||
- **단일 메시징 플랫폼**: 운영 복잡도 감소 및 일관된 메시지 처리
|
||||
|
||||
#### Resilience 패턴 적용
|
||||
@@ -88,12 +88,12 @@
|
||||
|
||||
#### Async Services (비동기 처리)
|
||||
1. **AI Service**: AI 기반 이벤트 추천
|
||||
- Kafka Job 구독 (ai-job)
|
||||
- Kafka Job 구독 (ai 이벤트 생성)
|
||||
- 외부 AI API 호출 (Circuit Breaker, Timeout 30초)
|
||||
- 결과 캐싱 (Redis, TTL 24시간)
|
||||
|
||||
2. **Content Service**: SNS 이미지 생성
|
||||
- Kafka Job 구독 (image-job)
|
||||
- Kafka Job 구독 (이미지 생성)
|
||||
- 외부 이미지 생성 API 호출 (Circuit Breaker, Timeout 20초)
|
||||
- CDN 업로드 및 캐싱 (Redis, TTL 7일)
|
||||
|
||||
@@ -110,8 +110,8 @@
|
||||
- **DistributionCompleted**: 배포 완료 시
|
||||
|
||||
**Job Topics** (비동기 작업):
|
||||
- **ai-job**: AI 추천 작업
|
||||
- **image-job**: 이미지 생성 작업
|
||||
- **ai 이벤트 생성**: AI 추천 작업
|
||||
- **이미지 생성**: 이미지 생성 작업
|
||||
|
||||
**특징**:
|
||||
- At-Least-Once Delivery 보장
|
||||
@@ -169,16 +169,16 @@
|
||||
- 구독자: Analytics Service
|
||||
|
||||
**Kafka Job 발행**:
|
||||
1. **ai-job**: AI 추천 요청
|
||||
2. **image-job**: 이미지 생성 요청
|
||||
1. **ai 이벤트 생성**: AI 추천 요청
|
||||
2. **이미지 생성**: 이미지 생성 요청
|
||||
|
||||
**서비스 간 호출**:
|
||||
- **Distribution Service**: 다중 채널 배포 (동기 호출, Circuit Breaker 적용)
|
||||
|
||||
**주요 플로우**:
|
||||
1. 이벤트 목적 선택 → Event DB 저장 → EventCreated 발행
|
||||
2. AI 추천 요청 → ai-job 발행
|
||||
3. 이미지 생성 요청 → image-job 발행
|
||||
2. AI 추천 요청 → ai 이벤트 생성 발행
|
||||
3. 이미지 생성 요청 → 이미지 생성 발행
|
||||
4. 배포 승인 → Distribution Service 동기 호출
|
||||
|
||||
**데이터 저장**:
|
||||
@@ -248,7 +248,7 @@
|
||||
**관련 유저스토리**: UFR-AI-010
|
||||
|
||||
**Kafka Job 구독**:
|
||||
- **ai-job**: AI 추천 작업 요청
|
||||
- **ai 이벤트 생성**: AI 추천 작업 요청
|
||||
|
||||
**Resilience 패턴**:
|
||||
- **Circuit Breaker**: AI API 호출 시 (실패율 50% 초과 시 Open)
|
||||
@@ -273,7 +273,7 @@
|
||||
**관련 유저스토리**: UFR-CONT-010, 020
|
||||
|
||||
**Kafka Job 구독**:
|
||||
- **image-job**: 이미지 생성 작업 요청
|
||||
- **이미지 생성**: 이미지 생성 작업 요청
|
||||
|
||||
**Resilience 패턴**:
|
||||
- **Circuit Breaker**: 이미지 생성 API 호출 시 (실패율 50% 초과 시 Open)
|
||||
@@ -342,8 +342,8 @@
|
||||
|
||||
| 토픽명 | 발행자 | 구독자 | Payload | 용도 |
|
||||
|---------|--------|--------|---------|------|
|
||||
| **ai-job** | Event Service | AI Service | eventId, objective, industry, region | AI 트렌드 분석 및 이벤트 추천 요청 |
|
||||
| **image-job** | Event Service | Content Service | eventId, content, style | SNS 이미지 생성 요청 (3가지 스타일) |
|
||||
| **ai 이벤트 생성** | Event Service | AI Service | eventId, objective, industry, region | AI 트렌드 분석 및 이벤트 추천 요청 |
|
||||
| **이미지 생성** | Event Service | Content Service | eventId, content, style | SNS 이미지 생성 요청 (3가지 스타일) |
|
||||
|
||||
#### 통신 패턴별 설계
|
||||
|
||||
@@ -489,13 +489,13 @@
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Client → Event Service │
|
||||
│ - POST /api/events/{id}/ai-recommendations │
|
||||
│ - Kafka ai-job 토픽 발행 (AI 작업 요청) │
|
||||
│ - Kafka ai 이벤트 생성 토픽 발행 (AI 작업 요청) │
|
||||
│ - Job ID 즉시 반환 (0.1초) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ AI Service (Background) │
|
||||
│ - Kafka ai-job 토픽 구독 │
|
||||
│ - Kafka ai 이벤트 생성 토픽 구독 │
|
||||
│ - Redis 캐시 확인 (Cache-Aside) │
|
||||
│ - 캐시 MISS: Claude API 호출 (10초) [Circuit Breaker] │
|
||||
│ - 결과 캐싱 (TTL 24시간) │
|
||||
@@ -512,13 +512,13 @@
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Client → Event Service │
|
||||
│ - POST /api/events/{id}/content-generation │
|
||||
│ - Kafka image-job 토픽 발행 (이미지 생성 요청) │
|
||||
│ - Kafka 이미지 생성 토픽 발행 (이미지 생성 요청) │
|
||||
│ - Job ID 즉시 반환 (0.1초) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Content Service (Background) │
|
||||
│ - Kafka image-job 토픽 구독 │
|
||||
│ - Kafka 이미지 생성 토픽 구독 │
|
||||
│ - Redis 캐시 확인 │
|
||||
│ - 캐시 MISS: Stable Diffusion API (5초) [Circuit Breaker] │
|
||||
│ - 이미지 CDN 업로드 │
|
||||
@@ -858,7 +858,7 @@
|
||||
1. **Kafka 통합 메시징 플랫폼 채택**: Event Bus와 Job Queue를 Kafka로 통합하여 운영 복잡도 감소
|
||||
2. **Event-Driven 아키텍처 채택**: Kafka를 통한 서비스 간 느슨한 결합 및 비동기 통신
|
||||
3. **도메인 이벤트 정의**: 4개 Event Topics (EventCreated, ParticipantRegistered, WinnerSelected, DistributionCompleted)
|
||||
4. **Job Topics 정의**: 2개 Job Topics (ai-job, image-job)로 장시간 비동기 작업 처리
|
||||
4. **Job Topics 정의**: 2개 Job Topics (ai 이벤트 생성, 이미지 생성)로 장시간 비동기 작업 처리
|
||||
5. **Resilience 패턴 전면 적용**: Circuit Breaker, Retry, Timeout, Bulkhead, Fallback
|
||||
6. **At-Least-Once Delivery**: Kafka 메시지 보장 및 멱등성 설계
|
||||
7. **Cache-Aside 패턴**: AI/이미지 생성 결과 캐싱으로 응답 시간 90% 개선
|
||||
|
||||
@@ -17,7 +17,7 @@ graph TB
|
||||
end
|
||||
|
||||
%% Kafka (Event Bus + Job Queue)
|
||||
Kafka["Kafka<br/>━━━━━━━━━━<br/><Event Topics><br/>• EventCreated<br/>• ParticipantRegistered<br/>• WinnerSelected<br/>• DistributionCompleted<br/>━━━━━━━━━━<br/><Job Topics><br/>• ai-job<br/>• image-job"]
|
||||
Kafka["Kafka<br/>━━━━━━━━━━<br/><Event Topics><br/>• EventCreated<br/>• ParticipantRegistered<br/>• WinnerSelected<br/>• DistributionCompleted<br/>━━━━━━━━━━<br/><Job Topics><br/>• ai 이벤트 생성<br/>• 이미지 생성"]
|
||||
|
||||
%% External System
|
||||
External["외부시스템<br/>[Circuit Breaker]<br/>━━━━━━━━━━<br/>• 국세청 API<br/>• AI API<br/>• 이미지 생성 API<br/>• 배포 채널 APIs<br/>(비동기)"]
|
||||
@@ -29,8 +29,8 @@ graph TB
|
||||
DistSvc ==>|"DistributionCompleted<br/>발행"| Kafka
|
||||
|
||||
%% Job Publishing (비동기 작업 요청)
|
||||
EventSvc -->|"ai-job 발행"| Kafka
|
||||
EventSvc -->|"image-job 발행"| Kafka
|
||||
EventSvc -->|"ai 이벤트 생성 발행"| Kafka
|
||||
EventSvc -->|"이미지 생성 발행"| Kafka
|
||||
|
||||
%% Event Subscription
|
||||
Kafka -.->|"EventCreated<br/>구독"| AnalSvc
|
||||
@@ -38,8 +38,8 @@ graph TB
|
||||
Kafka -.->|"DistributionCompleted<br/>구독"| AnalSvc
|
||||
|
||||
%% Job Subscription
|
||||
Kafka -.->|"ai-job 구독"| AISvc
|
||||
Kafka -.->|"image-job 구독"| ContentSvc
|
||||
Kafka -.->|"ai 이벤트 생성 구독"| AISvc
|
||||
Kafka -.->|"이미지 생성 구독"| ContentSvc
|
||||
|
||||
%% Service to Service (동기 호출)
|
||||
EventSvc -->|"다중 채널 배포<br/>[Circuit Breaker]"| DistSvc
|
||||
|
||||
Reference in New Issue
Block a user