@startuml 대시보드조회 !theme mono title 대시보드조회 외부 시퀀스 actor "사용자" as User participant "Web App" as Frontend participant "API Gateway" as Gateway participant "User Service" as UserService database "Redis Cache" as Cache database "User DB" as UserDB note over Gateway 라우팅 규칙: /api/meetings/** → Meeting Service /api/minutes/** → Meeting Service /api/dashboard → User Service /api/notifications/** → Notification Service /api/auth/** → User Service /api/todos/** → Meeting Service end note User -> Frontend: 대시보드 접근 activate Frontend Frontend -> Gateway: GET /api/dashboard?\npage=1&size=10&sort=createdAt,desc note right 페이지네이션 파라미터: - page: 페이지 번호 (기본값: 1) - size: 페이지 크기 (기본값: 10) - sort: 정렬 기준 (기본값: createdAt,desc) end note activate Gateway Gateway -> UserService: GET /dashboard?\npage=1&size=10&sort=createdAt,desc activate UserService ' 캐시 조회 UserService -> Cache: GET dashboard:{userId} activate Cache Cache --> UserService: 캐시 조회 결과 deactivate Cache alt Cache Hit UserService -> UserService: 캐시 데이터 반환 else Cache Miss UserService -> UserDB: 대시보드 데이터 조회\n- 예정된 회의 목록\n- 진행 중 Todo 목록\n- 최근 회의록 목록\n- 공유받은 회의록 목록\n- 통계 정보 activate UserDB UserDB --> UserService: 조회 결과 deactivate UserDB UserService -> Cache: SET dashboard:{userId}\n(TTL: 5분) activate Cache Cache --> UserService: 캐시 저장 완료 deactivate Cache end UserService --> Gateway: 대시보드 데이터 응답\n{\n "upcomingMeetings": [...],\n "activeTodos": [...],\n "recentMinutes": [...],\n "sharedMinutes": [...],\n "statistics": {...},\n "pagination": {\n "page": 1,\n "size": 10,\n "totalElements": 45,\n "totalPages": 5,\n "hasNext": true\n }\n} deactivate UserService Gateway --> Frontend: 200 OK\n대시보드 데이터 + 페이지네이션 정보 deactivate Gateway Frontend -> Frontend: 대시보드 화면 렌더링\n- 예정된 회의 표시\n- Todo 목록 표시\n- 최근/공유 회의록 표시\n- 통계 차트 표시 Frontend --> User: 대시보드 화면 표시 deactivate Frontend @enduml