@startuml analytics-대시보드조회-캐시히트 !theme mono title Analytics Service - 대시보드 조회 (Cache HIT) 내부 시퀀스\n(UFR-ANAL-010: 실시간 성과분석 대시보드 조회) participant "AnalyticsController" as Controller participant "AnalyticsService" as Service participant "CacheService" as Cache participant "Redis" as Redis -> Controller: GET /api/events/{id}/analytics\n+ Authorization: Bearer {token} activate Controller Controller -> Service: getDashboardData(eventId, userId) activate Service note right of Service **입력 검증** - eventId: UUID 형식 검증 - userId: JWT에서 추출 - 권한 확인: 매장 소유자 여부 end note Service -> Cache: get("analytics:dashboard:{eventId}") activate Cache note right of Cache **Cache-Aside 패턴** - Redis GET 호출 - Cache Key 구조: analytics:dashboard:{eventId} - TTL: 300초 (5분) end note Cache -> Redis: GET analytics:dashboard:{eventId} activate Redis Redis --> Cache: **Cache HIT**\n캐시된 데이터 반환\n{\n totalParticipants: 1234,\n totalViews: 17200,\n roi: 250,\n channelStats: [...],\n lastUpdated: "2025-10-22T10:30:00Z"\n} deactivate Redis Cache --> Service: Dashboard 데이터 (JSON) deactivate Cache note right of Service **응답 데이터 구조** - 4개 요약 카드 * 총 참여자 수, 달성률 * 총 노출 수, 증감률 * 예상 ROI, 업종 평균 대비 * 매출 증가율 - 채널별 성과 - 시간대별 참여 추이 - 참여자 프로필 분석 - 비교 분석 (업종 평균, 이전 이벤트) end note Service --> Controller: DashboardResponse\n(200 OK) deactivate Service Controller --> : 200 OK\nDashboard Data (JSON) deactivate Controller note over Controller, Redis **Cache HIT 시나리오 성능** - 응답 시간: 약 0.5초 - Redis 조회 시간: 0.01초 - 직렬화/역직렬화: 0.05초 - HTTP 오버헤드: 0.44초 - 예상 히트율: 95% end note @enduml