mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-13 17:39:09 +00:00
외부 시퀀스 설계 완료
- 7개 주요 비즈니스 플로우 설계 완료 1. 회의예약및참석자초대 (2.5KB) 2. 회의시작및실시간회의록작성 (4.9KB) 3. 회의종료및최종확정 (4.6KB) 4. 회의록공유 (2.1KB) 5. Todo완료및회의록반영 (1.9KB) 6. 대시보드조회 (1.6KB) 7. 회의록상세조회및수정 (4.4KB) - 설계 특징 - 병렬 처리 전략: 서브 에이전트 활용 동시 작성 - 5개 서비스 통합 아키텍처 (User, Meeting, STT, AI, Notification) - Azure Event Hubs를 통한 Pub/Sub 이벤트 기반 통신 - Redis Cache-Aside 패턴을 통한 성능 최적화 - AI 병렬 처리 (회의록 정리 + 전문용어 설명 + 관련 자료 검색) - WebSocket 실시간 동기화 (델타 전송) - 작성원칙 준수 - 유저스토리와 1:1 매칭 - 논리 아키텍처에 정의된 참여자 표시 - UI/UX 사용자 플로우 참조 - 동기/비동기 통신 명확히 구분 (실선/점선) - 한글 설명 추가 - PlantUML 표준 (!theme mono, 올바른 화살표 문법) - PlantUML 문법 검증 완료 (수동) - @startuml, !theme mono 사용 - 금지된 ..> 화살표 미사용 - 동기 (→), 비동기 (->>), 캐시 (-.->) 구분 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
@startuml 회의록상세조회및수정
|
||||
!theme mono
|
||||
|
||||
title 회의록상세조회및수정 외부 시퀀스
|
||||
|
||||
actor "사용자" as User
|
||||
participant "Web App" as Frontend
|
||||
participant "API Gateway" as Gateway
|
||||
participant "Meeting Service" as Meeting
|
||||
participant "AI Service" as AI
|
||||
database "Redis Cache" as Cache
|
||||
database "Meeting DB" as MeetingDB
|
||||
participant "WebSocket" as WS
|
||||
|
||||
== 회의록 상세 조회 ==
|
||||
|
||||
User -> Frontend: 회의록 클릭
|
||||
activate Frontend
|
||||
|
||||
Frontend -> Gateway: GET /api/minutes/{minutesId}
|
||||
activate Gateway
|
||||
|
||||
Gateway -> Meeting: GET /minutes/{minutesId}
|
||||
activate Meeting
|
||||
|
||||
' 캐시 조회 (회의록 기본 정보)
|
||||
Meeting -.-> Cache: GET minutes:{minutesId}
|
||||
activate Cache
|
||||
Cache -.-> Meeting: 캐시 조회 결과
|
||||
deactivate Cache
|
||||
|
||||
alt Cache Hit
|
||||
Meeting -> Meeting: 캐시 데이터 사용
|
||||
else Cache Miss
|
||||
Meeting -> MeetingDB: 회의록 상세 조회\n- 회의 기본 정보\n- 섹션별 상세 내용\n- 참석자 목록\n- Todo 목록\n- 검증 상태
|
||||
activate MeetingDB
|
||||
MeetingDB --> Meeting: 회의록 데이터
|
||||
deactivate MeetingDB
|
||||
|
||||
Meeting -.-> Cache: SET minutes:{minutesId}\n(TTL: 10분)
|
||||
activate Cache
|
||||
Cache -.-> Meeting: 캐시 저장 완료
|
||||
deactivate Cache
|
||||
end
|
||||
|
||||
' 관련 회의록 검색 (비동기, 선택적)
|
||||
Meeting ->> AI: POST /ai/related-minutes\n{\n "minutesId": "{minutesId}",\n "threshold": 0.7\n}
|
||||
activate AI
|
||||
AI -> AI: 벡터 유사도 검색\n- 회의 주제 임베딩\n- 과거 회의록 비교\n- 유사도 70%+ 필터링
|
||||
|
||||
AI -->> Meeting: 관련 회의록 목록\n(최대 3개, 관련도순)
|
||||
deactivate AI
|
||||
|
||||
Meeting --> Gateway: 회의록 상세 데이터 응답\n{\n "minutesId": "...",\n "title": "...",\n "meetingInfo": {...},\n "sections": [...],\n "relatedMinutes": [...],\n "participants": [...],\n "todos": [...],\n "verificationStatus": {...}\n}
|
||||
deactivate Meeting
|
||||
|
||||
Gateway --> Frontend: 200 OK\n회의록 상세 데이터
|
||||
deactivate Gateway
|
||||
|
||||
Frontend -> Frontend: 회의록 상세 화면 렌더링\n- 회의 기본 정보 표시\n- 섹션별 내용 표시\n- 관련 회의록 표시\n- Todo 목록 표시\n- 수정 권한 확인
|
||||
|
||||
Frontend --> User: 회의록 상세 화면 표시
|
||||
deactivate Frontend
|
||||
|
||||
== 회의록 수정 ==
|
||||
|
||||
User -> Frontend: 수정 버튼 클릭
|
||||
activate Frontend
|
||||
|
||||
Frontend -> Frontend: 수정 화면으로 전환\n- 마크다운 에디터 활성화\n- WebSocket 연결 준비
|
||||
|
||||
' WebSocket 연결 (실시간 동기화)
|
||||
Frontend -> WS: WebSocket 연결\n(회의록 ID, 사용자 정보)
|
||||
activate WS
|
||||
WS --> Frontend: 연결 완료
|
||||
deactivate WS
|
||||
|
||||
Frontend --> User: 수정 가능 상태
|
||||
deactivate Frontend
|
||||
|
||||
User -> Frontend: 내용 수정 입력
|
||||
activate Frontend
|
||||
|
||||
Frontend -> Frontend: 자동 저장 타이머 시작\n(30초 간격)
|
||||
|
||||
note over Frontend
|
||||
사용자가 계속 수정 중...
|
||||
30초마다 자동 저장
|
||||
end note
|
||||
|
||||
Frontend -> Gateway: PUT /api/minutes/{minutesId}\n{\n "sections": [...],\n "modifiedBy": "userId",\n "timestamp": "...",\n "delta": {...}\n}
|
||||
activate Gateway
|
||||
|
||||
Gateway -> Meeting: PUT /minutes/{minutesId}
|
||||
activate Meeting
|
||||
|
||||
Meeting -> Meeting: 수정 권한 검증\n- 작성자 확인\n- 잠금 섹션 확인
|
||||
|
||||
alt 권한 없음
|
||||
Meeting --> Gateway: 403 Forbidden
|
||||
Gateway --> Frontend: 수정 권한 없음
|
||||
Frontend --> User: 오류 메시지 표시
|
||||
else 권한 있음
|
||||
Meeting -> MeetingDB: 회의록 수정\n- 수정 내용 저장\n- 버전 관리 (이전 버전 보관)\n- 수정 이력 기록\n- 상태 변경 (확정완료 → 작성중)
|
||||
activate MeetingDB
|
||||
MeetingDB --> Meeting: 수정 완료
|
||||
deactivate MeetingDB
|
||||
|
||||
' 캐시 무효화
|
||||
Meeting -.-> Cache: DEL minutes:{minutesId}
|
||||
activate Cache
|
||||
Cache -.-> Meeting: 캐시 삭제 완료
|
||||
deactivate Cache
|
||||
|
||||
' 실시간 동기화 (WebSocket)
|
||||
Meeting ->> WS: 수정 델타 전송\n{\n "minutesId": "...",\n "modifiedBy": "...",\n "delta": {...},\n "timestamp": "..."\n}
|
||||
activate WS
|
||||
WS ->> Frontend: 실시간 수정 반영\n(다른 참석자들에게)
|
||||
deactivate WS
|
||||
|
||||
Meeting --> Gateway: 수정 완료 응답\n{\n "version": "...",\n "modifiedAt": "...",\n "status": "작성중"\n}
|
||||
deactivate Meeting
|
||||
|
||||
Gateway --> Frontend: 200 OK\n수정 완료
|
||||
deactivate Gateway
|
||||
|
||||
Frontend -> Frontend: 수정 상태 업데이트\n- "저장됨" 표시\n- 수정 시간 갱신
|
||||
|
||||
Frontend --> User: 수정 반영 완료
|
||||
end
|
||||
|
||||
deactivate Frontend
|
||||
|
||||
@enduml
|
||||
Reference in New Issue
Block a user