@startuml 대시보드조회 !theme mono title 대시보드조회 외부 시퀀스 actor "사용자" as User participant "Web App" as Frontend participant "API Gateway" as Gateway participant "User Service" as UserService participant "Meeting Service" as MeetingService database "Redis Cache" as Cache database "User DB" as UserDB database "Meeting DB" as MeetingDB 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 par 병렬 데이터 조회 ' Meeting Service 호출 UserService -> MeetingService: GET /api/v1/dashboard note right Meeting Service에서 조회: - 예정된 회의 목록 - 진행 중 Todo 목록 - 최근 회의록 목록 - 공유받은 회의록 - 통계 정보 end note activate MeetingService MeetingService -> Cache: GET dashboard:{userId} activate Cache Cache --> MeetingService: 캐시 조회 결과 deactivate Cache alt Meeting Service 캐시 미존재 MeetingService -> MeetingDB: 회의/Todo/회의록 데이터 조회 activate MeetingDB MeetingDB --> MeetingService: 조회 결과 deactivate MeetingDB MeetingService -> Cache: SET dashboard:{userId}\n(TTL: 5분) activate Cache Cache --> MeetingService: 캐시 저장 deactivate Cache end MeetingService --> UserService: 회의 관련 데이터 응답\n{\n "upcomingMeetings": [...],\n "activeTodos": [...],\n "recentMinutes": [...],\n "sharedMinutes": [...],\n "statistics": {...}\n} deactivate MeetingService else ' User Service 자체 데이터 조회 UserService -> UserDB: 최근 활동 내역 조회 activate UserDB UserDB --> UserService: 활동 내역 deactivate UserDB end UserService -> UserService: 데이터 통합 및 조합 note right 대시보드 데이터 구성: - Meeting Service 데이터 - User Service 활동 내역 - 통합 통계 정보 end note 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 "recentActivities": [...],\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