# 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 사용