mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 16:46:23 +00:00
7.0 KiB
7.0 KiB
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 장애 대응