# AI기반 회의록 작성 및 이력 관리 개선 서비스 - 유저스토리 (v2.5.1)
## 목차
- [1. 프로젝트 개요](#1-프로젝트-개요)
- [1.1 차별화 전략](#11-차별화-전략)
- [1.2 마이크로서비스 구성](#12-마이크로서비스-구성)
- [2. MVP 기능](#2-mvp-기능)
- [2.1 User 서비스](#21-user-서비스)
- [2.2 Meeting 서비스](#22-meeting-서비스)
- [2.3 AI 서비스](#23-ai-서비스)
- [2.4 STT 서비스](#24-stt-서비스)
- [2.5 RAG 서비스](#25-rag-서비스)
- [2.6 Notification 서비스](#26-notification-서비스)
- [3. 향후 과제](#3-향후-과제)
- [문서 이력](#문서-이력)
---
## 1. 프로젝트 개요
### 1.1 차별화 전략
본 서비스는 다음과 같은 차별화 포인트를 통해 경쟁 우위를 확보합니다:
#### 1. 기본 기능 (Hygiene Factors)
- **STT(Speech To Text)**: 음성을 텍스트로 변환하는 기본 기능
#### 2. 핵심 차별화 포인트 (Differentiators)
- **맥락 기반 용어 설명**: 관련 회의록과 업무이력 기반 실용 정보 제공
- **섹션 AI 요약 재생성**: 버튼 클릭으로 2-3문장 요약 (2-5초 처리)
- **지능형 회의 진행 지원**: 회의 패턴 분석, 안건 추천, 효율성 분석
---
### 1.2 마이크로서비스 구성
1. **User** - 사용자 인증 (LDAP, JWT)
2. **Meeting** - 회의, 회의록, Todo 통합 관리, 안건별 검증완료 및 잠금 (Last Write Wins)
3. **STT** - 음성 스트리밍, 실시간 음성-텍스트 변환
4. **AI** - 회의록 자동화, Todo 추출, 안건별 AI 요약, RAG 서비스 연동
5. **RAG** - 용어집 검색 (PostgreSQL+pgvector), 관련자료 검색 (Azure AI Search), 회의록 유사도 검색 (Vector DB) (Python/FastAPI 독립 서비스)
6. **Notification** - 이메일 알림 (회의 시작, 회의록 확정, 참여자 초대)
---
## 2. MVP 기능
### 2.1 User 서비스
#### UFR-USER-010: 🔴 [로그인] 사용자로서 | 나는, 시스템에 접근하기 위해 | 사번과 비밀번호로 로그인하고 싶다.
**수행절차:**
1. 로그인 화면 접속 → 사번/비밀번호 입력 → (선택) 로그인 상태 유지 → 로그인 버튼 클릭 → 인증 성공 시 대시보드 이동
**입력:** 사번(필수), 비밀번호(필수, 최소 8자), 로그인 상태 유지(선택)
**출력:** 성공 시 JWT 토큰 발급 및 대시보드 이동, 실패 시 에러 메시지 5초 표시
**예외:** 미입력 시 필드별 포커스 및 에러 메시지, 인증 실패 시 재활성화, 이미 로그인된 경우 리다이렉트
**관련:** UFR-USER-020
---
#### UFR-USER-020: 🟡 [대시보드] 사용자로서 | 나는, 나의 회의 현황을 파악하기 위해 | 대시보드를 조회하고 싶다.
**수행절차:**
1. 로그인 후 자동 표시 또는 홈 아이콘 클릭
2. 통계 블록(예정된 회의, 작성중 회의록) 확인
3. 최근 회의 목록(최대 3개), 나의 회의록(최대 4개) 확인
4. FAB 버튼으로 회의 예약 또는 바로 시작
**입력:**
- 없음 (자동 렌더링)
**출력:**
- 헤더: 사용자 이름, 오늘 예정 회의 개수
- 통계 블록: 예정된 회의, 작성중 회의록
- 최근 회의: 회의록 미생성 우선, 빠른 일시 순 (상태별 버튼: 진행중-참여하기, 예정-없음, 완료-보기)
- 나의 회의록: 최신순 2x2 그리드, 상태 배지, 생성자 표시(👑), 검증완료율(작성중)
- FAB: 회의예약/바로시작
**예외:** 로그인 안 된 경우 리다이렉트, 회의/회의록 없음 시 빈 상태, 참여자가 예정 회의 클릭 시 알럿
**관련:** UFR-USER-010, UFR-MEET-010/011/020/046/047
---
### 2.2 Meeting 서비스
#### UFR-MEET-010: 🔴 [회의예약] 회의 생성자로서 | 나는, 회의를 효율적으로 준비하기 위해 | 회의를 예약하고 참여자를 초대하고 싶다.
**수행절차:**
1. "회의예약" FAB 클릭 → 제목/날짜/시간(15분 단위) 입력
2. 온라인/오프라인 선택, 장소/회의 링크 입력
3. 참여자 추가(현재 사용자 기본 포함, 검색 모달), (선택) 안건 입력 → "예약 완료"
**입력:** 제목(최대 100자), 날짜(오늘 이후), 시작/종료 시간(15분 단위), 온라인 토글, 장소(최대 200자), 회의 링크(선택), 참여자(최소 1명), 안건(선택)
**출력:** 예약 완료 토스트 및 대시보드 이동
**예외:** 필수 항목 미입력 시 토스트 및 포커스, 과거 날짜 선택 시 에러, 뒤로가기/취소 시 확인 모달
**관련:** UFR-USER-020, UFR-MEET-011/020
---
#### UFR-MEET-011: 🟡 [회의정보수정] 회의 생성자로서 | 나는, 예정된 회의 정보를 변경하기 위해 | 회의 정보를 수정하고 싶다
**수행절차:**
1. 대시보드에서 예정 회의 클릭(생성자만) → 수정 → "수정 완료"
**입력:** 기존 회의 정보 자동 로드, UFR-MEET-010과 동일 필드
**출력:** 수정 완료 토스트, 참여자 변경 시 알림 발송
**예외:** scheduled 아닌 경우 에러, 직접 URL 접근 시 리다이렉트
**관련:** UFR-USER-020, UFR-MEET-010, UFR-NOTI-010
---
#### UFR-MEET-015: 🟢 [회의진행 중 참여자 초대] 회의 참여자로서 | 나는, 회의 중 추가 참여자가 필요할 때 | 실시간으로 참여자를 초대하고 싶다.
**수행절차:**
1. "참여자" 탭 → "초대" → 검색 → 선택 → 실시간 표시 및 알림 전송
**출력:** 참여자 목록 실시간 추가, 토스트 메시지, 알림 대상 생성(Notification 폴링), WebSocket 동기화
**예외:** 검색 결과 없음, 이미 참여 중, 네트워크 오류
**관련:** UFR-MEET-030
---
#### UFR-MEET-020: 🟡 [템플릿선택] 회의 생성자로서 | 나는, 회의록을 효율적으로 작성하기 위해 | 회의 유형에 맞는 템플릿을 선택하고 싶다.
**진입 경로:** 대시보드 → "바로시작" 또는 회의예약 → 템플릿 선택
**수행절차:**
1. 4가지 템플릿(일반, 스크럼, 킥오프, 주간) 중 선택 또는 건너뛰기 → 회의 시작
**출력:** 선택 템플릿으로 회의 시작, 건너뛰기 시 기본 템플릿
**예외:** 없음
**관련:** UFR-USER-020, UFR-MEET-010/030
---
#### UFR-MEET-030: 🔴 [회의시작] 회의 생성자로서 | 나는, 회의를 시작하고 회의록을 작성하기 위해 | 회의를 시작하고 음성 녹음을 준비하고 싶다.
**진입 경로:**
- **경로 1**: 대시보드(02-대시보드.html) → "바로시작" FAB 버튼 → 템플릿 선택(04-템플릿선택.html) → 회의 진행(05-회의진행.html)
- **경로 2**: 대시보드 → 진행 중 회의 "참여하기" 버튼 → 회의 진행(05-회의진행.html)
**수행절차:**
1. 회의 진행 화면 진입 → 녹음 시작 → 타이머/웨이브폼 표시
2. 탭 전환: 참여자, AI 제안(주요 내용+메모), 용어사전, 관련회의록
3. 하단 버튼: 생성자[일시정지/재개+종료], 참여자[나가기]
**출력:** 헤더(제목, 녹음 상태, 경과 시간), 웨이브폼, 탭별 콘텐츠, 역할별 버튼
**예외:** 마이크 권한 없음, 네트워크 오류, 일시정지/종료/나가기 확인 모달
**관련:** UFR-MEET-020/040, UFR-STT-010, UFR-AI-030, UFR-RAG-010, UFR-AI-040, UFR-PART-010/020/030, UFR-HOST-010/020
---
#### UFR-MEET-040: 🔴 [회의종료] 회의 생성자로서 | 나는, 회의를 종료하고 회의록을 정리하기 위해 | 회의를 종료하고 요약 내용을 확인한 후 다음 단계를 선택하고 싶다.
**권한:**
- 회의 생성자만 회의를 종료할 수 있음
- 일반 참여자는 "회의 종료" 버튼이 표시되지 않음
**수행절차:**
1. "회의 종료" → 확인 모달 → 회의 종료 화면(읽기 전용)
2. 통계(참여자/시간/안건/Todo), 주요 키워드, 안건별 AI 요약(한줄+상세+Todo) 확인
3. 하단 액션: "회의록 수정", "바로 최종 확정", "대시보드"
**출력:** 통계 카드, 키워드 태그, 안건 아코디언(AI 한줄+상세 요약, Todo), 회의록 상태 "작성중"
**예외:** AI 요약 생성 실패 시 기본 템플릿, Todo 추출 실패 시 빈 목록, 바로 확정 실패 시 에러
**관련:** UFR-MEET-030/050/055, UFR-AI-010/020/036
---
#### UFR-MEET-050: 🟡 [최종확정] 회의 생성자로서 | 나는, 회의록을 완성하기 위해 | 모든 안건을 검증하고 최종 회의록을 확정하고 싶다.
**시나리오 1: 회의록 수정 후 자동 확정**
1. 모든 안건 검증 완료 → "저장" → 시스템 확인 → 자동 "확정완료" 변경 → 토스트
**시나리오 2: 회의 종료 화면에서 바로 확정**
1. "바로 최종 확정" → 확인 모달 → 모든 안건 자동 검증 → "확정완료" → 상세 조회 화면
**출력:** 확정 토스트, 회의록 상태 "확정완료", 모든 안건 검증완료
**예외:** 자동 확정 조건 충족 시 자동 처리, 바로 확정 실패 시 에러
**관련:** UFR-MEET-040/055, UFR-COLLAB-030
---
#### UFR-MEET-046: 🟡 [회의록목록조회] 회의 참여자로서 | 나는, 참여한 회의록들을 효율적으로 관리하기 위해 | 회의록 목록을 조회하고 필터링하고 싶다.
**수행절차:**
1. "회의록" 메뉴 → 정렬(최근수정순/최근회의순/제목순) → (선택) 필터(참여 유형, 상태), 검색어 → 카드 클릭
**입력:** 정렬, 필터(다중 체크박스), 검색어(제목/참여자)
**출력:** 헤더(총 개수), 필터/정렬 버튼, 카드(상태 배지, 생성자 표시, 검증완료율)
**예외:** 회의록/검색 결과 없음 시 빈 상태, 네트워크 오류
**관련:** UFR-USER-020, UFR-MEET-047
---
#### UFR-MEET-047: 🟡 [회의록상세조회] 회의 참여자로서 | 나는, 지난 회의록의 상세 정보와 전체 내용을 | 한눈에 확인하고 싶다.
**수행절차:**
1. 카드 클릭 → 헤더 정보 확인
2. 탭 전환: 대시보드(통계, 키워드, 한줄 요약), 회의록(안건별 상세), Todo, 용어, 관련회의록
3. (선택) "회의록 수정"(작성중), Todo 추가(모든 참여자)/편집(생성자)
**출력:**
- 헤더: 제목, 날짜/시간, 참여자 칩, 생성자(👑), 상태 배지
- 대시보드: 통계(4열), 키워드 태그, 한줄 요약 아코디언
- 회의록: 안건별 한줄+상세 요약, Todo
- Todo: 카드(제목, 담당자, 마감일, 상태), 추가(모든 참여자)/편집(생성자) 버튼
- 용어/관련회의록 탭
- 하단: "회의록 수정" 버튼(작성중만)
**예외:** 권한 없음 시 리다이렉트, 회의록 없음, 네트워크 오류
**관련:** UFR-MEET-046/055, UFR-AI-036
---
#### UFR-MEET-055: 🟡 [회의록수정] 회의 참여자로서 | 나는, 검증이 완료되지 않은 안건을 | 수정하고 검증완료 체크를 통해 보호하고 싶다.
**수행절차:**
1. "회의록 수정" → 안건별 수정(한줄 요약 재생성, 상세 요약 편집)
2. 검증완료: 참여자(체크박스), 생성자(잠금해제 버튼) → "저장"
**입력:** 재생성 버튼, 텍스트 편집 영역, 검증완료 체크, 잠금해제(생성자)
**출력:** 헤더(제목, 저장), 안건 아코디언(한줄 요약+재생성, 편집 영역, 관련회의록, 검증완료 UI), 저장 토스트, 모든 안건 검증 시 자동 확정 토스트
**예외:** 검증완료 안건 수정 시도 시 안내(참여자), 잠금해제 가능(생성자), AI 재생성 실패, 네트워크 오류
**Last Write Wins:** 동시 수정 시 마지막 저장 유지, 검증완료로 보호, 생성자는 잠금해제 후 재수정
**관련:** UFR-MEET-047/050, UFR-AI-036, UFR-COLLAB-030
---
#### UFR-PART-010: 🟡 [회의입장] 회의 참여자로서 | 나는, 예정된 회의에 참여하기 위해 | 대시보드에서 "참여하기" 버튼으로 회의에 입장하고 싶다.
**수행절차:**
1. 대시보드 진행 중/예정 회의 → "참여하기" → 회의진행 화면
**출력:** 회의진행 화면, 참여자 목록 추가
**예외:** 회의 종료/권한 없음 시 안내
**관련:** UFR-MEET-030
---
#### UFR-PART-020: 🟢 [AI기반메모작성] 회의 참여자로서 | 나는, 중요한 내용을 메모로 기록하기 위해 | AI가 추천한 주요 내용을 메모 입력창에 추가하고 편집하고 싶다.
**수행절차:**
1. 회의 중 AI 실시간 주요 내용 감지 → "AI 제안" 탭에 "[시간] 내용" 리스트 표시
2. 항목 선택 시 메모 입력창에 자동 입력(시간 포함) → 수정 가능 → "저장"(참여자별 개별)
3. 회의 종료 시 AI가 모든 참여자 메모 참조하여 회의록 생성
**출력:** 메모 입력창(시간 포함), AI 추천 리스트(실시간), 저장된 개인 메모(참여자별), AI 회의록(메모 참조)
**예외:** AI 감지 실패 시 빈 리스트(수동 가능), 저장 실패 시 로컬 임시 저장, 회의 종료 후 조회/편집 불가
**관련:** UFR-AI-030, UFR-AI-010, UFR-MEET-040
---
#### UFR-PART-030: 🟡 [회의중도퇴장] 회의 참여자로서 | 나는, 회의를 중간에 나가야 할 때 | "나가기" 버튼으로 회의에서 퇴장하고 싶다.
**수행절차:**
1. "나가기" → 확인 모달("회의는 계속 진행됩니다") → 퇴장 이벤트 전송 → 대시보드
**출력:** 대시보드 복귀, 회의록은 종료 시 공유
**예외:** 네트워크 오류 시 로컬 처리 후 재시도
**관련:** UFR-MEET-030
---
#### UFR-HOST-010: 🔴 [회의종료권한] 회의 생성자로서 | 나는, 회의를 마무리하기 위해 | "회의 종료" 버튼으로만 회의를 종료하고 싶다.
**수행절차:**
1. "회의 종료" 버튼은 생성자에게만 표시, 일반 참여자는 숨김
**출력:** 생성자-버튼 표시, 참여자-버튼 숨김
**예외:** 권한 없음 시 미표시
**관련:** UFR-MEET-040
---
#### UFR-HOST-020: 🔴 [녹음제어권한] 회의 생성자로서 | 나는, 녹음을 관리하기 위해 | 녹음 일시정지/재개/종료 권한을 가지고 싶다.
**수행절차:**
1. 녹음 제어 버튼(일시정지/재개/종료)은 생성자에게만 표시
**출력:** 생성자-버튼 표시, 참여자-버튼 숨김
**예외:** 권한 없음 시 미표시
**관련:** UFR-STT-010
---
### 2.3 AI 서비스
#### UFR-AI-010: 🔴 [회의록자동작성] 회의 참여자로서 | 나는, 회의록 작성 부담을 줄이기 위해 | AI가 발언 내용을 실시간으로 정리하고 회의 종료 시 전체 안건을 요약하기를 원한다.
**수행절차:**
1. 회의 중: STT 텍스트 → AI 분석(키워드 추출, 발언자 식별, 안건 분류)
2. 회의 종료: 모든 참여자 메모 수집 → 전체 발언+메모 종합 → 안건별 AI 한줄+상세 요약 생성 → 회의록 저장(작성중)
**입력:** 회의 ID, STT 텍스트, 참여자별 메모
**출력:** 실시간(키워드, 발언자, 안건), 종료 시(한줄+상세 요약, Todo, 작성중 상태)
**예외:** STT 없음 시 기본 템플릿, AI 요약 실패 시 에러 및 수동 작성 유도, 메모 없음 시 발언만 요약
**관련:** UFR-STT-020, UFR-MEET-040, UFR-AI-020/036, UFR-PART-020
---
#### UFR-AI-020: 🟡 [Todo자동추출] 회의 참여자로서 | 나는, 회의 후 실행 사항을 명확히 하기 위해 | AI가 안건별 내용에서 Todo 항목을 자동으로 추출하고 기본값을 설정하기를 원한다.
**수행절차:**
1. 회의 종료 시 안건별 내용 분석 → Todo 추출(액션 동사, 담당자 추론, 마감일 추론) → 회의록 추가
**입력:** 회의 ID, 안건별 AI 요약, 발언 내용
**출력:** Todo 목록(제목, 담당자, 마감일, 상태-기본 "미완료"), Todo 개수 통계
**예외:** 추출 실패 시 빈 목록(수동 추가 가능), 담당자/마감일 추론 실패 시 "미정"
**관련:** UFR-AI-010, UFR-MEET-040/047
---
#### UFR-AI-030: 🟢 [실시간AI제안] 회의 참여자로서 | 나는, 회의 중 놓치는 내용을 최소화하기 위해 | AI가 실시간으로 주요 내용을 분석하여 제안하고 싶다.
**수행절차:**
1. 회의 중 STT 텍스트 → AI 주요 내용 감지(중요 결정, 액션 아이템, 키워드, 합의) → "AI 제안" 탭에 "[시간] 내용" 실시간 업데이트 → 항목 선택 시 메모 자동 입력
**입력:** 회의 ID, STT 텍스트(실시간)
**출력:** "AI 제안" 탭(주요 내용 리스트, 시간 포함, 실시간), 메모 입력창(선택 항목 자동 입력)
**예외:** AI 감지 실패 시 빈 리스트, 네트워크 오류
**관련:** UFR-STT-020, UFR-MEET-030, UFR-PART-020
---
#### UFR-AI-036: 🟡 [AI한줄요약] 회의 참여자로서 | 나는, 각 안건의 핵심을 빠르게 파악하기 위해 | AI가 생성한 한줄 요약을 확인하고 필요 시 재생성하고 싶다.
**회의 종료 시(자동):** AI가 안건별 상세 요약 기반 한줄 요약(30자 이내) 생성 → 회의 종료 화면 읽기 전용 확인
**회의록 수정 시(재생성):** 안건별 "재생성" 클릭 → AI가 현재 텍스트 편집 영역 기반 한줄 요약 재생성 → 자동 업데이트
**회의록 상세조회:** 대시보드/회의록 탭에 한줄 요약 표시(읽기 전용)
**입력:** 안건별 상세 요약, 재생성 버튼
**출력:** 한줄 요약(30자 이내), 위치별 표시(종료-읽기, 수정-재생성 가능, 상세조회-읽기)
**예외:** 생성/재생성 실패 시 에러, 기존 요약 유지
**관련:** UFR-AI-010, UFR-MEET-040/047/055
---
#### UFR-AI-040: 🟢 [관련회의록연결] 회의 참여자로서 | 나는, 이전 회의 내용을 쉽게 참조하기 위해 | AI가 관련 있는 과거 회의록을 자동으로 찾아 연결하고 유사 내용을 요약해주기를 원한다.
**수행절차:**
1. AI 서비스에서 회의 내용 분석 후 RAG 서비스 연동하여 관련 회의록 검색 (UFR-RAG-030)
2. 결과를 "관련회의록" 탭에 표시
**입력:** 현재 회의 ID, 회의 내용(STT)
**출력:** "관련회의록" 탭(카드-제목, 날짜, 관련도, 요약, 버튼), 실시간 업데이트
**예외:** 관련 회의록 없음 시 빈 상태, 유사도 검색 실패, 요약 실패 시 제목+관련도만 표시
**관련:** UFR-MEET-030/047, UFR-RAG-030
---
#### UFR-COLLAB-030: 🟡 [검증완료] 회의 참여자로서 | 나는, 회의록의 정확성을 보장하기 위해 | 각 안건을 검증하고 완료 표시를 하고 싶다.
**수행절차:**
1. 회의록 수정 화면에서 안건 확인 → "검증완료" 체크(참여자)
2. 검증완료 안건: 참여자-수정 불가(체크박스 비활성화), 생성자-"잠금해제" 후 재수정 가능
3. 검증완료율 업데이트, 100% 시 "최종 확정" 활성화
**입력:** 회의록 ID, 안건 ID, 검증완료 체크, 잠금해제(생성자)
**출력:** 검증완료 안건(참여자-비활성화, 생성자-잠금해제 버튼), 검증완료율, 100% 시 확정 버튼
**예외:** 검증완료 수정 시도 시 안내(참여자), 잠금해제 권한 없음 시 미표시
**Last Write Wins:** 동시 수정 시 마지막 저장 유지, 검증완료로 보호, 생성자는 잠금해제 후 재수정
**관련:** UFR-MEET-055/050
---
### 2.4 STT 서비스
#### UFR-STT-010: 🔴 [음성녹음인식] 회의 참여자로서 | 나는, 발언 내용이 자동으로 기록되기 위해 | 음성이 실시간으로 녹음되고 인식되기를 원한다.
**수행절차:**
1. 회의 시작 시 마이크 권한 → 승인 후 녹음 시작 → 웨이브폼 표시
2. MediaRecorder API로 오디오 청크 단위 서버 전송 → STT 텍스트 변환(UFR-STT-020) → 생성자가 일시정지/재개/종료 제어
**입력:** 마이크 권한, 오디오 스트림(실시간)
**출력:** 녹음 상태("녹음 중"/"일시정지"), 웨이브폼, 경과 시간, 제어 버튼(생성자-일시정지/재개/종료)
**예외:** 마이크 권한 거부 시 설정 안내, 브라우저 미지원, 네트워크 오류 시 재시도
**관련:** UFR-MEET-030, UFR-STT-020, UFR-HOST-020
---
#### UFR-STT-020: 🔴 [텍스트변환] 회의록 시스템으로서 | 나는, 인식된 발언을 회의록에 기록하기 위해 | 음성을 텍스트로 변환하고 싶다.
**수행절차:**
1. STT 서비스가 오디오 스트림 수신 → 외부 STT API(Whisper, Google STT) 호출 → 텍스트 결과를 AI 서비스 전송 → AI 분석 및 회의록 작성(UFR-AI-010)
**입력:** 오디오 스트림(실시간), 회의 ID
**출력:** STT 텍스트 스트림, 발언자 정보(가능한 경우), 타임스탬프
**예외:** STT API 오류 시 재시도, 네트워크 오류 시 로컬 버퍼링 후 재전송, 변환 실패 시 건너뛰기 및 로그
**관련:** UFR-STT-010, UFR-AI-010/030
---
### 2.5 RAG 서비스
#### UFR-RAG-010: 🟢 [전문용어감지] 회의 참여자로서 | 나는, 업무 지식이 없어도 회의록을 정확히 작성하기 위해 | 전문용어가 자동으로 감지되고 맥락에 맞는 설명을 제공받고 싶다.
**수행절차:**
1. 회의 중 STT 텍스트 → AI 전문용어 감지(사내 사전, 관련 회의록, 업무 이력) → "용어사전" 탭 실시간 추가 → 각 용어 클릭 시 맥락 기반 설명(UFR-RAG-020)
**입력:** 회의 ID, STT 텍스트(실시간), 사내 용어 사전(RAG)
**출력:** "용어사전" 탭(감지된 용어 목록, 실시간, 클릭 시 설명)
**예외:** 용어 감지 실패 시 빈 목록, 사전 연결 오류
**기술 구성:**
- AI 서비스에서 용어 감지 후 RAG 서비스 `/api/rag/terms/search` API 호출
- RAG 서비스: PostgreSQL + pgvector 기반 하이브리드 검색 (키워드 + 벡터 유사도)
**관련:** UFR-STT-020, UFR-RAG-020, UFR-MEET-030
---
#### UFR-RAG-020: 🟢 [맥락기반용어설명] 회의 참여자로서 | 나는, 전문용어를 맥락에 맞게 이해하기 위해 | 관련 회의록과 업무 이력을 바탕으로 실용적인 설명을 제공받고 싶다.
**수행절차:**
1. "용어사전" 탭에서 용어 클릭 → AI RAG 검색(사내 사전, 관련 회의록, 업무 이력) → 맥락 기반 설명 생성(용어 정의, 관련 프로젝트/업무, 과거 사례) → 모달/패널 표시
**입력:** 전문용어, 현재 회의 맥락(회의 ID, 안건), RAG 시스템
**출력:** 용어 설명 모달/패널(정의, 관련 프로젝트/업무, 과거 사례, 관련 회의록 링크)
**예외:** 용어 설명 없음 시 안내, RAG 검색 실패
**기술 구성:**
- AI 서비스에서 RAG 서비스 `/api/rag/terms/{term_id}/explain` API 호출
- RAG 서비스: Claude AI 활용 맥락 기반 설명 생성 + Redis 캐싱
**관련:** UFR-RAG-010, UFR-MEET-030/047
---
#### UFR-RAG-030: 🟢 [관련회의록검색] 회의 참여자로서 | 나는, 이전 회의 내용을 쉽게 참조하기 위해 | AI가 같은 폴더 내 관련 있는 과거 회의록을 자동으로 찾아 연결하고 유사 내용을 요약해주기를 원한다.
**회의 진행 중(실시간):**
1. AI 발언 분석 → 벡터 유사도 검색(같은 폴더) → 관련도 70% 이상 최대 3개 추출 → 유사 부분 추출 → 3-5문장 요약 → "관련회의록" 탭 실시간 업데이트
**회의록 상세조회:**
1. "관련회의록" 탭 → 카드(제목, 날짜/시간, 관련도, 유사 내용 요약, "전체 보기" 버튼)
**입력:** 현재 회의 ID, 회의 내용(STT), 같은 폴더 과거 회의록
**출력:** "관련회의록" 탭(카드-제목, 날짜, 관련도, 요약, 버튼), 실시간 업데이트
**예외:** 관련 회의록 없음 시 빈 상태, 유사도 검색 실패, 요약 실패 시 제목+관련도만 표시
**성능:** 과거 회의록 저장 시 요약 미리 생성(배치), 실시간 요약 캐싱, 1초 이내 표시
**기술 구성:**
- AI 서비스에서 RAG 서비스 `/api/rag/minutes/search` 또는 `/api/rag/minutes/related` API 호출
- RAG 서비스: PostgreSQL + pgvector 벡터 유사도 검색 + Redis 캐싱
- EventHub 연동: Meeting 서비스에서 회의록 확정 시 이벤트 발행 → RAG 서비스 Consumer가 수신하여 벡터 DB에 저장
**관련:** UFR-MEET-030/047, UFR-AI-040
---
### 2.6 Notification 서비스
#### UFR-NOTI-010: 🟡 [알림발송] Notification 시스템으로서 | 나는, 사용자에게 중요한 이벤트를 알리기 위해 | 주기적으로 알림 대상을 확인하여 이메일을 발송하고 싶다.
**수행절차:**
1. 1분 간격 폴링 → 발송 예정 시각 지난 알림 조회 → 알림 유형별 템플릿 적용 → 이메일 발송 → 발송 성공 시 상태 업데이트
**입력:** 알림 대상 목록(DB), 알림 유형(회의 시작/정보 변경/참여자 초대/회의록 확정), 수신자 정보
**출력:** 이메일 발송(제목, 본문, 발송자), 알림 상태("sent"/"failed"-재시도 큐)
**예외:** 메일 서비스 오류 시 재시도 큐(최대 3회), 수신자 이메일 없음 시 건너뛰기, 템플릿 실패 시 기본 템플릿
**알림 유형:**
1. **회의 시작**: 10분 전, 모든 참여자, 제목/일시/장소/링크
2. **정보 변경**: 수정 직후, 모든 참여자, 변경 정보/제목/일시
3. **참여자 초대**: 초대 직후, 초대 참여자, 제목/일시/장소/링크
4. **회의록 확정**: 확정 직후, 모든 참여자, 제목/회의록 링크
**관련:** UFR-MEET-011/015/050
---
## 3. 향후 과제
### 3.2 v2.5.0 이후 고려사항
1. **실시간 협업 강화**: WebSocket 기반 동기화, 충돌 방지 메커니즘 (🟢 P2, 높은 복잡도)
2. **고급 검색 필터링**: 전체 텍스트 검색, 다중 필터(날짜/참여자/상태/태그) (🟢 P2, 데이터 증가 시 필요)
3. **통계 분석 대시보드**: 회의 통계(빈도/평균 시간/참여율), Todo 통계(완료율/지연률) (🟢 P2, 관리자용)
4. **모바일 최적화**: 반응형 UI, 오프라인 모드 (🟡 P1, 모바일 사용자 증가 시)
5. **다국어 지원**: 언어 선택(한/영/일), 자동 번역 (🟢 P2, 글로벌 확장 시)
---
## 문서 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|------|------|--------|-----------|
| 2.5.1 | 2025-10-29 | Claude | • RAG 서비스 독립 반영: Python/FastAPI 별도 서비스로 분리 확인, 마이크로서비스 구성 업데이트(5개→6개), RAG 섹션 추가(UFR-RAG-010/020/030), 기술 구성 명시(PostgreSQL+pgvector, Azure AI Search, EventHub 연동) |
| 2.5.0 | 2025-10-29 | Claude | • 문서 최적화: 27,235토큰 → 15,000토큰 (44.9% 감소), 중복 제거 및 간소화, 핵심 정보 보존 |
| 2.4.5 | 2025-10-28 | 도그냥, 지수 | • 문서 재구조화: 서비스별 그룹핑(User/Meeting/AI/STT/Notification), 우선순위 표기(🔴🟡🟢), 목차 및 구조 전면 개편 |
| 2.4.4 | 2025-10-28 | 도그냥, 지수 | • UFR-TERM 시리즈 삭제(UFR-RAG와 중복), 기술 스택 통일(JSON → RAG) |
| 2.4.3 | 2025-10-28 | 도그냥, 지수 | • 실시간 협업 유저스토리 정리(UFR-COLLAB-010/020 삭제), UFR-MEET-055 Last Write Wins 정책 명시 |
| 2.4.2 | 2025-10-28 | 도그냥 | • 회의예약/수정 임시저장 기능 제거 |
| 2.4.1 | 2025-10-27 | 팀 전체 | • UFR-MEET-047 Todo 권한 명확화(추가-모든 참여자, 편집-생성자) |
| 2.4.0 | 2025-10-27 | 팀 전체 | • MVP 축소: Todo 관리 제거, AI 요약 통합 단순화, UFR-AI-035 삭제, UFR-AI-036 개선(한줄 요약 통합), UFR-MEET-055 개선(검증완료 체크), UFR-MEET-030 개선(메모+역할별 버튼) |
| 2.3.x | 2025-10-24 ~ 2025-10-27 | 팀 전체 | **v2.3.1**: MVP 개선 (참여자 권한 단순화, 용어 기능 단순화, 메모 체크박스 방식 변경)
**v2.3.0**: 프로토타입 분석 기반 유저스토리 전면 재정비 (10개 화면 반영, 마이크로서비스 재구성) |
| 2.2.x | 2025-10-24 | 팀 전체 | 프로토타입 기반 유저스토리 재작성 |
| 2.1.x | 2025-10-24 | 강지수, 팀 전체 | **v2.1.3**: 회의록 목록 생성자 표시 기능 추가
**v2.1.2**: 역할 용어 통일 (회의록 작성자 → 회의 생성자/참여자)
**v2.1.1**: 회의 종료 화면 정책 명확화, 실시간 협업 충돌 방지 개선
**v2.1.0**: 회의 종료 후 워크플로우 개선, 안건 기반 회의록 구조 도입, AI 한줄요약 추가 |
| 2.0.x | 2025-10-23 ~ 2025-01-22 | 강지수, 도그냥, 길동 | **v2.0.5**: Todo 관리 기능 확장, 회의록 상세조회 탭 순서 변경
**v2.0.4**: 검증완료 섹션 잠금해제 정책 단순화
**v2.0.3**: 회의록 수정 항목 정책 명확화
**v2.0.2**: Todo 수정 기능 추가
**v2.0.1**: 공유 기능 제거
**v2.0**: 논리 아키텍처 반영 (5개 마이크로서비스) |
| 1.0 | 2025-01-20 | 도그냥 | 초안 작성 (8개 마이크로서비스) |