@startuml !theme mono title 회의록 목록 조회 내부 시퀀스 participant "API Gateway<>" as Gateway participant "MeetingController" as Controller participant "MeetingService" as Service participant "MeetingRepository" as Repository database "PostgreSQL<>" as DB database "Redis Cache<>" as Cache Gateway -> Controller: GET /api/meetings?page=0&size=20 activate Controller Controller -> Service: getMeetingList(pageRequest, filters) activate Service note right of Service 조회 조건: - 페이징 (page, size) - 필터 (날짜, 상태, 작성자) - 정렬 (최신순, 제목순) end note Service -> Cache: get(meetings:list:{hash}) activate Cache note right of Cache 목록 조회 캐싱 키: 쿼리 조건 해시 TTL: 5분 end note Cache --> Service: null (cache miss) deactivate Cache Service -> Repository: findAll(specification, pageable) activate Repository Repository -> DB: SELECT * FROM meetings WHERE ... ORDER BY ... LIMIT ? OFFSET ? activate DB DB --> Repository: meeting_rows deactivate DB Repository --> Service: Page deactivate Repository Service -> Service: toResponseList(meetings) note right of Service 응답 변환: - DTO 매핑 - 민감 정보 필터링 end note Service -> Cache: set(meetings:list:{hash}, responseData) activate Cache Cache --> Service: OK deactivate Cache Service --> Controller: Page deactivate Service Controller --> Gateway: 200 OK deactivate Controller @enduml