# 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 장애 대응
