hgzero/design/backend/logical/realtime-meeting-transcript-flow.md
hiondal bb921e10eb 작업 파일 정리 및 실시간 회의록 플로우 추가
- 가파팀 프로토타입 파일 삭제
- 가파팀 유저스토리 삭제
- 실시간 회의록 작성 플로우 설계서 추가 (Mermaid, Markdown)
- 백업 및 데이터 디렉토리 추가
- AI 데이터 샘플 생성 도구 추가

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 14:16:10 +09:00

18 KiB

실시간 회의록 작성 전체 프로세스

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에 텍스트 세그먼트 저장

데이터 구조:

{
  "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 이벤트 발행

이벤트 페이로드:

{
  "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 구조화된 회의록 생성

{
  "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와 함께
성과 측정 지표로 활용됩니다."

결과 데이터 구조:

{
  "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 참고 자료 링크 생성

{
  "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 회의록 데이터

-- 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 전문용어 매핑

-- TranscriptTerms 테이블
INSERT INTO transcript_terms (
  transcript_id,
  term_id,
  position,
  context
) VALUES (
  'transcript-123',
  'term-001',
  '[7, 10]',
  '다음 분기 OKR 달성을 위한 KPI 설정이 필요합니다'
);

5.2.3 관련 자료 링크

-- 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

페이로드:

{
  "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 요청:

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 메시지:

{
  "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 접속
  2. realtime-meeting-transcript-flow.mmd 파일 내용 복사
  3. 붙여넣기 → Sequence Diagram 확인

15. 참고 자료


16. 문서 이력

버전 작성일 작성자 변경 내용
1.0 2025-01-22 길동 (Architect) 초안 작성
1.1 2025-01-22 길동 (Architect) 실시간 텍스트 표시 단계 제거, 5단계 프로세스로 단순화