# 실시간 회의록 작성 전체 프로세스 ## 1. 개요 ### 1.1 문서 목적 회의 진행 중 참석자의 발언을 실시간으로 텍스트로 변환하고, AI 기반으로 회의록 내용을 정리하며, 전문용어와 관련 자료를 자동으로 추출하여 모든 참석자에게 실시간으로 제공하는 전체 프로세스를 정의합니다. ### 1.2 핵심 목표 - **자동 회의록 작성**: AI 기반 내용 정리 및 구조화 - **지능형 분석**: 전문용어 자동 감지 및 맥락 기반 설명 - **관련 자료 연결**: 과거 회의록 및 사내 문서 자동 링크 - **데이터 영속성**: 모든 처리 결과를 데이터베이스에 저장 - **실시간 동기화**: 모든 참석자에게 동일한 정보 제공 --- ## 2. 전체 프로세스 개요 ### 2.1 5단계 처리 플로우 ``` Phase 1: 음성 → 텍스트 변환 ↓ Phase 2: AI 분석 (병렬 처리) - 회의록 내용 정리 - 전문용어 추출 - 관련 자료 검색 ↓ Phase 3: 데이터 저장 (영속화) ↓ Phase 4: 처리 결과 실시간 동기화 ↓ Phase 5: 통합 화면 표시 ``` --- ## 3. Phase 1: 음성 → 텍스트 변환 ### 3.1 음성 녹음 **참여자**: 참석자, 웹 애플리케이션 **처리 흐름**: 1. 참석자가 회의 중 발언 2. 웹 애플리케이션이 마이크를 통해 음성 녹음 3. 실시간 스트리밍 방식으로 STT Service에 전송 **기술 스택**: - Web Audio API - WebRTC MediaStream - 실시간 스트리밍 (WebSocket 또는 gRPC) --- ### 3.2 STT 변환 **참여자**: STT Service, Azure Speech **처리 흐름**: 1. STT Service가 음성 스트림 수신 2. Azure Speech API로 실시간 변환 요청 3. 변환된 텍스트 세그먼트 수신 (화자, 타임스탬프) 4. STT DB에 텍스트 세그먼트 저장 **데이터 구조**: ```json { "segmentId": "seg-12345", "meetingId": "meeting-123", "speaker": "홍길동", "timestamp": "2025-01-22T14:30:15.123Z", "text": "다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다", "confidence": 0.97 } ``` **성능 목표**: - 발언 → 텍스트 변환: **< 1초** - STT 변환 정확도: **> 95%** - 화자 식별 정확도: **> 90%** --- ### 3.3 이벤트 발행 **참여자**: STT Service, RabbitMQ **처리 흐름**: - 5초 간격으로 변환된 텍스트 세그먼트를 배치 처리 - RabbitMQ에 `TranscriptReady` 이벤트 발행 **이벤트 페이로드**: ```json { "eventType": "TranscriptReady", "meetingId": "meeting-123", "timestamp": "2025-01-22T14:30:20.000Z", "segments": [ { "segmentId": "seg-12345", "speaker": "홍길동", "text": "다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다", "timestamp": "2025-01-22T14:30:15.123Z" }, { "segmentId": "seg-12346", "speaker": "김철수", "text": "각 팀별 목표를 먼저 정의하고 진행하면 좋겠습니다", "timestamp": "2025-01-22T14:30:18.456Z" } ] } ``` --- ## 4. Phase 2: AI 분석 (병렬 처리) ### 4.1 회의록 내용 정리 **담당**: AI Service (LLM 기반) **처리 단계**: #### 4.1.1 발언 내용 분석 ``` 입력 텍스트: "홍길동: 다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다" "김철수: 각 팀별 목표를 먼저 정의하고 진행하면 좋겠습니다" ↓ LLM 분석 주제 파악: "다음 분기 목표 설정" 핵심 내용: "OKR 및 KPI 설정 필요성" 액션 아이템: "팀별 목표 정의" ``` #### 4.1.2 주제별 분류 ``` 주제 1: 목표 설정 - OKR 설정 필요성 - KPI 정의 주제 2: 실행 계획 - 팀별 목표 정의 우선 - 진행 방안 ``` #### 4.1.3 핵심 내용 요약 ``` 요약: 다음 분기 OKR 달성을 위해 KPI 설정이 필요하며, 각 팀별 목표를 먼저 정의한 후 진행하기로 합의함. ``` #### 4.1.4 구조화된 회의록 생성 ```json { "meetingId": "meeting-123", "summary": "다음 분기 OKR 달성을 위한 KPI 설정 논의", "topics": [ { "topicId": "topic-001", "title": "목표 설정", "content": "OKR 및 KPI 설정 필요성 논의", "participants": ["홍길동", "김철수"], "timestamp": "2025-01-22T14:30:15.123Z" } ], "actionItems": [ { "actionId": "action-001", "description": "팀별 목표 정의", "assignee": "각 팀", "dueDate": null } ] } ``` **성능 목표**: - 회의록 정리: **< 5초** (5초 배치당) --- ### 4.2 전문용어 추출 **담당**: AI Service (NLP + LLM) **처리 단계**: #### 4.2.1 전문용어 자동 감지 ``` 입력: "다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다" ↓ NLP 분석 감지된 용어: - OKR (대문자 약어) - KPI (대문자 약어) ``` **감지 알고리즘**: - 대문자 약어 패턴 (2-5자) - 용어 사전 기반 매칭 - 문맥 기반 전문용어 분류 #### 4.2.2 벡터 임베딩 생성 ``` 용어: "OKR" ↓ OpenAI Embeddings API ↓ 벡터: [0.123, -0.456, 0.789, ...] (1536차원) ``` #### 4.2.3 맥락 기반 설명 생성 ``` LLM 프롬프트: """ 다음 용어를 우리 조직의 실제 사용 맥락에서 설명해주세요: - 용어: OKR - 발언 문맥: "다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다" - 관련 문서: [OKR 운영 가이드, 2024 Q4 OKR 회의록] """ ↓ LLM 응답 설명: "OKR(Objectives and Key Results)은 우리 조직에서 분기별 목표 관리 체계로 사용됩니다. 각 팀은 분기 초에 3-5개의 핵심 목표(Objectives)와 각 목표당 3-5개의 핵심 결과(Key Results)를 설정하며, KPI와 함께 성과 측정 지표로 활용됩니다." ``` **결과 데이터 구조**: ```json { "terms": [ { "termId": "term-001", "term": "OKR", "position": [7, 10], "explanation": "OKR(Objectives and Key Results)은...", "category": "경영관리", "relatedDocs": ["doc-123", "doc-456"] }, { "termId": "term-002", "term": "KPI", "position": [18, 21], "explanation": "KPI(Key Performance Indicator)는...", "category": "경영관리", "relatedDocs": ["doc-789"] } ] } ``` **성능 목표**: - 전문용어 감지 및 설명: **< 3초** --- ### 4.3 관련 자료 검색 **담당**: AI Service (RAG - 벡터 검색) **처리 단계**: #### 4.3.1 유사도 기반 문서 검색 ``` 쿼리 벡터: [OKR 임베딩] ↓ Vector DB 검색 (Pinecone/Weaviate) ↓ 유사도 점수 계산 (Cosine Similarity) ↓ 관련도 70% 이상 문서 필터링 ↓ 상위 5개 문서 선택 결과: 1. "OKR 운영 가이드" (관련도: 95%) 2. "2024 Q4 OKR 회의록" (관련도: 88%) 3. "OKR vs KPI 비교" (관련도: 82%) 4. "목표 설정 가이드" (관련도: 78%) 5. "분기별 성과 관리" (관련도: 73%) ``` #### 4.3.2 관련 회의록 검색 ``` 현재 회의 주제: "다음 분기 목표 설정" ↓ 과거 회의록 DB 검색 ↓ 주제 유사도 기반 필터링 ↓ 최근 6개월 이내 회의록 우선 결과: 1. "2024 Q4 목표 설정 회의" (2024-10-15) 2. "팀별 OKR 리뷰 회의" (2024-12-20) 3. "성과 지표 개선 논의" (2024-11-08) ``` #### 4.3.3 참고 자료 링크 생성 ```json { "relatedDocs": [ { "docId": "doc-123", "title": "OKR 운영 가이드", "type": "document", "url": "/documents/okr-guide", "relevance": 0.95, "summary": "조직 내 OKR 설정 및 운영 방법" }, { "docId": "meeting-456", "title": "2024 Q4 목표 설정 회의", "type": "meeting", "url": "/meetings/meeting-456", "relevance": 0.88, "summary": "지난 분기 목표 설정 과정 및 결과" } ] } ``` **성능 목표**: - 관련 자료 검색: **< 2초** --- ## 5. Phase 3: 데이터 저장 ### 5.1 AI Service 저장 **데이터베이스**: AI DB (PostgreSQL) **저장 내용**: - 전문용어 사전 (TermGlossary) - 용어 설명 (TermExplanation) - 문서 임베딩 (DocumentEmbedding) - 처리 이력 (ProcessingHistory) --- ### 5.2 Meeting Service 저장 **데이터베이스**: Meeting DB (PostgreSQL) **저장 내용**: #### 5.2.1 회의록 데이터 ```sql -- Transcript 테이블 INSERT INTO transcripts ( meeting_id, summary, content, status, created_at ) VALUES ( 'meeting-123', '다음 분기 OKR 달성을 위한 KPI 설정 논의', '{구조화된 회의록 JSON}', 'in_progress', '2025-01-22T14:30:20.000Z' ); ``` #### 5.2.2 전문용어 매핑 ```sql -- TranscriptTerms 테이블 INSERT INTO transcript_terms ( transcript_id, term_id, position, context ) VALUES ( 'transcript-123', 'term-001', '[7, 10]', '다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다' ); ``` #### 5.2.3 관련 자료 링크 ```sql -- TranscriptRelatedDocs 테이블 INSERT INTO transcript_related_docs ( transcript_id, doc_id, doc_type, relevance, created_at ) VALUES ( 'transcript-123', 'doc-123', 'document', 0.95, '2025-01-22T14:30:20.000Z' ); ``` **성능 목표**: - 데이터 저장: **< 1초** --- ### 5.3 이벤트 발행 **참여자**: AI Service, RabbitMQ **이벤트**: `TranscriptSummaryCreated` **페이로드**: ```json { "eventType": "TranscriptSummaryCreated", "meetingId": "meeting-123", "transcriptId": "transcript-123", "timestamp": "2025-01-22T14:30:20.000Z", "summary": "다음 분기 OKR 달성을 위한 KPI 설정 논의", "termCount": 2, "relatedDocCount": 5 } ``` --- ## 6. Phase 4: 처리 결과 실시간 동기화 ### 6.1 Meeting Service 처리 **참여자**: Meeting Service **처리 흐름**: 1. `TranscriptSummaryCreated` 이벤트 구독 2. 회의 상태 업데이트 (DB) 3. Collaboration Service에 회의록 업데이트 요청 (REST API) **API 요청**: ```http POST /api/collaboration/meetings/{meetingId}/transcript-update Content-Type: application/json { "transcriptId": "transcript-123", "summary": "다음 분기 OKR 달성을 위한 KPI 설정 논의", "terms": [...], "relatedDocs": [...] } ``` --- ### 6.2 Collaboration Service 동기화 **참여자**: Collaboration Service, 모든 참석자 **처리 흐름**: 1. Meeting Service로부터 업데이트 요청 수신 2. WebSocket으로 모든 참석자에게 통합 결과 전송 **WebSocket 메시지**: ```json { "type": "transcript-summary-update", "meetingId": "meeting-123", "timestamp": "2025-01-22T14:30:22.000Z", "data": { "summary": "다음 분기 OKR 달성을 위한 KPI 설정 논의", "topics": [ { "title": "목표 설정", "content": "OKR 및 KPI 설정 필요성 논의", "participants": ["홍길동", "김철수"] } ], "terms": [ { "term": "OKR", "explanation": "OKR(Objectives and Key Results)은...", "relatedDocs": [...] }, { "term": "KPI", "explanation": "KPI(Key Performance Indicator)는...", "relatedDocs": [...] } ], "relatedDocs": [ { "title": "OKR 운영 가이드", "url": "/documents/okr-guide", "relevance": 0.95 } ], "actionItems": [ { "description": "팀별 목표 정의", "assignee": "각 팀" } ] } } ``` **성능 목표**: - WebSocket 전송: **< 500ms** --- ## 7. Phase 5: 통합 화면 표시 ### 7.1 UI 컴포넌트 구성 #### 7.1.1 메인 영역 **정리된 회의록**: - 주제별 탭 구성 - 핵심 내용 요약 - 액션 아이템 하이라이트 - 전문용어 하이라이트 (밑줄) #### 7.1.2 사이드바 (우측) **전문용어 패널**: - 감지된 전문용어 목록 - 클릭 시 상세 설명 표시 - 관련 문서 빠른 링크 **관련 자료 패널**: - 관련도 순으로 정렬 - 문서 유형 아이콘 표시 - 클릭 시 새 탭에서 열기 **액션 아이템 패널**: - 실시간 추출된 할 일 목록 - 담당자 할당 가능 - 진행 상황 추적 ### 7.2 인터랙션 **전문용어 호버**: ``` 사용자가 하이라이트된 용어에 마우스 오버 ↓ 툴팁 표시 (간단한 정의) ↓ 클릭 시 상세 설명 팝업 ``` **관련 자료 클릭**: ``` 사용자가 관련 문서 링크 클릭 ↓ 새 탭에서 문서 열기 ↓ 문서 내용 표시 (PDF, 회의록, Wiki 등) ``` **액션 아이템 생성**: ``` AI가 자동 추출한 할 일 표시 ↓ 사용자가 담당자 할당 ↓ Todo Service에 자동 등록 ``` --- ## 8. 전체 프로세스 성능 목표 ### 8.1 단계별 성능 | Phase | 단계 | 목표 시간 | |-------|------|----------| | 1 | 음성 → 텍스트 변환 | < 1초 | | 2-1 | 회의록 내용 정리 | < 5초 | | 2-2 | 전문용어 추출 | < 3초 | | 2-3 | 관련 자료 검색 | < 2초 | | 3 | 데이터 저장 | < 1초 | | 4 | 처리 결과 동기화 | < 1초 | | 5 | 통합 화면 표시 | < 500ms | | **전체** | **발언 → 완전 처리** | **< 13초** | ### 8.2 사용자 체감 성능 | 항목 | 목표 | |------|------| | 발언 → AI 분석 완료 | < 10초 | | 분석 결과 → 화면 표시 | < 2초 | | 용어 설명 표시 | 즉시 (클릭 시) | | 관련 자료 로딩 | < 3초 | --- ## 9. 데이터 흐름 요약 ``` 음성 (User) ↓ 텍스트 (STT Service → STT DB) ↓ 이벤트 (RabbitMQ) ↓ ┌─────────┬─────────┬─────────┐ ↓ ↓ ↓ 회의록 전문용어 관련자료 정리 추출 검색 (AI) (AI) (AI) ↓ ↓ ↓ AI DB AI DB AI DB ↓ ↓ ↓ 통합 결과 (Meeting DB) ↓ 실시간 동기화 (Collab) ↓ 통합 화면 표시 (WebApp) ``` --- ## 10. 기술 스택 ### 10.1 서비스별 기술 | 서비스 | 핵심 기술 | 용도 | |--------|----------|------| | STT Service | Azure Speech API | 음성-텍스트 변환 | | AI Service | OpenAI GPT-4 | 회의록 정리, 용어 설명 | | AI Service | OpenAI Embeddings | 벡터 임베딩 생성 | | AI Service | Pinecone/Weaviate | 벡터 검색 | | Meeting Service | PostgreSQL | 회의록 데이터 저장 | | Collaboration Service | Socket.io | 실시간 WebSocket | | 웹 애플리케이션 | React | UI 렌더링 | | 웹 애플리케이션 | Web Audio API | 음성 녹음 | ### 10.2 인프라 | 컴포넌트 | 기술 | 용도 | |----------|------|------| | 메시지 브로커 | RabbitMQ | 이벤트 기반 통신 | | 캐시 | Redis | 용어 설명 캐싱 | | 데이터베이스 | PostgreSQL | 영속성 저장소 | | 벡터 DB | Pinecone | 문서 임베딩 검색 | --- ## 11. 에러 처리 및 복구 ### 11.1 STT 변환 실패 **시나리오**: Azure Speech API 장애, 네트워크 지연 **대응**: 1. 음성 데이터 로컬 버퍼링 (최대 5분) 2. 재시도 (Exponential Backoff, 최대 3회) 3. 실패 시 사용자 알림 + 수동 입력 옵션 4. 회의 종료 후 배치 재처리 ### 11.2 AI 처리 실패 **시나리오**: LLM API 타임아웃, 용량 초과 **대응**: 1. AI 처리 백그라운드 재시도 2. 처리 완료 시 화면 업데이트 3. 최종 실패 시 회의 종료 후 재처리 4. 사용자에게 처리 상태 알림 ### 11.3 데이터 저장 실패 **시나리오**: DB 연결 끊김, 디스크 풀 **대응**: 1. Redis에 임시 저장 (백업) 2. DB 복구 후 자동 동기화 3. 관리자 알림 발송 4. 데이터 무결성 검증 ### 11.4 WebSocket 연결 끊김 **시나리오**: 네트워크 불안정, 클라이언트 재시작 **대응**: 1. 자동 재연결 (최대 5회, 10초 간격) 2. 재연결 성공 시 누락 데이터 동기화 (REST API) 3. 최종 실패 시 폴링 모드로 전환 4. 사용자에게 연결 상태 표시 --- ## 12. 보안 및 프라이버시 ### 12.1 음성 데이터 보안 - **전송 암호화**: TLS 1.3 - **저장 암호화**: AES-256 - **보관 기간**: 회의 종료 후 90일 - **자동 삭제**: 90일 경과 후 완전 삭제 ### 12.2 회의록 접근 제어 - **참석자 전용**: 회의 참석자만 조회 가능 - **권한 관리**: 작성자/참석자/뷰어 권한 분리 - **공유 설정**: 링크 기반 공유 시 비밀번호 설정 - **감사 로그**: 모든 접근 기록 저장 ### 12.3 전문용어 및 관련 자료 - **권한 기반 필터링**: 사용자 권한에 따른 자료 필터링 - **민감 정보 마스킹**: 개인정보 자동 마스킹 - **접근 로그**: 문서 조회 이력 기록 --- ## 13. 향후 개선 방향 ### 13.1 단기 (1-3개월) - [ ] 다국어 지원 (영어, 일본어) - [ ] 회의록 템플릿 자동 적용 - [ ] 감정 분석 (발언 톤 분석) - [ ] 오프라인 모드 지원 ### 13.2 중기 (3-6개월) - [ ] 실시간 번역 (동시통역) - [ ] AI 기반 회의 진행 가이드 - [ ] 회의 품질 점수 및 개선 제안 - [ ] 발언 시간 분석 및 밸런스 알림 ### 13.3 장기 (6-12개월) - [ ] 회의 효율성 예측 모델 - [ ] 자동 후속 회의 스케줄링 - [ ] 조직 지식 그래프 구축 - [ ] 회의록 기반 의사결정 추적 --- ## 14. 다이어그램 **파일**: `design/backend/logical/realtime-meeting-transcript-flow.mmd` ### 14.1 렌더링 방법 1. [Mermaid Live Editor](https://mermaid.live/) 접속 2. `realtime-meeting-transcript-flow.mmd` 파일 내용 복사 3. 붙여넣기 → Sequence Diagram 확인 --- ## 15. 참고 자료 - [논리 아키텍처 설계서](./logical-architecture.md) - [실시간 음성-용어설명 프로세스](./realtime-stt-rag-flow.md) - [Azure Speech 문서](https://learn.microsoft.com/azure/cognitive-services/speech-service/) - [OpenAI API 문서](https://platform.openai.com/docs/) - [Pinecone 벡터 DB](https://www.pinecone.io/) - [Socket.io 문서](https://socket.io/) --- ## 16. 문서 이력 | 버전 | 작성일 | 작성자 | 변경 내용 | |------|--------|--------|----------| | 1.0 | 2025-01-22 | 길동 (Architect) | 초안 작성 | | 1.1 | 2025-01-22 | 길동 (Architect) | 실시간 텍스트 표시 단계 제거, 5단계 프로세스로 단순화 |