73 lines
2.0 KiB
Plaintext
73 lines
2.0 KiB
Plaintext
@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
|