# Analytics Service 패키지 구조도

```
analytics-service/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── kt/
│   │   │           └── event/
│   │   │               └── analytics/
│   │   │                   ├── AnalyticsServiceApplication.java
│   │   │                   │
│   │   │                   ├── controller/
│   │   │                   │   ├── AnalyticsDashboardController.java
│   │   │                   │   ├── ChannelAnalyticsController.java
│   │   │                   │   ├── TimelineAnalyticsController.java
│   │   │                   │   └── RoiAnalyticsController.java
│   │   │                   │
│   │   │                   ├── service/
│   │   │                   │   ├── AnalyticsService.java
│   │   │                   │   ├── ChannelAnalyticsService.java
│   │   │                   │   ├── TimelineAnalyticsService.java
│   │   │                   │   ├── RoiAnalyticsService.java
│   │   │                   │   ├── ExternalChannelService.java
│   │   │                   │   └── ROICalculator.java
│   │   │                   │
│   │   │                   ├── repository/
│   │   │                   │   ├── EventStatsRepository.java
│   │   │                   │   ├── ChannelStatsRepository.java
│   │   │                   │   └── TimelineDataRepository.java
│   │   │                   │
│   │   │                   ├── entity/
│   │   │                   │   ├── EventStats.java
│   │   │                   │   ├── ChannelStats.java
│   │   │                   │   └── TimelineData.java
│   │   │                   │
│   │   │                   ├── dto/
│   │   │                   │   ├── request/
│   │   │                   │   │   └── (쿼리 파라미터는 Controller에서 직접 처리)
│   │   │                   │   │
│   │   │                   │   └── response/
│   │   │                   │       ├── AnalyticsDashboardResponse.java
│   │   │                   │       ├── ChannelAnalyticsResponse.java
│   │   │                   │       ├── TimelineAnalyticsResponse.java
│   │   │                   │       ├── RoiAnalyticsResponse.java
│   │   │                   │       ├── ChannelSummary.java
│   │   │                   │       ├── ChannelAnalytics.java
│   │   │                   │       ├── ChannelMetrics.java
│   │   │                   │       ├── ChannelPerformance.java
│   │   │                   │       ├── ChannelCosts.java
│   │   │                   │       ├── ChannelComparison.java
│   │   │                   │       ├── TimelineDataPoint.java
│   │   │                   │       ├── TrendAnalysis.java
│   │   │                   │       ├── PeakTimeInfo.java
│   │   │                   │       ├── InvestmentDetails.java
│   │   │                   │       ├── RevenueDetails.java
│   │   │                   │       ├── RoiCalculation.java
│   │   │                   │       ├── CostEfficiency.java
│   │   │                   │       ├── RevenueProjection.java
│   │   │                   │       ├── PeriodInfo.java
│   │   │                   │       ├── AnalyticsSummary.java
│   │   │                   │       ├── SocialInteractionStats.java
│   │   │                   │       ├── VoiceCallStats.java
│   │   │                   │       └── RoiSummary.java
│   │   │                   │
│   │   │                   ├── messaging/
│   │   │                   │   ├── consumer/
│   │   │                   │   │   ├── EventCreatedConsumer.java
│   │   │                   │   │   ├── ParticipantRegisteredConsumer.java
│   │   │                   │   │   └── DistributionCompletedConsumer.java
│   │   │                   │   │
│   │   │                   │   └── event/
│   │   │                   │       ├── EventCreatedEvent.java
│   │   │                   │       ├── ParticipantRegisteredEvent.java
│   │   │                   │       └── DistributionCompletedEvent.java
│   │   │                   │
│   │   │                   ├── client/
│   │   │                   │   ├── WooriTVClient.java
│   │   │                   │   ├── GenieTVClient.java
│   │   │                   │   ├── RingoBizClient.java
│   │   │                   │   └── SNSClient.java
│   │   │                   │
│   │   │                   └── config/
│   │   │                       ├── SecurityConfig.java
│   │   │                       ├── SwaggerConfig.java
│   │   │                       ├── RedisConfig.java
│   │   │                       ├── KafkaConsumerConfig.java
│   │   │                       ├── FeignConfig.java
│   │   │                       └── Resilience4jConfig.java
│   │   │
│   │   └── resources/
│   │       ├── application.yml
│   │       └── logback-spring.xml
│   │
│   └── test/
│       └── java/
│           └── com/
│               └── kt/
│                   └── event/
│                       └── analytics/
│                           └── (테스트 코드 - 현재 단계에서는 작성하지 않음)
│
└── build.gradle
```

## 패키지 설명

### controller
- **AnalyticsDashboardController**: 통합 대시보드 조회 API
- **ChannelAnalyticsController**: 채널별 성과 분석 API
- **TimelineAnalyticsController**: 시간대별 추이 분석 API
- **RoiAnalyticsController**: ROI 상세 분석 API

### service
- **AnalyticsService**: 대시보드 데이터 통합 및 조회
- **ChannelAnalyticsService**: 채널별 분석 로직
- **TimelineAnalyticsService**: 시간대별 분석 로직
- **RoiAnalyticsService**: ROI 계산 및 분석 로직
- **ExternalChannelService**: 외부 채널 API 호출 및 Circuit Breaker 적용
- **ROICalculator**: ROI 계산 유틸리티

### repository
- **EventStatsRepository**: 이벤트 통계 데이터 저장소
- **ChannelStatsRepository**: 채널별 통계 데이터 저장소
- **TimelineDataRepository**: 시간대별 데이터 저장소

### entity
- **EventStats**: 이벤트 통계 엔티티
- **ChannelStats**: 채널 통계 엔티티
- **TimelineData**: 시간대별 데이터 엔티티

### dto/response
- API 응답 DTO 클래스들

### messaging
- **consumer**: Kafka Event Consumer 클래스
- **event**: Kafka Event DTO 클래스

### client
- **FeignClient**: 외부 API 연동 클라이언트 (우리동네TV, 지니TV, 링고비즈, SNS)

### config
- **SecurityConfig**: Spring Security 설정
- **SwaggerConfig**: Swagger/OpenAPI 설정
- **RedisConfig**: Redis 캐시 설정
- **KafkaConsumerConfig**: Kafka Consumer 설정
- **FeignConfig**: OpenFeign 설정
- **Resilience4jConfig**: Circuit Breaker 설정

## 아키텍처 패턴
- **Layered Architecture** 적용
- Service 계층에 Interface 사용
