mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 18:46:23 +00:00
153 lines
7.0 KiB
Markdown
153 lines
7.0 KiB
Markdown
# AI Service 패키지 구조도
|
|
|
|
## 프로젝트 구조
|
|
```
|
|
ai-service/
|
|
├── src/
|
|
│ ├── main/
|
|
│ │ ├── java/
|
|
│ │ │ └── com/
|
|
│ │ │ └── kt/
|
|
│ │ │ └── ai/
|
|
│ │ │ ├── AiServiceApplication.java
|
|
│ │ │ │
|
|
│ │ │ ├── controller/
|
|
│ │ │ │ ├── HealthController.java
|
|
│ │ │ │ ├── InternalJobController.java
|
|
│ │ │ │ └── InternalRecommendationController.java
|
|
│ │ │ │
|
|
│ │ │ ├── service/
|
|
│ │ │ │ ├── AIRecommendationService.java
|
|
│ │ │ │ ├── TrendAnalysisService.java
|
|
│ │ │ │ ├── JobStatusService.java
|
|
│ │ │ │ └── CacheService.java
|
|
│ │ │ │
|
|
│ │ │ ├── kafka/
|
|
│ │ │ │ ├── consumer/
|
|
│ │ │ │ │ └── AIJobConsumer.java
|
|
│ │ │ │ └── message/
|
|
│ │ │ │ ├── AIJobMessage.java
|
|
│ │ │ │ └── JobStatusMessage.java
|
|
│ │ │ │
|
|
│ │ │ ├── client/
|
|
│ │ │ │ ├── ClaudeApiClient.java
|
|
│ │ │ │ ├── Gpt4ApiClient.java
|
|
│ │ │ │ ├── dto/
|
|
│ │ │ │ │ ├── ClaudeRequest.java
|
|
│ │ │ │ │ ├── ClaudeResponse.java
|
|
│ │ │ │ │ ├── Gpt4Request.java
|
|
│ │ │ │ │ └── Gpt4Response.java
|
|
│ │ │ │ └── config/
|
|
│ │ │ │ └── FeignClientConfig.java
|
|
│ │ │ │
|
|
│ │ │ ├── model/
|
|
│ │ │ │ ├── dto/
|
|
│ │ │ │ │ ├── request/
|
|
│ │ │ │ │ │ └── (No request DTOs - internal API only)
|
|
│ │ │ │ │ └── response/
|
|
│ │ │ │ │ ├── HealthCheckResponse.java
|
|
│ │ │ │ │ ├── JobStatusResponse.java
|
|
│ │ │ │ │ ├── AIRecommendationResult.java
|
|
│ │ │ │ │ ├── TrendAnalysis.java
|
|
│ │ │ │ │ ├── EventRecommendation.java
|
|
│ │ │ │ │ ├── ExpectedMetrics.java
|
|
│ │ │ │ │ └── ErrorResponse.java
|
|
│ │ │ │ └── enums/
|
|
│ │ │ │ ├── JobStatus.java
|
|
│ │ │ │ ├── AIProvider.java
|
|
│ │ │ │ ├── EventMechanicsType.java
|
|
│ │ │ │ └── ServiceStatus.java
|
|
│ │ │ │
|
|
│ │ │ ├── config/
|
|
│ │ │ │ ├── RedisConfig.java
|
|
│ │ │ │ ├── KafkaConsumerConfig.java
|
|
│ │ │ │ ├── CircuitBreakerConfig.java
|
|
│ │ │ │ ├── SecurityConfig.java
|
|
│ │ │ │ └── SwaggerConfig.java
|
|
│ │ │ │
|
|
│ │ │ ├── circuitbreaker/
|
|
│ │ │ │ ├── CircuitBreakerManager.java
|
|
│ │ │ │ └── fallback/
|
|
│ │ │ │ └── AIServiceFallback.java
|
|
│ │ │ │
|
|
│ │ │ └── exception/
|
|
│ │ │ ├── GlobalExceptionHandler.java
|
|
│ │ │ ├── JobNotFoundException.java
|
|
│ │ │ ├── RecommendationNotFoundException.java
|
|
│ │ │ ├── CircuitBreakerOpenException.java
|
|
│ │ │ └── AIServiceException.java
|
|
│ │ │
|
|
│ │ └── resources/
|
|
│ │ ├── application.yml
|
|
│ │ └── logback-spring.xml
|
|
│ │
|
|
│ └── test/
|
|
│ └── java/
|
|
│ └── com/
|
|
│ └── kt/
|
|
│ └── ai/
|
|
│ └── (테스트 코드는 작성하지 않음)
|
|
│
|
|
├── build.gradle
|
|
└── README.md
|
|
```
|
|
|
|
## 아키텍처 패턴
|
|
- **Layered Architecture** 적용
|
|
- Controller → Service → Client/Kafka 레이어 구조
|
|
- Service 레이어에 Interface 사용하지 않음 (내부 API 전용 서비스)
|
|
|
|
## 주요 컴포넌트 설명
|
|
|
|
### 1. Controller Layer
|
|
- **HealthController**: 서비스 상태 및 외부 연동 확인
|
|
- **InternalJobController**: Job 상태 조회 (Event Service에서 호출)
|
|
- **InternalRecommendationController**: AI 추천 결과 조회 (Event Service에서 호출)
|
|
|
|
### 2. Service Layer
|
|
- **AIRecommendationService**: AI 트렌드 분석 및 이벤트 추천 총괄
|
|
- **TrendAnalysisService**: 업종/지역/시즌 트렌드 분석
|
|
- **JobStatusService**: Job 상태 관리 (Redis 기반)
|
|
- **CacheService**: Redis 캐싱 처리
|
|
|
|
### 3. Kafka Layer
|
|
- **AIJobConsumer**: Kafka ai-event-generation-job Topic 구독 및 처리
|
|
- **AIJobMessage**: Kafka 메시지 DTO
|
|
- **JobStatusMessage**: Job 상태 변경 메시지
|
|
|
|
### 4. Client Layer
|
|
- **ClaudeApiClient**: Claude API 연동 (Feign Client)
|
|
- **Gpt4ApiClient**: GPT-4 API 연동 (Feign Client - 선택)
|
|
- **FeignClientConfig**: Feign Client 공통 설정
|
|
|
|
### 5. Model Layer
|
|
- **Response DTOs**: API 응답 객체
|
|
- **Enums**: 상태 및 타입 정의
|
|
|
|
### 6. Config Layer
|
|
- **RedisConfig**: Redis 연결 및 캐싱 설정
|
|
- **KafkaConsumerConfig**: Kafka Consumer 설정
|
|
- **CircuitBreakerConfig**: Resilience4j Circuit Breaker 설정
|
|
- **SecurityConfig**: Spring Security 설정
|
|
- **SwaggerConfig**: API 문서화 설정
|
|
|
|
### 7. Circuit Breaker Layer
|
|
- **CircuitBreakerManager**: Circuit Breaker 실행 및 관리
|
|
- **AIServiceFallback**: AI API 장애 시 Fallback 처리
|
|
|
|
### 8. Exception Layer
|
|
- **GlobalExceptionHandler**: 전역 예외 처리
|
|
- **Custom Exceptions**: 서비스별 예외 정의
|
|
|
|
## 외부 연동
|
|
- **Redis**: 작업 상태 및 추천 결과 캐싱 (TTL 24시간)
|
|
- **Kafka**: ai-event-generation-job Topic 구독
|
|
- **Claude API / GPT-4 API**: AI 트렌드 분석 및 추천 생성
|
|
- **PostgreSQL**: (미사용 - AI Service는 DB 불필요)
|
|
|
|
## 특이사항
|
|
- AI Service는 데이터베이스를 사용하지 않음 (Redis만 사용)
|
|
- 모든 상태와 결과는 Redis에 저장 (TTL 24시간)
|
|
- Kafka Consumer를 통한 비동기 작업 처리
|
|
- Circuit Breaker를 통한 외부 API 장애 대응
|