mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-13 04:49:11 +00:00
작업 파일 정리 및 실시간 회의록 플로우 추가
- 가파팀 프로토타입 파일 삭제 - 가파팀 유저스토리 삭제 - 실시간 회의록 작성 플로우 설계서 추가 (Mermaid, Markdown) - 백업 및 데이터 디렉토리 추가 - AI 데이터 샘플 생성 도구 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,753 @@
|
||||
# 실시간 회의록 작성 전체 프로세스
|
||||
|
||||
## 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단계 프로세스로 단순화 |
|
||||
@@ -0,0 +1,103 @@
|
||||
sequenceDiagram
|
||||
participant User as 참석자
|
||||
participant WebApp as 웹 애플리케이션
|
||||
participant STT as STT Service
|
||||
participant Azure as Azure Speech
|
||||
participant MQ as RabbitMQ
|
||||
participant AI as AI Service<br/>(RAG 통합)
|
||||
participant Meeting as Meeting Service
|
||||
participant Collab as Collaboration Service
|
||||
participant Others as 다른 참석자들
|
||||
|
||||
%% ========================================
|
||||
%% Phase 1: 실시간 음성 변환
|
||||
%% ========================================
|
||||
Note over User,Azure: Phase 1: 실시간 음성 → 텍스트 변환
|
||||
|
||||
User->>WebApp: 발언 (음성)
|
||||
WebApp->>STT: 음성 데이터 스트리밍
|
||||
|
||||
activate STT
|
||||
STT->>Azure: 음성-텍스트 변환 요청
|
||||
Azure-->>STT: 변환된 텍스트<br/>(화자, 타임스탬프)
|
||||
STT->>STT: 텍스트 세그먼트 저장<br/>(STT DB)
|
||||
deactivate STT
|
||||
|
||||
%% 5초마다 이벤트 발행
|
||||
STT->>MQ: TranscriptReady 이벤트<br/>(5초 간격 배치)
|
||||
|
||||
%% ========================================
|
||||
%% Phase 2: AI 처리 (병렬)
|
||||
%% ========================================
|
||||
Note over MQ,AI: Phase 2: AI 분석 (병렬 처리)
|
||||
|
||||
MQ->>AI: TranscriptReady 구독
|
||||
|
||||
activate AI
|
||||
|
||||
par 회의록 내용 정리
|
||||
AI->>AI: 1. 발언 내용 분석<br/>(LLM)
|
||||
AI->>AI: 2. 주제별 분류
|
||||
AI->>AI: 3. 핵심 내용 요약
|
||||
AI->>AI: 4. 구조화된 회의록 생성
|
||||
and 전문용어 추출
|
||||
AI->>AI: 5. 전문용어 자동 감지<br/>(NLP)
|
||||
AI->>AI: 6. 벡터 임베딩 생성
|
||||
AI->>AI: 7. 맥락 기반 설명 생성<br/>(LLM)
|
||||
and 관련 자료 검색
|
||||
AI->>AI: 8. 유사도 기반 문서 검색<br/>(관련도 70%+)
|
||||
AI->>AI: 9. 관련 회의록 검색<br/>(최대 5개)
|
||||
AI->>AI: 10. 참고 자료 링크 생성
|
||||
end
|
||||
|
||||
deactivate AI
|
||||
|
||||
%% ========================================
|
||||
%% Phase 3: 데이터 저장
|
||||
%% ========================================
|
||||
Note over AI,Meeting: Phase 3: 데이터 저장
|
||||
|
||||
AI->>AI: AI 처리 결과 저장<br/>(AI DB)
|
||||
|
||||
AI->>MQ: TranscriptSummaryCreated<br/>이벤트 발행
|
||||
|
||||
MQ->>Meeting: TranscriptSummaryCreated<br/>구독
|
||||
|
||||
activate Meeting
|
||||
Meeting->>Meeting: 회의록 데이터 저장<br/>(Meeting DB):
|
||||
Note right of Meeting: - 정리된 회의록<br/>- 전문용어 목록<br/>- 관련 자료 링크<br/>- 타임스탬프
|
||||
deactivate Meeting
|
||||
|
||||
%% ========================================
|
||||
%% Phase 4: 실시간 동기화 (결과 표시)
|
||||
%% ========================================
|
||||
Note over Meeting,Others: Phase 4: 처리 결과 실시간 동기화
|
||||
|
||||
Meeting->>Collab: 회의록 업데이트 요청<br/>(REST API)
|
||||
|
||||
activate Collab
|
||||
Collab->>WebApp: 통합 결과 Push<br/>(WebSocket):
|
||||
Note right of Collab: - 정리된 회의록<br/>- 전문용어 + 설명<br/>- 관련 자료 링크
|
||||
Collab->>Others: 통합 결과 Push<br/>(WebSocket)
|
||||
deactivate Collab
|
||||
|
||||
%% ========================================
|
||||
%% Phase 5: 화면 표시
|
||||
%% ========================================
|
||||
Note over WebApp,Others: Phase 5: 통합 화면 표시
|
||||
|
||||
activate WebApp
|
||||
WebApp->>WebApp: UI 업데이트:
|
||||
Note right of WebApp: 1. 정리된 회의록<br/>2. 전문용어 하이라이트<br/>3. 용어 설명 팝업<br/>4. 관련 자료 사이드바
|
||||
WebApp->>User: 통합 화면 표시
|
||||
deactivate WebApp
|
||||
|
||||
activate Others
|
||||
Others->>Others: 동일한 UI 업데이트
|
||||
Others->>Others: 통합 화면 표시
|
||||
deactivate Others
|
||||
|
||||
%% ========================================
|
||||
%% 성능 요약
|
||||
%% ========================================
|
||||
Note over User,Others: 전체 프로세스 성능 목표<br/>- 음성 → 텍스트: < 2초<br/>- AI 처리: < 10초<br/>- 저장 및 동기화: < 2초
|
||||
Reference in New Issue
Block a user