hgzero/design/backend/sequence/outer/회의시작및회의록작성.puml
djeon e1d411e989 외부 시퀀스 설계 가이드 및 설계서 추가
- 외부 시퀀스 설계 가이드 다운로드 (claude/sequence-outer-design.md)
- 외부 시퀀스 설계 디렉토리 생성 (design/backend/sequence/)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 13:23:50 +09:00

171 lines
4.4 KiB
Plaintext

@startuml 회의시작및회의록작성
!theme mono
title 회의 시작 및 회의록 작성 플로우 (UFR-MEET-030, UFR-STT-010/020, UFR-AI-010, UFR-RAG-010/020, UFR-COLLAB-010)
actor "참석자" as User
participant "Frontend" as FE
participant "API Gateway" as GW
participant "Meeting Service" as MS
participant "STT Service" as STT
participant "AI Service" as AI
participant "RAG Service" as RAG
participant "Collaboration Service" as CS
participant "Redis" as Cache
database "Meeting DB" as MDB
database "STT DB" as STTDB
database "AI DB" as AIDB
database "RAG DB" as RAGDB
queue "RabbitMQ" as MQ
participant "Azure Speech" as Azure
participant "LLM Server" as LLM
== 회의 시작 ==
User -> FE: 회의 시작 버튼 클릭
activate FE
FE -> GW: POST /api/meetings/{meetingId}/start
activate GW
GW -> MS: 회의 시작 요청
activate MS
MS -> MDB: UPDATE meetings\nSET start_time = NOW(), status = 'in_progress'\n세션 생성
activate MDB
MDB --> MS: 회의 시작 시간 기록 완료
deactivate MDB
MS ->> MQ: MeetingStarted 이벤트 발행\n{meetingId, sessionId, startTime}
activate MQ
note right of MQ
이벤트: MeetingStarted
Routing Key: meeting.started
end note
MQ -->> MS: ACK
deactivate MQ
MS --> GW: 200 OK\n{sessionId, status: "in_progress"}
deactivate MS
GW --> FE: 회의 세션 정보 반환
deactivate GW
FE --> User: 회의 진행 화면 표시
deactivate FE
== 음성 녹음 시작 (비동기) ==
MQ ->> STT: MeetingStarted 이벤트 전달
activate STT
note right of STT
구독: meeting.started
큐: stt.meeting.started
end note
STT -> STTDB: INSERT INTO sessions\n(세션 생성)
activate STTDB
STTDB --> STT: 세션 ID 반환
deactivate STTDB
STT -> STT: 음성 녹음 시작\n(실시간 스트림)
STT -->> MQ: ACK
deactivate STT
== 실시간 음성 인식 (5초 간격 반복) ==
loop 발언 발생 (5초마다)
User -> FE: 음성 발언
activate FE
FE -> STT: 오디오 스트림 전송
activate STT
STT -> Azure: 음성-텍스트 변환 요청\n(실시간 스트림)
activate Azure
Azure --> STT: 변환된 텍스트 반환\n{speaker, text, timestamp}
deactivate Azure
STT -> STTDB: INSERT INTO transcripts\n(발언 텍스트 저장)
activate STTDB
STTDB --> STT: OK
deactivate STTDB
STT ->> MQ: TranscriptReady 이벤트 발행\n{sessionId, speaker, text, timestamp}
activate MQ
note right of MQ
이벤트: TranscriptReady
Routing Key: transcript.ready
주기: 5초
end note
MQ -->> STT: ACK
deactivate MQ
deactivate STT
== AI 회의록 자동 작성 (비동기) ==
MQ ->> AI: TranscriptReady 이벤트 전달
activate AI
note right of AI
구독: transcript.ready
큐: ai.transcript.ready
end note
AI -> AI: 회의 맥락 이해\n주제별 분류\n문장 다듬기
AI -> LLM: 회의록 자동 작성 요청\n{context, transcript, history}
activate LLM
LLM --> AI: 회의록 초안 반환\n{summary, topics, keyPoints}
deactivate LLM
AI -> AIDB: INSERT INTO minutes_draft\n(회의록 초안 저장)
activate AIDB
AIDB --> AI: OK
deactivate AIDB
AI -> CS: 실시간 동기화 요청\n{delta, version}
activate CS
CS -> FE: WebSocket 푸시\n(회의록 델타 전송)
activate FE
FE -> User: 회의록 실시간 업데이트 표시
deactivate FE
CS --> AI: 동기화 완료
deactivate CS
AI -->> MQ: ACK
deactivate AI
== 전문용어 자동 감지 및 설명 (비동기) ==
MQ ->> RAG: TranscriptReady 이벤트 전달
activate RAG
note right of RAG
구독: transcript.ready
큐: rag.transcript.ready
end note
RAG -> RAG: 전문용어 자동 감지\n(NER, 도메인 사전)
RAG -> RAGDB: SELECT explanation\nFROM terms\nWHERE term IN (detected_terms)
activate RAGDB
RAGDB --> RAG: 용어 설명 반환
deactivate RAGDB
alt 맥락 기반 설명 필요
RAG -> LLM: 맥락 기반 설명 생성 요청\n{term, context, domain}
activate LLM
LLM --> RAG: 맥락적 설명 반환
deactivate LLM
RAG -> RAGDB: INSERT INTO explanations\n(생성된 설명 저장)
activate RAGDB
RAGDB --> RAG: OK
deactivate RAGDB
end
RAG -> FE: WebSocket 푸시\n(용어 설명 툴팁 데이터)
activate FE
FE -> User: 용어 설명 툴팁 표시
deactivate FE
RAG -->> MQ: ACK
deactivate RAG
end
@enduml