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,136 @@
|
||||
@startuml
|
||||
!theme mono
|
||||
|
||||
title 외부 시퀀스 - 회의 종료 및 최종 확정
|
||||
|
||||
actor "사용자" as User
|
||||
participant "Web App" as WebApp
|
||||
participant "API Gateway" as Gateway
|
||||
participant "Meeting Service" as Meeting
|
||||
participant "STT Service" as STT
|
||||
participant "AI Service" as AI
|
||||
participant "Notification Service" as Notification
|
||||
participant "Azure Event Hubs" as EventHub
|
||||
|
||||
== 회의 종료 ==
|
||||
User -> WebApp: 회의 종료 버튼 클릭
|
||||
WebApp -> Gateway: POST /meetings/{meetingId}/end
|
||||
note right
|
||||
요청 헤더에 JWT 토큰 포함
|
||||
요청 바디에 사용자 정보 포함
|
||||
(userId, userName, email)
|
||||
end note
|
||||
|
||||
Gateway -> Meeting: 회의 종료 요청
|
||||
Meeting -> Meeting: 회의 종료 처리\n- 종료 시간 기록\n- 회의 통계 생성\n (총 시간, 참석자 수, 발언 횟수 등)
|
||||
Meeting -> Meeting: DB 저장
|
||||
Meeting -> Meeting: Redis 캐시 무효화\n(meeting:info:{meetingId})
|
||||
|
||||
Meeting ->> EventHub: MeetingEnded 이벤트 발행\n(meetingId, userId, endTime)
|
||||
note right
|
||||
Partition Key: {meetingId}
|
||||
Consumer Group:
|
||||
- stt-service-group
|
||||
- ai-service-group
|
||||
- notification-service-group
|
||||
end note
|
||||
|
||||
Meeting -> Gateway: 202 Accepted\n(회의 종료 완료)
|
||||
Gateway -> WebApp: 회의 종료 완료 응답
|
||||
WebApp -> User: 회의 통계 표시\n(총 시간, 참석자, 발언 횟수 등)
|
||||
|
||||
== 비동기 처리 - STT 종료 ==
|
||||
EventHub -->> STT: MeetingEnded 이벤트 수신
|
||||
STT -> STT: 음성 녹음 중지
|
||||
STT -> STT: 최종 STT 변환 완료 확인
|
||||
|
||||
== 비동기 처리 - AI Todo 추출 ==
|
||||
EventHub -->> AI: MeetingEnded 이벤트 수신
|
||||
AI -> AI: 최종 회의록 분석
|
||||
AI -> AI: Todo 자동 추출\n- 액션 아이템 식별\n- 담당자 자동 식별\n- 마감일 추출
|
||||
AI -> AI: DB 저장 (AiTaskStatus)
|
||||
|
||||
AI -> Meeting: POST /meetings/{meetingId}/todos\n(Todo 정보 전송)
|
||||
note right
|
||||
Todo 정보:
|
||||
- Todo 내용
|
||||
- 담당자 (자동 식별)
|
||||
- 마감일 (언급된 경우)
|
||||
- 우선순위
|
||||
- 관련 회의록 섹션 링크
|
||||
end note
|
||||
|
||||
Meeting -> Meeting: Todo 생성 및 할당\n(내부 처리)
|
||||
Meeting -> Meeting: 회의록 섹션 링크 연결
|
||||
Meeting -> Meeting: DB 저장 (Todo 테이블)
|
||||
Meeting -> Meeting: Redis 캐시 무효화\n(todo:user:{userId})
|
||||
|
||||
Meeting ->> EventHub: TodoCreated 이벤트 발행\n(todoId, assignee, dueDate)
|
||||
note right
|
||||
Partition Key: {userId}
|
||||
Consumer Group:
|
||||
- notification-service-group
|
||||
end note
|
||||
|
||||
Meeting -> AI: 200 OK (Todo 생성 완료)
|
||||
|
||||
== 비동기 처리 - 회의 종료 알림 ==
|
||||
EventHub -->> Notification: MeetingEnded 이벤트 수신
|
||||
Notification -> Notification: 회의 종료 알림 준비\n(참석자 전원)
|
||||
Notification -> Notification: 이메일 발송
|
||||
note right
|
||||
알림 내용:
|
||||
- 회의 제목
|
||||
- 회의 종료 시간
|
||||
- 회의 통계
|
||||
- 회의록 링크
|
||||
end note
|
||||
|
||||
== 비동기 처리 - Todo 할당 알림 ==
|
||||
EventHub -->> Notification: TodoCreated 이벤트 수신
|
||||
Notification -> Notification: Todo 할당 알림 준비
|
||||
Notification -> Notification: 담당자에게 이메일 발송
|
||||
note right
|
||||
알림 내용:
|
||||
- Todo 내용
|
||||
- 마감일
|
||||
- 우선순위
|
||||
- 회의록 링크 (해당 섹션)
|
||||
end note
|
||||
|
||||
== 최종 회의록 확정 ==
|
||||
User -> WebApp: 최종 회의록 확정 버튼 클릭
|
||||
WebApp -> Gateway: POST /meetings/{meetingId}/transcripts/finalize
|
||||
note right
|
||||
요청 헤더에 JWT 토큰 포함
|
||||
요청 바디에 사용자 정보 포함
|
||||
end note
|
||||
|
||||
Gateway -> Meeting: 회의록 확정 요청
|
||||
Meeting -> Meeting: 필수 항목 검사\n- 회의 제목\n- 참석자 목록\n- 주요 논의 내용\n- 결정 사항
|
||||
|
||||
alt 필수 항목 미작성
|
||||
Meeting -> Gateway: 400 Bad Request\n(누락된 항목 정보)
|
||||
Gateway -> WebApp: 검증 실패 응답
|
||||
WebApp -> User: 누락된 항목 안내\n(해당 섹션으로 자동 이동)
|
||||
else 필수 항목 작성 완료
|
||||
Meeting -> Meeting: 회의록 최종 확정\n- 확정 버전 생성\n- 확정 시간 기록\n- 공유 가능 상태로 전환
|
||||
Meeting -> Meeting: DB 저장 (TranscriptVersion)
|
||||
Meeting -> Meeting: Redis 캐시 무효화
|
||||
|
||||
Meeting ->> EventHub: TranscriptFinalized 이벤트 발행\n(meetingId, version, finalizedAt)
|
||||
note right
|
||||
Partition Key: {meetingId}
|
||||
Consumer Group:
|
||||
- notification-service-group
|
||||
end note
|
||||
|
||||
Meeting -> Gateway: 200 OK\n(확정 버전 정보)
|
||||
Gateway -> WebApp: 회의록 확정 완료
|
||||
WebApp -> User: 확정 완료 안내\n(버전 번호, 확정 시간)
|
||||
|
||||
EventHub -->> Notification: TranscriptFinalized 이벤트 수신
|
||||
Notification -> Notification: 회의록 확정 알림 발송\n(참석자 전원)
|
||||
end
|
||||
|
||||
@enduml
|
||||
Reference in New Issue
Block a user