kt-event-marketing/develop/dev/package-structure-ai-service.md
2025-10-27 11:09:12 +09:00

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