# AI기반 회의록 작성 및 이력 관리 개선 서비스 - 유저스토리 (v2.4.1)

## 목차
- [차별화 전략](#차별화-전략)
  - [1. 기본 기능 (Hygiene Factors)](#1-기본-기능-hygiene-factors)
  - [2. 핵심 차별화 포인트 (Differentiators)](#2-핵심-차별화-포인트-differentiators)
- [마이크로서비스 구성](#마이크로서비스-구성)
- [유저스토리 - USER & MEETING 서비스](#유저스토리---user--meeting-서비스)
  - [USER 서비스](#user-서비스)
  - [MEETING 서비스](#meeting-서비스)
- [유저스토리 - AI, STT, RAG, COLLAB, NOTIFICATION 서비스](#유저스토리-v230---ai-stt-rag-collab-todo-notification-서비스)
  - [AI 서비스](#ai-서비스)
  - [STT 서비스](#stt-서비스)
  - [RAG 서비스 (AI 서비스에 통합)](#rag-서비스-ai-서비스에-통합)
  - [COLLAB 서비스 (Meeting 서비스에 통합)](#collab-서비스-meeting-서비스에-통합)
  - [NOTIFICATION 서비스](#notification-서비스-신규)
- [MVP 개선 사항 (v2.3.1)](#mvp-개선-사항-v231)
  - [회의 참석자 권한 및 기능 단순화](#회의-참석자-권한-및-기능-단순화)
  - [회의 생성자 전용 기능](#회의-생성자-전용-기능)
  - [용어 설명 기능 (MVP 단순화)](#용어-설명-기능-mvp-단순화)
  - [기존 유저스토리 수정](#기존-유저스토리-수정)
- [문서 이력](#문서-이력)

---

## 차별화 전략

본 서비스는 다음과 같은 차별화 포인트를 통해 경쟁 우위를 확보합니다:

### 1. 기본 기능 (Hygiene Factors)
- **STT(Speech To Text)**: 음성을 텍스트로 변환하는 기본 기능
  - 시장의 대부분 서비스가 제공하는 기능으로 차별화 포인트가 아님
  - 필수 기능이지만 경쟁 우위를 가져다주지 않음

### 2. 핵심 차별화 포인트 (Differentiators)
- **맥락 기반 용어 설명**: 단순 용어 설명을 넘어, 관련 회의록과 업무이력을 바탕으로 실용적인 정보 제공
- **섹션 AI 요약 재생성**: 버튼 클릭으로 작성한 섹션 내용을 AI가 요약 (2-3문장, 2-5초 처리)
- **지능형 회의 진행 지원**: 회의 패턴 분석을 통한 안건 추천, 효율성 분석 및 개선 제안

---

## 마이크로서비스 구성

1. **User** - 사용자 인증 (LDAP 연동, JWT 토큰 발급/검증)
2. **Meeting** - 회의, 회의록, Todo, 실시간 협업 통합 관리
   - 회의 관리: 회의 예약, 시작, 종료
   - 회의록 관리: 회의록 생성, 수정, 확정
   - 실시간 협업: WebSocket 기반 실시간 동기화, 버전 관리, 충돌 해결
   - 템플릿 관리: 회의록 템플릿 관리
   - 통계 생성: 회의 및 Todo 통계
3. **STT** - 음성 스트리밍 처리, 실시간 음성-텍스트 변환 (기본 기능)
4. **AI** - AI 기반 회의록 자동화, Todo 추출, 지능형 검색 (RAG 통합)
   - LLM 기반 회의록 자동 작성
   - Todo 자동 추출 및 담당자 식별
   - 섹션 AI 요약 재생성 (버튼 클릭 시 요약 생성)
   - 관련 회의록 자동 연결 (벡터 유사도 검색)
   - 전문용어 자동 감지 및 맥락 기반 설명 생성 (RAG)
   - 과거 회의록 및 사내 문서 검색
   - 업무 이력 통합

---
# 유저스토리 - USER & MEETING 서비스

## USER 서비스

### UFR-USER-010: [로그인] 사용자로서 | 나는, 시스템에 접근하기 위해 | 사번과 비밀번호로 로그인하고 싶다.

**수행절차:**
1. 로그인 화면 접속
2. 사번 입력 (필수)
3. 비밀번호 입력 (필수, 최소 8자)
4. (선택) 로그인 상태 유지 체크박스 선택
5. 로그인 버튼 클릭
6. 인증 성공 시 대시보드로 이동

**입력:**
- 사번: 텍스트 입력, 필수, 공백 불가
- 비밀번호: 패스워드 입력, 필수, 최소 8자 이상
- 로그인 상태 유지: 체크박스 (선택)
- Enter 키 입력 시 다음 필드로 자동 이동 (사번 → 비밀번호)

**출력/결과:**
- 로그인 성공: JWT 토큰 발급, 사용자 정보 저장, 대시보드(02-대시보드.html)로 이동
- 로그인 실패: 에러 메시지 표시 ("사번 또는 비밀번호가 올바르지 않습니다"), 5초 후 자동 숨김
- 로딩 상태: 로그인 버튼 비활성화 및 "로그인 중..." 표시

**예외처리:**
- 사번 미입력: "사번을 입력해주세요" 에러 표시 및 사번 필드 포커스
- 비밀번호 미입력: "비밀번호를 입력해주세요" 에러 표시 및 비밀번호 필드 포커스
- 비밀번호 8자 미만: "비밀번호는 최소 8자 이상이어야 합니다" 에러 표시
- 인증 실패: 인증 실패 메시지 표시, 로그인 버튼 재활성화
- 이미 로그인된 경우: 대시보드로 자동 리다이렉트

**관련 유저스토리:**
- UFR-USER-020: 대시보드 조회

---

### UFR-USER-020: [대시보드] 사용자로서 | 나는, 나의 회의 현황을 파악하기 위해 | 대시보드를 조회하고 싶다.

**수행절차:**
1. 로그인 후 대시보드 자동 표시 또는 하단 네비게이션에서 홈 아이콘 클릭
2. 통계 블록 확인 (예정된 회의, 작성중 회의록)
3. 최근 회의 목록 확인 (최대 3개)
4. 나의 회의록 목록 확인 (최대 4개)
5. 필요 시 "전체 보기" 링크 클릭하여 회의록 목록 화면 이동
6. FAB 버튼으로 회의 예약 또는 바로 시작

**입력:**
- 없음 (자동 렌더링)

**출력/결과:**
- 헤더: 사용자 이름, 오늘 예정된 회의 개수 또는 안내 메시지
- 통계 블록 (2열 그리드):
  - 예정된 회의: 전체 예정 + 진행 중 회의 개수
  - 작성중 회의록: 내가 참석한 회의 중 '작성중' 상태인 회의록 개수 (클릭 액션 없음, 정보 표시만)
- 최근 회의 (회의록 미생성 우선, 빠른 일시 순, 최대 3개):
  - 회의 카드: 상태 배지, 제목, 생성자 표시(👑), 날짜/시간, 참석자 수, 장소, 액션 버튼
  - 진행 중 회의: 좌측 녹색 바 강조, "참여하기" 버튼
  - 예정 회의: 생성자인 경우 "수정" 버튼
  - 완료 회의: "보기" 버튼
- 나의 회의록 (최신순, 최대 4개, 2x2 그리드):
  - 회의록 카드: 상태 배지, 생성자 표시(👑), 제목, 날짜/시간, 참석자 수, 검증완료율(작성중인 경우)
- 사이드바 (데스크톱): 로고, 메뉴(대시보드, 회의록), 사용자 정보, 로그아웃
- 하단 네비게이션 (모바일): 홈(활성), 회의록
- FAB 메뉴:
  - 회의예약 버튼: 회의 예약 화면으로 이동
  - 바로시작 버튼: 템플릿 선택 화면으로 이동

**예외처리:**
- 로그인 안 된 경우: 로그인 화면으로 리다이렉트
- 최근 회의 없음: 빈 상태 표시
- 회의록 없음: "참여한 회의록이 없습니다" 빈 상태 표시

**관련 유저스토리:**
- UFR-USER-010: 로그인
- UFR-MEET-010: 회의예약
- UFR-MEET-020: 템플릿선택
- UFR-MEET-046: 회의록목록조회
- UFR-MEET-047: 회의록상세조회

---

## MEETING 서비스

### UFR-MEET-010: [회의예약] 회의 생성자로서 | 나는, 회의를 효율적으로 준비하기 위해 | 회의를 예약하고 참석자를 초대하고 싶다.

**수행절차:**
1. 대시보드에서 "회의예약" FAB 버튼 클릭 또는 최근 회의에서 "수정" 버튼 클릭
2. 회의 제목 입력 (최대 100자)
3. 날짜 선택 (오늘 이후 날짜, 달력 UI)
4. 시작/종료 시간 선택 (15분 단위 커스텀 시간 선택기)
5. 온라인/오프라인 회의 선택 (토글)
6. 장소 입력 (최대 200자)
   - 오프라인: 예) 본사 2층 대회의실
   - 온라인: 예) Zoom, Google Meet + 회의 링크 입력 또는 자동 생성
7. 참석자 추가 (현재 사용자는 기본 포함)
   - "참석자 추가" 버튼 클릭
   - 검색 모달에서 이름 또는 이메일로 검색
   - 사용자 선택하여 추가
   - 칩으로 표시, X 버튼으로 제거 가능 (본인 제외)
8. (선택) 안건 입력 (텍스트 영역)
9. "임시저장" 버튼 또는 "예약 완료" 버튼 클릭

**입력:**
- 회의 제목: 텍스트 입력, 필수, 최대 100자, 문자 카운터 표시
- 날짜: date 타입, 필수, 오늘 이후 날짜만 선택 가능, 달력 아이콘(📅) 표시
- 시작 시간: 커스텀 시간 선택기 (readonly), 필수, 15분 단위 (00, 15, 30, 45)
- 종료 시간: 커스텀 시간 선택기 (readonly), 필수, 15분 단위
- 온라인 회의: 토글 스위치 (선택)
- 장소: 텍스트 입력, 선택, 최대 200자, 문자 카운터 표시
- 회의 링크: URL 입력, 선택, 온라인 회의인 경우에만 표시, "자동 생성" 버튼 제공
- 참석자: 검색 모달, 필수 (최소 1명), 현재 사용자는 기본 포함
- 안건: 텍스트 영역 (textarea), 선택, 여러 줄 입력 가능

**출력/결과:**
- 예약 완료: "회의가 예약되었습니다" 토스트 메시지, 대시보드로 이동
- 임시저장: "임시 저장되었습니다" 토스트 메시지, 현재 화면 유지
- 참석자 추가 성공: "{이름}님이 추가되었습니다" 토스트 메시지
- 회의 링크 생성: "회의 링크가 생성되었습니다" 토스트 메시지

**예외처리:**
- 제목 미입력: "회의 제목을 입력해주세요" 토스트, 제목 필드 포커스
- 날짜 미선택: "회의 날짜를 선택해주세요" 토스트, 날짜 필드 포커스
- 시간 미선택: "회의 시간을 선택해주세요" 토스트
- 참석자 없음: "최소 1명의 참석자를 추가해주세요" 토스트
- 과거 날짜 선택: "과거 날짜는 선택할 수 없습니다" 토스트, 날짜 필드 포커스
- 뒤로가기/취소 클릭: "작성 중인 내용이 있습니다. 나가시겠습니까?" 확인 모달
- 참석자 검색 결과 없음: "검색 결과가 없습니다" 빈 상태 표시

**관련 유저스토리:**
- UFR-USER-020: 대시보드 조회
- UFR-MEET-020: 템플릿선택

---

### UFR-MEET-015: [회의진행] 회의 참석자로서 | 나는, 회의 중 추가 참석자가 필요할 때 | 실시간으로 참석자를 초대하고 싶다.

**수행절차:**
1. 회의 진행 화면(05-회의진행.html)에서 "참석자" 탭 클릭
2. "초대" 버튼 클릭
3. 검색 모달에서 이름 또는 이메일로 검색
4. 사용자 선택하여 초대
5. 초대된 참석자 실시간 표시
6. 초대된 참석자에게 알림 전송

**입력:**
- 검색어: 텍스트 입력, 이름 또는 이메일로 검색
- 선택: 검색 결과 목록에서 사용자 클릭

**출력/결과:**
- 초대 성공: 참석자 목록에 실시간 추가, "{이름}님을 초대했습니다" 토스트 메시지
- 초대된 참석자에게 알림 대상 생성:
  - 알림 유형: "회의 참석자 초대"
  - 알림 내용: "{회의 제목}에 참석자로 초대되었습니다"
  - 수신자: 초대된 참석자
  - 발송 예정 시각: 즉시
- Notification 서비스가 주기적으로 폴링하여 이메일 발송
- 모든 참석자에게 참석자 변경 사항 실시간 동기화 (WebSocket)

**예외처리:**
- 검색 결과 없음: "검색 결과가 없습니다" 빈 상태 표시
- 이미 참석 중인 사용자: 선택 불가 또는 "이미 참석 중입니다" 안내
- 네트워크 오류: "초대에 실패했습니다" 에러 메시지

**관련 유저스토리:**
- UFR-MEET-030: 회의시작
- UFR-COLLAB-010: 회의록수정동기화

---

### UFR-MEET-020: [템플릿선택] 회의 생성자로서 | 나는, 회의록을 효율적으로 작성하기 위해 | 회의 유형에 맞는 템플릿을 선택하고 싶다.

**템플릿선택 진입 경로:**
- **경로 1**: 대시보드(02-대시보드.html) → "바로시작" FAB 버튼 → 템플릿 선택(04-템플릿선택.html)
- **경로 2**: 회의예약 (03-회의예약.html) → 템플릿 선택(04-템플릿선택.html)
- 
**수행절차:**
1. 위 경로 중 하나를 통해 템플릿 선택 화면(04-템플릿선택.html) 진입
2. 4가지 템플릿 중 선택 또는 "건너뛰기" 선택
   - 일반 회의: 회의 개요, 논의 사항, 결정 사항, 액션 아이템
   - 스크럼 회의: 어제 한 일, 오늘 할 일, 블로커/이슈
   - 킥오프 회의: 프로젝트 개요, 목표 및 범위, 역할 및 책임, 일정 및 마일스톤
   - 주간 회의: 지난주 성과, 이번주 계획, 주요 이슈, 다음 액션
3. 선택 완료 시 회의 시작 (05-회의진행.html로 이동)

**입력:**
- 템플릿 선택: 4가지 중 1개 선택 또는 건너뛰기
- 템플릿 카드 클릭 시 해당 템플릿 선택

**출력/결과:**
- 템플릿 선택: 선택한 템플릿으로 회의 시작, 회의 진행 화면으로 이동
- 건너뛰기: 기본 템플릿(일반 회의)으로 회의 시작
- 템플릿 미리보기: 아이콘, 설명, 섹션 목록 표시

**예외처리:**
- 없음 (선택 또는 건너뛰기 모두 허용)

**관련 유저스토리:**
- UFR-USER-020: 대시보드 조회
- UFR-MEET-010: 회의예약
- UFR-MEET-030: 회의시작

---

### UFR-MEET-030: [회의시작] 회의 생성자로서 | 나는, 회의를 시작하고 회의록을 작성하기 위해 | 회의를 시작하고 음성 녹음을 준비하고 싶다.

**회의 진입 경로:**
- **경로 1**: 대시보드(02-대시보드.html) → "바로시작" FAB 버튼 → 템플릿 선택(04-템플릿선택.html) → 회의 진행(05-회의진행.html)
- **경로 2**: 대시보드 → 진행 중 회의 "참여하기" 버튼 → 회의 진행(05-회의진행.html)

**수행절차:**
1. 위 경로 중 하나를 통해 회의 진행 화면(05-회의진행.html) 진입
2. 회의 진행 화면 표시
3. 녹음 시작 확인 (자동 또는 수동)
4. 타이머 시작 (회의 진행 시간 표시)
5. 웨이브폼 애니메이션 표시 (녹음 상태 시각화)
6. 탭 네비게이션으로 기능 전환:
   - 참석자: 참석자 목록 및 실시간 초대
   - AI 제안: 실시간 AI 분석 결과 및 개인 메모 작성
     - AI가 인식한 주요 내용 표시
     - 참석자별 개인 메모 작성 영역 (수동 저장만 지원)
   - 용어사전: 실시간 AI 자동 인식된 용어 및 검색
   - 관련회의록: 실시간 AI 자동 연결된 이전 회의록
7. 하단 고정 버튼 (역할별 차별화)
   - 회의 생성자: [일시정지/녹음재개] + [회의 종료]
   - 회의 참석자: [회의 나가기]

**입력:**
- 녹음 시작/일시정지: 버튼 클릭
- 탭 전환: 탭 클릭
- 메모 작성: 텍스트 입력

**출력/결과:**
- 헤더: 회의 제목, 녹음 상태 (녹음 중/일시정지), 경과 시간
- 웨이브폼 애니메이션: 녹음 상태 시각화
- 참석자 탭: 참석자 목록, 초대 버튼
- AI 제안 탭:
  - AI가 인식한 주요 내용 리스트
  - 개인 메모 작성 영역 (참석자별 독립)
  - 저장 버튼 (수동 저장만)
- 용어사전 탭: 자동 추출된 용어, 검색 기능
- 관련회의록 탭: 자동 연결된 이전 회의록 목록
- 하단 고정 버튼:
  - 회의 생성자: [일시정지/녹음재개] + [회의 종료]
  - 회의 참석자: [회의 나가기]

**예외처리:**
- 녹음 권한 없음: "마이크 권한이 필요합니다" 에러 메시지
- 네트워크 오류: "녹음 중 오류가 발생했습니다" 에러 메시지
- 일시정지 확인: "일시정지하시겠습니까?" 확인 모달
- 회의 종료 확인 (생성자): "회의를 종료하시겠습니까? 모든 참석자의 회의가 종료됩니다" 확인 모달
- 회의 나가기 확인 (참석자): "회의에서 나가시겠습니까? 저장하지 않은 메모는 삭제됩니다" 확인 모달

**관련 유저스토리:**
- UFR-MEET-020: 템플릿선택
- UFR-MEET-015: 참석자 실시간 초대
- UFR-MEET-040: 회의종료
- UFR-STT-010: 음성녹음인식
- UFR-AI-030: 실시간 AI 제안 (신규)
- UFR-RAG-010: 전문용어감지
- UFR-AI-040: 관련회의록연결

---

### UFR-MEET-040: [회의종료] 회의 생성자로서 | 나는, 회의를 종료하고 회의록을 정리하기 위해 | 회의를 종료하고 요약 내용을 확인한 후 다음 단계를 선택하고 싶다.

**권한:**
- 회의 생성자만 회의를 종료할 수 있음
- 일반 참석자는 "회의 종료" 버튼이 표시되지 않음

**수행절차:**
1. 회의 진행 화면에서 "회의 종료" 버튼 클릭 (생성자 전용)
2. 종료 확인 모달: "회의를 종료하시겠습니까?" 확인
3. 회의 종료 화면(07-회의종료.html) 표시 (확인 전용, 편집 불가)
4. 통계 확인 (4열 그리드):
   - 참석자 수
   - 회의 시간
   - 안건 수
   - Todo 수
5. 주요 키워드 확인 (태그 형태)
6. 안건별 AI 요약 확인 (아코디언 카드):
   - AI 한줄 요약 (30자 이내, 편집 불가)
   - AI 상세 요약 (편집 가능, 재생성 가능)
   - 자동 추출된 Todo 목록
7. 하단 액션 바에서 다음 단계 선택:
   - 옵션 1: "회의록 수정" → 회의록 수정 화면(11-회의록수정.html)으로 이동
   - 옵션 2: "바로 최종 확정" → 모든 안건 자동 검증 완료 처리 후 최종 확정
   - 옵션 3: "대시보드" → 대시보드(02-대시보드.html)로 이동

**입력:**
- 하단 액션 버튼 클릭

**출력/결과:**
- 회의 종료 화면 표시:
  - 통계 카드 (4열): 참석자, 시간, 안건, Todo
  - 주요 키워드 태그
  - 안건 아코디언 카드: AI 한줄 요약 + 상세 요약 + Todo
  - 읽기 전용 안내 표시
- 회의록 상태: "작성중"으로 저장
- 옵션 선택에 따른 화면 전환

**예외처리:**
- AI 요약 생성 실패: "요약 생성 중 오류가 발생했습니다" 에러 메시지, 기본 템플릿으로 대체
- Todo 추출 실패: 빈 Todo 목록 표시
- 바로 확정 실패: "최종 확정 중 오류가 발생했습니다" 에러 메시지

**관련 유저스토리:**
- UFR-MEET-030: 회의시작
- UFR-MEET-050: 최종확정
- UFR-MEET-055: 회의록수정
- UFR-AI-010: 회의록자동작성
- UFR-AI-020: Todo자동추출
- UFR-AI-036: AI한줄요약

---

### UFR-MEET-050: [최종확정] 회의 생성자로서 | 나는, 회의록을 완성하기 위해 | 모든 안건을 검증하고 최종 회의록을 확정하고 싶다.

**수행절차:**
**시나리오 1: 회의록 수정 후 최종 확정**
1. 회의록 수정 화면(11-회의록수정.html)에서 모든 안건 검증 완료
2. "최종 확정" 버튼 활성화 (검증률 100%)
3. "최종 확정" 버튼 클릭
4. 확인 모달: "최종 확정하시겠습니까? 확정 후에는 생성자만 수정할 수 있습니다"
5. 회의록 상태: "확정완료"로 변경
6. 회의록 상세 조회 화면(10-회의록상세조회.html)으로 이동

**시나리오 2: 회의 종료 화면에서 바로 확정**
1. 회의 종료 화면(07-회의종료.html)에서 "바로 최종 확정" 버튼 클릭
2. 확인 모달: "바로 최종 확정하시겠습니까?"
3. 모든 안건 자동 검증 완료 처리
4. 회의록 상태: "확정완료"로 변경
5. 회의록 상세 조회 화면으로 이동

**입력:**
- 최종 확정 버튼 클릭
- 확인 모달 승인

**출력/결과:**
- 확정 성공: "회의록이 최종 확정되었습니다" 토스트 메시지
- 회의록 상태: "확정완료"
- 모든 안건 검증완료 상태로 변경
- 회의록 상세 조회 화면으로 이동
- 확정 후 편집 권한: 회의 생성자만 잠금 해제 후 수정 가능

**예외처리:**
- 시나리오 1에서 미검증 안건 존재: "모든 안건을 검증해야 확정할 수 있습니다" 에러 메시지
- 확정 실패: "최종 확정 중 오류가 발생했습니다" 에러 메시지
- 확인 모달 취소: 현재 화면 유지

**관련 유저스토리:**
- UFR-MEET-040: 회의종료
- UFR-MEET-055: 회의록수정
- UFR-COLLAB-030: 검증완료

---

### UFR-MEET-046: [회의록목록조회] 회의 참석자로서 | 나는, 참여한 회의록들을 효율적으로 관리하기 위해 | 회의록 목록을 조회하고 필터링하고 싶다.

**수행절차:**
1. 사이드바 또는 하단 네비게이션에서 "회의록" 메뉴 클릭
2. 회의록 목록 조회 화면(12-회의록목록조회.html) 표시
3. (선택) 정렬 기준 선택:
   - 최근수정순 (기본값)
   - 최근회의순
   - 제목순
4. (선택) 참여 유형 필터 선택 (다중 선택 가능):
   - 참석한 회의 (체크박스)
   - 생성한 회의 (체크박스)
5. (선택) 상태 탭 필터 선택:
   - 전체 (통계 표시)
   - 작성중 (검증완료율 표시)
   - 확정완료
6. (선택) 검색: 제목, 참석자, 키워드로 검색
7. 회의록 카드 클릭 시 상세 조회 화면으로 이동
8. 하단 스크롤 시 "더보기" (10개씩 추가 로드)

**입력:**
- 정렬 기준: 드롭다운 선택
- 참여 유형: 체크박스 (다중 선택)
- 상태: 탭 클릭
- 검색어: 텍스트 입력
- 더보기: 스크롤 또는 버튼 클릭

**출력/결과:**
- 필터 섹션: 정렬, 참여 유형 (체크박스), 검색
- 상태 탭: 전체 (통계), 작성중, 확정완료
- 회의록 카드 그리드 (모바일 1열, 데스크톱 2열):
  - 상태 배지 (작성중/확정완료)
  - 생성자 표시 (👑 아이콘, 16px, "생성자" 툴팁)
  - 제목
  - 날짜/시간, 참석자 수
  - 검증완료율 (작성중인 경우만)
- 빈 상태: "조회된 회의록이 없습니다" 표시
- 더보기: 10개씩 추가 로드

**예외처리:**
- 조회 결과 없음: 빈 상태 표시
- 검색 결과 없음: "검색 결과가 없습니다" 빈 상태 표시
- 네트워크 오류: "회의록 조회 중 오류가 발생했습니다" 에러 메시지

**관련 유저스토리:**
- UFR-USER-020: 대시보드 조회
- UFR-MEET-047: 회의록상세조회

---

### UFR-MEET-047: [회의록상세조회] 회의 참석자로서 | 나는, 지난 회의록의 상세 정보와 전체 내용을 | 한눈에 확인하고 싶다.

**수행절차:**
1. 대시보드 또는 회의록 목록에서 회의록 카드 클릭
2. 회의록 상세 조회 화면(10-회의록상세조회.html) 표시
3. 탭 전환:
   - **대시보드 탭** (기본 노출):
     - 통계 그리드 (4열): 참석자, 회의 시간, 안건 수, Todo 수
     - 주요 키워드 (태그)
     - 핵심내용 요약
     - 결정사항
     - Todo 진행상황 (단순 조회 전용)
       - Todo 카드: 제목, 담당자, 마감일만 표시
       - D-day 체크, 우선순위 라벨 제거
       - 진행률 표시 (수평 바): 완료 Todo 수 / 전체 Todo 수
     - 관련회의록 (관련도 배지: 높음, 중간, 낮음)
   - **회의록 탭**:
     - 회의 기본 정보 (제목, 날짜/시간, 장소, 참석자)
     - 안건별 카드:
       - 안건 제목
       - AI 한줄 요약 (30자 이내, 읽기 전용)
       - AI 상세 요약
       - 관련회의록 링크
4. "수정" 버튼 클릭 시 회의록 수정 화면으로 이동
5. Todo 리스트 영역 (대시보드 탭):
   - "추가" 버튼: 모든 참석자에게 노출, 클릭 시 Todo 추가 모달 표시
   - Todo 항목별 "편집" 버튼: 회의 생성자에게만 노출
   - Todo 추가 모달: 제목, 담당자, 마감일 입력
   - Todo 편집 모달: 제목, 마감일 수정 (회의 생성자만 담당자 변경 가능)

**입력:**
- 탭 클릭: 대시보드 / 회의록
- Todo 추가 클릭: "추가" 버튼
- Todo 편집 클릭: Todo 항목별 "편집(✏️)" 버튼 (회의 생성자만)
- Todo 추가/편집 모달 입력:
  - 제목: 텍스트, 필수
  - 담당자: 드롭다운 선택, 필수 (추가 시 또는 편집 시 생성자만)
  - 마감일: 날짜 선택, 필수

**출력/결과:**
- 헤더: 회의 제목, "수정" 버튼 (제목 텍스트 바로 옆에 배치, 권한에 따라 표시)
- Todo 리스트 (대시보드 탭):
  - "추가" 버튼: 모든 참석자에게 표시
  - Todo 항목별 "편집(✏️)" 버튼: 회의 생성자만 표시
  - Todo 추가 성공: "Todo가 추가되었습니다" 성공 메시지 → "담당자에게 알림이 전송되었습니다" 정보 메시지 → "캘린더가 업데이트되었습니다" 정보 메시지
  - Todo 편집 성공: "Todo가 수정되었습니다" 성공 메시지
    - 담당자 변경 시: "이전 담당자와 새 담당자에게 알림이 전송되었습니다" 정보 메시지
    - 마감일 변경 시: "캘린더가 업데이트되었습니다" 정보 메시지
- 대시보드 탭:
  - 통계, 키워드, 핵심내용, 결정사항, Todo 진행상황, 관련회의록
  - Todo 카드: 제목, 담당자, 마감일만 표시 (D-day, 우선순위 라벨 없음)
- 회의록 탭:
  - 기본 정보, 안건별 상세 내용

**예외처리:**
- 회의록 조회 실패: "회의록 조회 중 오류가 발생했습니다" 에러 메시지
- Todo 없음: "등록된 Todo가 없습니다" 빈 상태 표시
- 관련회의록 없음: "관련 회의록이 없습니다" 빈 상태 표시
- Todo 추가/편집 시 필수 입력 누락: "제목/담당자/마감일을 입력해주세요" 에러 메시지
- Todo 편집 권한 없음 (일반 참석자): 편집 버튼 미표시

**Todo 권한 정책 (v2.4.1 신규):**
- **Todo 추가**: 모든 회의 참석자 가능
  - "추가" 버튼 모든 참석자에게 노출
  - 추가 모달에서 제목, 담당자, 마감일 입력
  - 담당자는 회의 참석자 중 선택
- **Todo 편집**: 회의 생성자만 가능
  - 편집(✏️) 버튼은 회의 생성자에게만 노출
  - 편집 모달에서 제목, 담당자, 마감일 수정 가능
  - 일반 참석자는 편집 버튼이 보이지 않음

**관련 유저스토리:**
- UFR-MEET-046: 회의록목록조회
- UFR-MEET-055: 회의록수정

---

### UFR-MEET-055: [회의록수정] 회의 참석자로서 | 나는, 검증이 완료되지 않은 안건을 | 수정하고 검증완료 체크를 통해 보호하고 싶다.

**수행절차:**
1. 회의록 상세 조회 화면에서 "수정" 버튼 클릭
2. 회의록 수정 화면(11-회의록수정.html) 표시
3. 여러 참석자가 동시에 수정 화면 진입 가능 (동시 편집 허용)
4. 편집 가능 항목:
   - 회의 제목 (텍스트 입력)
   - AI 한줄 요약 (읽기 전용, 편집 불가)
   - 안건별 입력창 내용 (텍스트 영역, 편집 가능)
     - "AI 재생성" 버튼: 입력창 내용 기반으로 한줄 요약만 재생성
   - 관련회의록 추가/제거
     - "추가" 버튼: 검색 모달 열기
     - X 버튼: 관련회의록 제거
   - 참석자 관리 (회의 생성자만):
     - 참석자 추가/삭제
     - 05-회의진행 화면과 동일한 UI
5. 읽기 전용 항목:
   - 회의 일시 (읽기 전용 배지 표시)
   - 회의 장소 (읽기 전용 배지 표시)
6. 안건별 검증완료 체크:
   - 검증완료 전: 체크박스 비활성화 상태, 편집 가능
   - 검증완료 체크 시: 해당 안건 잠금 (편집 불가)
   - 회의 생성자만: 검증완료 체크 해제 가능 (잠금 해제)
7. 저장 로직:
   - "저장" 버튼 클릭 시:
     - 검증완료된 안건: 저장 스킵
     - 미검증 안건: 저장 진행
   - 저장 결과 알림:
     - "N개 안건이 저장되었습니다"
     - "M개 안건은 검증완료 상태로 저장되지 않았습니다"
     - 저장 불가 안건 목록 표시
8. 모든 안건 검증 완료 시 "최종 확정" 버튼 활성화
9. 페이지 나가기 전 확인 (변경사항 있을 때)

**입력:**
- 회의 제목: 텍스트 입력
- 안건별 입력창 내용: 텍스트 영역 편집
- AI 재생성: 버튼 클릭 (입력창 내용 기반 한줄 요약 생성)
- 관련회의록: 추가(검색 모달), 제거(X 버튼)
- 참석자: 추가(검색 모달), 삭제(X 버튼) - 회의 생성자만
- 검증 완료: 체크박스 (회의 생성자: 체크/해제, 참석자: 체크만)

**출력/결과:**
- 편집 화면: 제목, AI 한줄 요약, 안건별 입력창, 관련회의록, 참석자, 검증 체크박스
- 저장 결과: "N개 안건 저장됨" 토스트, 저장 불가 안건 목록 표시
- AI 재생성: "재생성 중..." → 한줄 요약만 업데이트 → "재생성되었습니다" 토스트
- 관련회의록 추가: 검색 모달 → 선택 → "추가되었습니다" 토스트
- 참석자 추가: 검색 모달 → 선택 → "{이름}님이 추가되었습니다" 토스트
- 검증 완료: 체크 → 잠금 아이콘 표시 (편집 불가)
- 잠금 해제 (회의 생성자만): 체크 해제 → "잠금 해제하시겠습니까?" 확인 → 편집 가능
- 최종 확정: 검증률 100% → "최종 확정" 버튼 활성화

**예외처리:**
- 편집 권한 없음 (확정 완료 후): 읽기 전용 모드, "확정된 회의록은 수정할 수 없습니다" 안내
- 검증완료 안건 편집 시도: "검증완료된 안건은 수정할 수 없습니다. 회의 생성자에게 문의하세요" 안내
- 검증완료 해제 권한 없음: "회의 생성자만 검증완료를 해제할 수 있습니다" 안내
- AI 재생성 실패: "재생성 중 오류가 발생했습니다" 에러 메시지
- 저장 실패: "저장 중 오류가 발생했습니다" 에러 메시지
- 페이지 나가기: "저장되지 않은 변경사항이 있습니다. 나가시겠습니까?" 확인 모달
- 참석자 관리 권한 없음: "회의 생성자만 참석자를 관리할 수 있습니다" 안내

**동시 편집 정책 (MVP):**
- 실시간 동기화 없음 (다른 참석자가 편집하는 내용 안 보임)
- 안건별 검증완료 체크로 충돌 방지
- 마지막 저장 우선 원칙 (Last Write Wins)

**관련 유저스토리:**
- UFR-MEET-047: 회의록상세조회
- UFR-MEET-050: 최종확정
- UFR-AI-036: AI한줄요약
- UFR-AI-040: 관련회의록연결
- UFR-COLLAB-030: 검증완료
# 유저스토리 v2.3.0 - AI, STT, RAG, COLLAB, TODO, NOTIFICATION 서비스

## AI 서비스

### UFR-AI-010: [회의록자동작성] 회의 참석자로서 | 나는, 회의록 작성 부담을 줄이기 위해 | AI가 발언 내용을 실시간으로 정리하고 회의 종료 시 전체 안건을 요약하기를 원한다.

**수행절차:**

**시나리오 1: 실시간 AI 주요 메모 작성 (회의 진행 중)**
1. 회의 진행 중 STT가 음성을 텍스트로 변환
2. AI가 실시간으로 발언 내용 분석
3. 주요 내용을 감지하여 AI 제안 생성
4. "AI 제안" 탭에 제안 카드 표시
5. 사용자가 "메모에 추가" 버튼 클릭 시 회의 메모에 추가

**시나리오 2: 회의 종료 시 전체 안건 요약**
1. 회의 종료 버튼 클릭
2. AI가 전체 STT 텍스트 및 메모를 분석
3. 템플릿 및 메모 항목을 반영하여 주요 안건으로 요약 정리
4. 각 안건별로:
   - AI 한줄 요약 생성 (30자 이내, 편집 불가)
   - AI 상세 요약 생성 (2-3문장, 편집 가능)
5. 회의 종료 화면에 안건별 요약 표시

**입력:**
- STT 변환된 텍스트 (실시간)
- 회의 메모 내용
- 선택된 템플릿 정보
- 회의 종료 이벤트

**출력/결과:**
- 시나리오 1: AI 제안 카드 (실시간), 제안 내용, "메모에 추가" 버튼
- 시나리오 2: 안건별 AI 요약 (한줄 요약 + 상세 요약)
- 참석자에게 실시간 동기화 (WebSocket)

**예외처리:**
- AI 요약 생성 실패: "요약 생성 중 오류가 발생했습니다" 에러 메시지, 기본 템플릿으로 대체
- 네트워크 오류: 재시도 로직 또는 로컬 캐시 사용
- STT 텍스트 없음: 빈 안건 목록 생성

**관련 유저스토리:**
- UFR-STT-020: 텍스트변환
- UFR-MEET-040: 회의종료
- UFR-COLLAB-010: 회의록수정동기화

---

### UFR-AI-020: [Todo자동추출] 회의 참석자로서 | 나는, 회의 후 실행 사항을 명확히 하기 위해 | AI가 안건별 내용에서 Todo 항목을 자동으로 추출하고 기본값을 설정하기를 원한다.

**수행절차:**
1. 회의 종료 시 AI가 각 안건 내용 분석
2. 실행 가능한 항목(Action Item) 감지
3. Todo 추출 및 기본값 설정:
   - 제목: AI가 추출한 실행 항목
   - 담당자 기본값: 회의록 생성자
   - 마감일 기본값: 다음 회의 날짜 OR 오늘 + 7일
   - 우선순위 기본값: 보통
4. Todo 목록 생성
5. Meeting 서비스에 자동 전달
6. 회의 종료 화면에 Todo 목록 표시

**입력:**
- 각 안건의 AI 상세 요약
- 회의 메모 내용
- 회의 기본 정보 (생성자, 다음 회의 날짜)

**출력/결과:**
- 추출된 Todo 목록:
  - 제목, 담당자, 마감일, 우선순위
- Todo 데이터 Meeting 서비스로 전달
- 회의 종료 화면 및 회의록 수정 화면에 표시

**예외처리:**
- Todo 추출 실패: 빈 Todo 목록 생성
- 담당자 식별 실패: 회의록 생성자로 설정
- 마감일 산정 실패: 오늘 + 7일로 설정

**관련 유저스토리:**
- UFR-AI-010: 회의록자동작성
- UFR-TODO-010: Todo할당
- UFR-MEET-040: 회의종료

---

### UFR-AI-030: [실시간AI제안] 회의 참석자로서 | 나는, 회의 중 놓치는 내용을 최소화하기 위해 | AI가 실시간으로 주요 내용을 분석하여 제안하고 싶다.

**수행절차:**
1. 회의 진행 중 STT 텍스트 실시간 수신
2. AI가 발언 내용 분석 (핵심 내용 감지)
3. 주요 내용 감지 시 AI 제안 카드 생성:
   - 제안 제목
   - 제안 내용 (1-2문장)
   - 제안 시각 (타임스탬프)
4. "AI 제안" 탭에 카드 표시
5. 사용자가 "메모에 추가" 버튼 클릭 시:
   - 제안 내용을 회의 메모에 추가
   - "추가되었습니다" 토스트 메시지
   - 카드에서 제거 또는 "추가됨" 표시

**입력:**
- STT 변환 텍스트 (실시간 스트리밍)
- 현재 안건 컨텍스트
- 템플릿 정보

**출력/결과:**
- AI 제안 카드 (실시간):
  - 제목, 내용, 타임스탬프, "메모에 추가" 버튼
- 메모 추가 성공: 회의 메모에 내용 추가, 토스트 메시지
- 모든 참석자에게 실시간 동기화

**예외처리:**
- AI 분석 실패: 제안 생성 중단, 로그 기록
- 네트워크 오류: 로컬 캐시에 제안 저장 후 재전송
- 메모 추가 실패: "메모 추가 중 오류가 발생했습니다" 에러 메시지

**관련 유저스토리:**
- UFR-STT-020: 텍스트변환
- UFR-MEET-030: 회의시작
- UFR-COLLAB-010: 회의록수정동기화

---

### UFR-AI-036: [AI한줄요약] 회의 참석자로서 | 나는, 각 안건의 핵심을 빠르게 파악하기 위해 | AI가 생성한 한줄 요약을 확인하고 필요 시 재생성하고 싶다.

**수행절차:**

**시나리오 1: 자동 생성 (회의 종료 시)**
1. 회의 종료 시 AI가 각 안건별로 한줄 요약 생성
2. 안건 관련 메모 및 STT 텍스트를 분석하여 30자 이내로 핵심 내용 압축
3. 회의 종료 화면에 안건별 한줄 요약 표시 (읽기 전용)

**시나리오 2: 수동 재생성 (회의록 수정 시)**
1. 회의록 수정 화면(11-회의록수정.html)에서 안건별 "AI 요약" 영역 확인
2. 텍스트 편집 영역에서 안건 내용 수정
3. "AI 재생성" 버튼 클릭
4. AI가 수정된 텍스트 편집 영역 내용을 분석하여 한줄 요약 생성 (2-5초 처리)
5. "AI 요약" 영역에 새로운 한줄 요약 표시
6. "재생성되었습니다" 토스트 메시지 표시
7. 재생성된 한줄 요약은 회의록 상세조회 화면의 대시보드 및 회의록 탭에 즉시 반영

**입력:**
- 자동 생성: 안건 관련 메모 및 STT 텍스트
- 재생성: 텍스트 편집 영역의 안건 내용
- 재생성 버튼 클릭 이벤트

**출력/결과:**
- AI 한줄 요약 (30자 이내)
- 회의 종료 화면: 안건별 한줄 요약 (읽기 전용)
- 회의록 수정 화면: "AI 요약" 영역에 한줄 요약 표시 및 재생성 기능
- 회의록 상세조회 화면: 대시보드 및 회의록 탭에 한줄 요약 표시
- 재생성 시: "재생성 중..." 로딩 → 한줄 요약 업데이트 → "재생성되었습니다" 토스트

**예외처리:**
- 한줄 요약 생성 실패: 안건 제목 사용 또는 "요약 없음" 표시
- 30자 초과: 자동 트림 처리
- AI 재생성 실패: "재생성 중 오류가 발생했습니다" 에러 메시지
- 네트워크 오류: 재시도 로직 또는 기존 요약 유지
- 타임아웃: "재생성 시간이 초과되었습니다. 다시 시도해주세요" 안내

**관련 유저스토리:**
- UFR-AI-010: 회의록자동작성
- UFR-MEET-040: 회의종료
- UFR-MEET-055: 회의록수정
- UFR-MEET-047: 회의록상세조회

---

### UFR-AI-040: [관련회의록연결] 회의 참석자로서 | 나는, 이전 회의 내용을 쉽게 참조하기 위해 | AI가 같은 폴더 내 관련 있는 과거 회의록을 자동으로 찾아 연결하고 유사 내용을 요약해주기를 원한다.

**기능 개선 사항 (v2.3.1):**
- **최대 개수**: 5개 → 3개로 축소 (MVP)
- **관련도 표시 방식**: 배지(높음/중간/낮음) → 퍼센트(95%, 78%)로 변경
- **유사 내용 요약 추가** (신규):
  - AI가 추천한 각 회의록에서 현재 회의와 유사한 부분 자동 추출
  - 유사한 내용을 3-5개 문장으로 요약하여 표시
  - 전체 회의록을 열지 않아도 핵심 내용 파악 가능
  - "전체 회의록 보기" 버튼으로 상세 내용 확인
- **성능 최적화**:
  - 과거 회의록 저장 시 요약본 미리 생성 (배치 처리)
  - 실시간 요약은 캐싱된 데이터 활용
  - 성능 목표: 1초 이내 표시

**수행절차:**
1. 회의 종료 시 또는 회의록 작성 중 AI가 현재 회의 내용 분석
2. 벡터 유사도 검색을 통해 관련 회의록 탐색
   - 같은 폴더 내 회의록 우선
   - 키워드, 참석자, 안건 유사도 분석
3. 관련도가 높은 회의록 자동 연결 (최대 3개로 축소)
4. 각 회의록에서 유사한 내용 추출 및 요약 (신규 추가)
5. 회의 진행 화면, 회의 종료 화면, 회의록 수정 화면, 회의록 상세 조회 화면에 표시
6. 사용자가 수동으로 추가/제거 가능

**입력:**
- 현재 회의 내용 (제목, 안건, 키워드, 참석자)
- 과거 회의록 데이터 (벡터 DB)

**출력/결과:**
- 관련 회의록 목록 (최대 3개):
  - 회의록 제목
  - 날짜
  - 관련도 점수 (퍼센트, 예: 95%, 78%)
  - **유사 내용 요약 (3-5개 문장)** ← 신규
  - "전체 회의록 보기" 버튼
  - 회의록 링크
- 회의록 수정 화면: "추가" 버튼, "X" 제거 버튼
- 회의록 상세 조회 화면: 관련회의록 섹션 표시

**예외처리:**
- 관련 회의록 없음: 빈 목록 표시
- 벡터 검색 실패: 최근 회의록 기준 정렬로 대체
- 유사 내용 요약 실패: 회의록 제목과 날짜만 표시
- 네트워크 오류: 로컬 캐시 사용 또는 빈 목록

**관련 유저스토리:**
- UFR-MEET-040: 회의종료
- UFR-MEET-055: 회의록수정
- UFR-MEET-047: 회의록상세조회

---

## STT 서비스

### UFR-STT-010: [음성녹음인식] 회의 참석자로서 | 나는, 발언 내용이 자동으로 기록되기 위해 | 음성이 실시간으로 녹음되고 인식되기를 원한다.

**수행절차:**
1. 회의 시작 시 마이크 권한 요청
2. 사용자 승인 후 녹음 시작
3. 음성 스트림 캡처 (WebRTC)
4. 실시간으로 STT 서비스에 음성 스트림 전송
5. 녹음 상태 시각화:
   - 녹음 중 표시 (빨간 점 애니메이션)
   - 웨이브폼 애니메이션
   - 경과 시간 표시
6. 일시정지/재개 기능 제공
7. 회의 종료 시 녹음 중지

**입력:**
- 마이크 음성 입력
- 녹음 시작/일시정지/재개/중지 이벤트

**출력/결과:**
- 녹음 상태 표시:
  - 녹음 중: 빨간 점 + 웨이브폼 애니메이션 + 경과 시간
  - 일시정지: 일시정지 아이콘 + 경과 시간
- 음성 스트림 STT 서비스로 실시간 전송
- 녹음 파일 저장 (서버)

**예외처리:**
- 마이크 권한 거부: "마이크 권한이 필요합니다" 에러 메시지, 회의 시작 불가
- 마이크 장치 없음: "마이크 장치를 찾을 수 없습니다" 에러 메시지
- 녹음 중 오류: "녹음 중 오류가 발생했습니다" 에러 메시지, 재시도 옵션
- 네트워크 끊김: 로컬 버퍼에 저장 후 재연결 시 전송

**관련 유저스토리:**
- UFR-MEET-030: 회의시작
- UFR-STT-020: 텍스트변환

---

### UFR-STT-020: [텍스트변환] 회의록 시스템으로서 | 나는, 인식된 발언을 회의록에 기록하기 위해 | 음성을 텍스트로 변환하고 싶다.

**수행절차:**
1. STT 서비스가 음성 스트림 실시간 수신
2. 음성을 텍스트로 변환 (STT 엔진)
3. 변환된 텍스트를 타임스탬프와 함께 저장
4. AI 서비스에 텍스트 전달 (실시간 분석용)
5. 화자 분리 (가능 시)
6. 텍스트 누적 저장 (전체 회의 내용)

**입력:**
- 음성 스트림 (실시간)
- 회의 ID, 화자 정보 (옵션)

**출력/결과:**
- 변환된 텍스트 (실시간):
  - 텍스트 내용
  - 타임스탬프
  - 화자 정보 (옵션)
- AI 서비스로 텍스트 전달
- 전체 회의 텍스트 누적 저장

**예외처리:**
- 변환 실패: 해당 구간 건너뛰기, 로그 기록
- 네트워크 오류: 로컬 버퍼에 저장 후 재전송
- 인식 불가 음성: "[인식 불가]" 표시

**관련 유저스토리:**
- UFR-STT-010: 음성녹음인식
- UFR-AI-010: 회의록자동작성
- UFR-AI-030: 실시간AI제안

---

## RAG 서비스 (AI 서비스에 통합)

### UFR-RAG-010: [전문용어감지] 회의 참석자로서 | 나는, 업무 지식이 없어도 회의록을 정확히 작성하기 위해 | 전문용어가 자동으로 감지되고 맥락에 맞는 설명을 제공받고 싶다.

**수행절차:**
1. 회의 진행 중 STT 텍스트에서 전문용어 자동 감지
   - 사전 정의된 전문용어 사전 매칭
   - 빈도 기반 주요 용어 추출
2. 감지된 용어를 "용어사전" 탭에 자동 추가
3. 용어 목록 표시 (알파벳/가나다 순 정렬)
4. 검색 기능 제공 (용어 하이라이트)
5. 용어 클릭 시 맥락 기반 설명 표시

**입력:**
- STT 변환 텍스트 (실시간)
- 전문용어 사전
- 과거 회의록 및 사내 문서 (RAG)

**출력/결과:**
- 용어사전 탭:
  - 자동 추출된 용어 목록
  - 검색 입력 필드
  - 용어 하이라이트
- 용어 클릭 시:
  - 용어 설명 모달 또는 패널
  - 맥락 기반 설명 (RAG-020 연동)
  - 관련 회의록 링크

**예외처리:**
- 용어 감지 실패: 빈 용어 목록 표시
- 검색 결과 없음: "검색 결과가 없습니다" 안내

**관련 유저스토리:**
- UFR-STT-020: 텍스트변환
- UFR-RAG-020: 맥락기반용어설명
- UFR-MEET-030: 회의시작

---

### UFR-RAG-020: [맥락기반용어설명] 회의 참석자로서 | 나는, 전문용어를 맥락에 맞게 이해하기 위해 | 관련 회의록과 업무 이력을 바탕으로 실용적인 설명을 제공받고 싶다.

**수행절차:**
1. 사용자가 용어사전 탭에서 용어 클릭
2. RAG 시스템이 다음 정보 검색:
   - 과거 회의록에서 해당 용어 사용 맥락
   - 사내 문서에서 용어 정의 및 설명
   - 업무 이력에서 관련 프로젝트 정보
3. LLM이 검색된 정보를 기반으로 실용적인 설명 생성:
   - 용어 정의
   - 현재 회의 맥락에서의 의미
   - 관련 회의록 링크
   - 추가 참고 자료
4. 설명 모달 또는 패널에 표시

**입력:**
- 선택된 용어
- 현재 회의 컨텍스트
- 과거 회의록 (벡터 DB)
- 사내 문서 (벡터 DB)

**출력/결과:**
- 용어 설명 패널:
  - 용어 정의 (간단 명료)
  - 맥락 기반 설명 (현재 회의와 관련)
  - 관련 회의록 링크 (최대 3개)
  - 추가 참고 자료 링크
- "관련 회의록 보기" 버튼: 회의록 상세 조회 화면으로 이동

**예외처리:**
- 관련 정보 없음: "관련 정보를 찾을 수 없습니다" 안내, 기본 사전 정의 표시
- RAG 검색 실패: 기본 용어 사전 정의로 대체
- 네트워크 오류: 캐시된 설명 표시 또는 "설명을 불러올 수 없습니다" 안내

**관련 유저스토리:**
- UFR-RAG-010: 전문용어감지
- UFR-AI-040: 관련회의록연결
- UFR-MEET-030: 회의시작

---

## COLLAB 서비스 (Meeting 서비스에 통합)

### UFR-COLLAB-010: [회의록수정동기화] 회의 참석자로서 | 나는, 회의록을 함께 검증하기 위해 | 회의록을 수정하고 실시간으로 다른 참석자와 동기화하고 싶다.

**수행절차:**
1. 회의록 수정 화면 진입 시 WebSocket 연결
2. 사용자가 안건 또는 필드 편집 시작
3. 편집 중 상태를 다른 참석자에게 실시간 브로드캐스트:
   - 편집 중인 안건 ID
   - 편집자 이름 및 아바타
   - 편집 시작 시각
4. 다른 참석자 화면에 "편집 중" 표시:
   - 안건 카드에 편집자 이름 및 아이콘 표시
5. 편집 완료 시 변경 내용 저장 및 동기화
6. 모든 참석자 화면 자동 업데이트
7. 30초마다 자동 저장

**입력:**
- 편집 시작/종료 이벤트
- 변경된 필드 및 값
- 편집자 정보

**출력/결과:**
- 편집 중 표시:
  - 안건 카드 상단: "{이름}님이 편집 중입니다" + 아바타
  - 편집 중인 필드 하이라이트
- 변경 내용 실시간 동기화:
  - WebSocket을 통한 브로드캐스트
  - 모든 참석자 화면 자동 업데이트
- 저장 상태 표시: "저장 중...", "저장됨"

**예외처리:**
- WebSocket 연결 끊김: 재연결 시도, "연결이 끊어졌습니다" 안내
- 동기화 실패: "동기화 중 오류가 발생했습니다" 에러 메시지, 재시도 옵션
- 네트워크 지연: 로컬 변경 우선 적용, 충돌 시 UFR-COLLAB-020 처리

**관련 유저스토리:**
- UFR-MEET-055: 회의록수정
- UFR-COLLAB-020: 충돌해결

---

### UFR-COLLAB-020: [충돌해결] 회의 참석자로서 | 나는, 동시 수정 상황에서도 내용을 잃지 않기 위해 | 안건별로 충돌 없이 편집하고 싶다.

**수행절차:**

**안건 기반 충돌 방지 메커니즘:**
1. **다른 안건 동시 편집**: 충돌 없음
   - 참석자 A가 안건 1 편집
   - 참석자 B가 안건 2 편집
   - 양쪽 모두 정상 저장 및 동기화

2. **동일 안건 내 다른 필드 편집**: 자동 병합
   - 참석자 A가 안건 1의 "상세 요약" 편집
   - 참석자 B가 안건 1의 "관련회의록" 편집
   - 양쪽 변경 사항 자동 병합

3. **동일 필드 동시 수정**: Last Write Wins
   - 참석자 A와 B가 동시에 안건 1의 "상세 요약" 편집
   - 마지막에 저장된 변경 사항이 적용
   - 덮어쓰기 경고: "다른 사용자가 이미 수정했습니다. 최신 내용을 확인하세요"

4. **편집 중 안건 표시**:
   - 다른 사용자가 편집 중인 안건: 편집자 이름 및 아이콘 실시간 표시
   - 편집 시작 시 해당 안건에 "편집 중" 표시 브로드캐스트

**입력:**
- 동시 편집 이벤트
- 안건 ID, 필드 ID
- 편집자 정보
- 변경 내용 및 타임스탬프

**출력/결과:**
- 충돌 방지:
  - 안건 단위 독립 편집
  - 다른 필드 자동 병합
- 충돌 발생 시:
  - 경고 모달: "다른 사용자가 이미 수정했습니다"
  - 선택 옵션: 최신 내용 확인 / 내 변경 사항 유지
- 편집 중 표시: "{이름}님이 이 안건을 편집 중입니다" + 아바타

**예외처리:**
- 동일 필드 충돌: Last Write Wins, 경고 표시
- 병합 실패: "병합 중 오류가 발생했습니다" 에러 메시지, 수동 병합 요청
- 네트워크 지연으로 충돌 감지 실패: 서버 측에서 최종 검증 및 조정

**관련 유저스토리:**
- UFR-COLLAB-010: 회의록수정동기화
- UFR-MEET-055: 회의록수정

---

### UFR-COLLAB-030: [검증완료] 회의 참석자로서 | 나는, 회의록의 정확성을 보장하기 위해 | 각 안건을 검증하고 완료 표시를 하고 싶다.

**수행절차:**
1. 회의록 수정 화면에서 각 안건 검토
2. 안건 내용 확인 및 수정 (필요 시)
3. "검증 완료" 토글 클릭
4. 토글 활성화 → 안건 잠금:
   - 잠금 아이콘 표시
   - 해당 안건 편집 불가 (읽기 전용)
   - 회의 생성자만 잠금 해제 가능
5. 검증완료율 업데이트:
   - 검증 완료된 안건 수 / 전체 안건 수
6. 모든 안건 검증 완료 시:
   - 검증완료율 100%
   - "최종 확정" 버튼 활성화

**검증 완료 섹션 편집 정책:**
- **참석자**: 검증 완료된 섹션 편집 불가 (읽기 전용)
- **회의 생성자**: 잠금 해제 후 편집 가능
  - 잠금 아이콘 클릭
  - 확인 모달: "잠금 해제하시겠습니까?"
  - 승인 시 토글 비활성화 → 편집 가능

**입력:**
- 검증 완료 토글 클릭
- 잠금 해제 버튼 클릭 (회의 생성자만)

**출력/결과:**
- 검증 완료: 잠금 아이콘 표시, 안건 읽기 전용
- 검증완료율: "검증 완료 {n}개 / 전체 {m}개 ({percentage}%)"
- 100% 완료 시: "최종 확정" 버튼 활성화
- 잠금 해제 (생성자): 토글 비활성화, 편집 가능

**예외처리:**
- 참석자가 잠금 해제 시도: "회의 생성자만 잠금 해제할 수 있습니다" 안내
- 네트워크 오류: "검증 상태 변경 중 오류가 발생했습니다" 에러 메시지

**관련 유저스토리:**
- UFR-MEET-055: 회의록수정
- UFR-MEET-050: 최종확정

---

## NOTIFICATION 서비스 (신규)

### UFR-NOTI-010: [알림발송] Notification 시스템으로서 | 나는, 사용자에게 중요한 이벤트를 알리기 위해 | 주기적으로 알림 대상을 확인하여 이메일을 발송하고 싶다.

**수행절차:**
1. **알림 대상 생성 (각 서비스에서)**:
   - 알림이 필요한 이벤트 발생 시 Notification 테이블에 레코드 추가
   - 알림 유형, 수신자, 제목, 내용, 발송 예정 시각, 발송 상태

2. **알림 대상 폴링 (Notification 서비스)**:
   - 주기적으로 (예: 1분마다) Notification 테이블 조회
   - 조건: 발송 상태 = "대기", 발송 예정 시각 ≤ 현재 시각

3. **이메일 발송**:
   - 조회된 알림 대상에 대해 이메일 발송
   - 이메일 템플릿 적용 (알림 유형별)
   - 발송 성공 시 발송 상태 = "발송 완료", 발송 시각 기록
   - 발송 실패 시 재시도 횟수 증가, 최대 3회 재시도

4. **알림 유형 및 트리거**:
   - **회의 시작 알림**: 회의 시작 10분 전 참석자에게 알림
   - **회의록 확정**: 회의록 최종 확정 시 모든 참석자에게 알림
   - **참석자 초대**: 회의 중 참석자 초대 시 신규 참석자에게 알림
   - **회의록 수정 알림**: 확정 후 회의록 수정 시 모든 참석자에게 알림 (옵션)

**입력:**
- Notification 테이블 레코드:
  - 알림 유형, 수신자 이메일, 제목, 내용, 발송 예정 시각, 발송 상태

**출력/결과:**
- 이메일 발송:
  - 수신자: 알림 대상의 수신자 이메일
  - 제목: 알림 제목
  - 본문: 알림 내용 (HTML 템플릿 적용)
- 발송 상태 업데이트:
  - 발송 완료: 상태 = "발송 완료", 발송 시각 기록
  - 발송 실패: 재시도 횟수 증가, 상태 = "발송 대기" (재시도) 또는 "발송 실패" (최대 재시도 초과)

**예외처리:**
- 이메일 발송 실패: 재시도 횟수 증가, 최대 3회 재시도
- 3회 재시도 실패: 발송 상태 = "발송 실패", 로그 기록
- 수신자 이메일 없음: 발송 상태 = "수신자 없음", 로그 기록
- 네트워크 오류: 다음 폴링 주기에 재시도

**알림 유형별 템플릿 예시:**

**회의 시작 알림**
- 제목: "[회의록] 10분 후 회의가 시작됩니다"
- 내용: "{참석자}님, {회의 제목} 회의가 10분 후 시작됩니다.\n- 일시: {날짜} {시간}\n- 장소: {장소}\n\n회의 참여하기: {회의 링크}"

**회의록 확정**
- 제목: "[회의록] 회의록이 최종 확정되었습니다"
- 내용: "{참석자}님, {회의 제목} 회의록이 최종 확정되었습니다.\n\n회의록 보기: {회의록 링크}"

**관련 유저스토리:**
- UFR-TODO-010: Todo할당
- UFR-TODO-030: Todo완료처리
- UFR-MEET-015: 참석자 실시간 초대
- UFR-MEET-050: 최종확정

---

# MVP 개선 사항 (v2.3.1)

## 회의 참석자 권한 및 기능 단순화

### UFR-PART-010: [회의입장] 회의 참석자로서 | 나는, 예정된 회의에 참여하기 위해 | 대시보드에서 "참여하기" 버튼으로 회의에 입장하고 싶다.

**수행절차:**
1. 대시보드에서 진행 중 또는 예정된 회의 확인
2. "참여하기" 버튼 클릭
3. 회의진행 화면으로 페이지 전환 (같은 탭)
4. 회의 참석자로 입장 완료

**입력:**
- 회의 ID
- 사용자 ID

**출력/결과:**
- 회의진행 화면 표시
- 참석자 목록에 추가

**예외처리:**
- 회의 종료됨: "이미 종료된 회의입니다" 안내
- 권한 없음: "참석 권한이 없습니다" 안내

**관련 유저스토리:**
- UFR-MEET-030: 회의시작

---

### UFR-PART-020: [AI기반메모작성] 회의 참석자로서 | 나는, 중요한 내용을 메모로 기록하기 위해 | AI가 추천한 주요 내용을 메모 입력창에 추가하고 편집하고 싶다.

**수행절차:**
1. 회의 진행 중 AI가 실시간으로 주요 내용 감지 및 분석
2. "AI 제안" 탭 하단에 "AI가 감지한 주요 내용" 리스트로 표시
   - 각 항목: "[시간] 주요 내용 텍스트" 형식
   - 예: "[15:32] 예산 책정 관련 결정", "[15:35] 다음 회의 일정 합의"
3. 참석자가 리스트 항목 선택 시:
   - 메모 입력창에 시간과 함께 자동 입력
   - 입력된 메모는 수정 가능 (자동/수동 구분 표시)
4. "저장" 버튼 클릭 시 개인 메모로 저장
   - 각 참석자별로 개별 저장
   - 다른 참석자의 메모는 볼 수 없음
5. 회의 종료 시 AI가 회의록 생성할 때 모든 참석자의 메모 참조
6. 메모는 회의 종료 전까지만 표시 및 편집 가능

**입력:**
- 회의 ID
- AI가 실시간 감지한 주요 내용
- 참석자가 선택하거나 직접 입력한 메모 텍스트

**출력/결과:**
- 메모 입력창: 시간 포함 메모 텍스트
- AI 추천 리스트: 실시간 업데이트되는 주요 내용 항목들
- 저장된 개인 메모: 참석자별 개별 저장
- AI 회의록 생성 시: 모든 참석자의 메모 참조하여 요약 생성

**예외처리:**
- AI 감지 실패: 빈 리스트 표시, 수동 메모 작성은 가능
- 저장 실패: "메모 저장 중 오류가 발생했습니다" 에러 메시지, 로컬 임시 저장
- 회의 종료 후: 메모 조회/편집 불가

**관련 유저스토리:**
- UFR-AI-030: 실시간 AI 제안
- UFR-AI-010: 회의록자동작성 (메모 참조)
- UFR-MEET-040: 회의종료

---

### UFR-PART-030: [회의중도퇴장] 회의 참석자로서 | 나는, 회의를 중간에 나가야 할 때 | "나가기" 버튼으로 회의에서 퇴장하고 싶다.

**수행절차:**
1. 회의진행 화면 상단 "나가기" 버튼 클릭
2. 확인 모달 표시: "회의에서 나가시겠습니까? 회의는 계속 진행됩니다"
3. 확인 클릭 시 퇴장 이벤트 서버 전송
4. 대시보드로 페이지 전환

**입력:**
- 회의 ID
- 사용자 ID

**출력/결과:**
- 대시보드 화면으로 복귀
- 회의록은 종료 시 공유됨

**예외처리:**
- 네트워크 오류: 로컬 처리 후 재시도

**관련 유저스토리:**
- UFR-MEET-030: 회의시작

---

## 회의 생성자 전용 기능

### UFR-HOST-010: [회의종료권한] 회의 생성자로서 | 나는, 회의를 마무리하기 위해 | "회의 종료" 버튼으로만 회의를 종료하고 싶다.

**수행절차:**
1. 회의진행 화면에서 "회의 종료" 버튼은 생성자에게만 표시
2. 일반 참석자에게는 버튼 숨김 처리
3. 생성자가 "회의 종료" 클릭 시 회의 종료 프로세스 진행

**입력:**
- 회의 ID
- 사용자 ID (생성자 여부 확인)

**출력/결과:**
- 생성자: 회의 종료 버튼 표시 및 동작
- 일반 참석자: 버튼 숨김

**예외처리:**
- 권한 없음: 버튼 미표시

**관련 유저스토리:**
- UFR-MEET-040: 회의종료

---

### UFR-HOST-020: [녹음제어권한] 회의 생성자로서 | 나는, 녹음을 관리하기 위해 | 녹음 일시정지/재개/종료 권한을 가지고 싶다.

**수행절차:**
1. 회의진행 화면에서 녹음 제어 버튼은 생성자에게만 표시
2. 일반 참석자에게는 버튼 숨김 처리

**입력:**
- 회의 ID
- 사용자 ID (생성자 여부 확인)

**출력/결과:**
- 생성자: 녹음 제어 버튼 표시 및 동작
- 일반 참석자: 버튼 숨김

**예외처리:**
- 권한 없음: 버튼 미표시

**관련 유저스토리:**
- UFR-STT-010: 음성녹음인식

---

## 용어 설명 기능 (MVP 단순화)

### UFR-TERM-010: [용어자동감지] 회의 참석자로서 | 나는, 전문용어를 이해하기 위해 | AI가 자동으로 감지한 용어를 "용어" 탭에서 확인하고 싶다.

**수행절차:**
1. AI가 STT 분석 중 중요 용어 자동 감지
2. "용어" 탭에 실시간으로 표시
3. 용어 항목 클릭 시 상세 설명 모달 표시

**입력:**
- STT 텍스트
- 회사 용어 사전 (JSON)

**출력/결과:**
- 용어 목록 표시
- 회사 용어는 ⭐ 배지 표시

**예외처리:**
- 용어 감지 실패: 빈 목록 표시

**관련 유저스토리:**
- UFR-RAG-010: 전문용어감지 (기존 기능 유지)

---

### UFR-TERM-020: [회사용어사전] 회의 참석자로서 | 나는, 회사 특화 용어를 정확히 이해하기 위해 | 회사 용어 사전에 등록된 용어를 우선 표시받고 싶다.

**수행절차:**
1. 용어 감지 시 회사 용어 사전(JSON) 먼저 확인
2. 사전에 있으면 회사 특화 설명 + ⭐ 표시
3. 사전에 없으면 AI가 일반 설명 + 회의 맥락 제공

**입력:**
- 용어
- 회사 용어 사전 (terms-dictionary.json)
- 회의 맥락

**출력/결과:**
- 회사 용어: 정의 + 맥락 + ⭐
- 일반 용어: AI 설명

**예외처리:**
- 사전 로드 실패: AI 설명으로 대체

**관련 유저스토리:**
- UFR-RAG-020: 맥락기반용어설명 (기존 기능 유지)

---

### UFR-TERM-030: [용어관리] 관리자로서 | 나는, 회사 특화 용어를 관리하기 위해 | 용어 사전을 등록/수정하고 싶다.

**수행절차:**
1. 관리자 페이지에서 용어 사전 관리
2. JSON 파일 직접 편집 또는 관리 UI 사용
3. 용어 추가/수정/삭제

**입력:**
- 용어명
- 정의
- 맥락
- 카테고리

**출력/결과:**
- terms-dictionary.json 업데이트

**예외처리:**
- 권한 없음: "관리자 권한이 필요합니다" 안내

---

## 기존 유저스토리 수정

### UFR-MEET-040 수정 (회의종료권한)
**기존**: "회의 생성자 또는 참석자가 회의 종료 버튼을 눌러 회의를 종료한다"
**변경**: "회의 생성자만 '회의 종료' 버튼으로 회의를 종료할 수 있다"
**적용 위치**: [UFR-MEET-040: 회의종료](#ufr-meet-040-회의종료)

---

### UFR-MEET-030 개선 (회의 진입 경로)
**변경**: 대시보드에서 회의 진행 화면 진입 경로 명확화
- **경로 1**: 대시보드 → "바로시작" FAB 버튼 → 템플릿 선택 → 회의 진행
- **경로 2**: 대시보드 → 진행 중 회의 "참여하기" 버튼 → 회의 진행
**적용 위치**: [UFR-MEET-030: 회의시작](#ufr-meet-030-회의시작)

---

### UFR-AI-040 개선 (관련회의록연결)

**변경 및 개선 사항**:
1. **최대 개수**: 5개 → 3개로 축소 (MVP)
2. **관련도 표시 방식**: 배지(높음/중간/낮음) → 퍼센트(95%, 78%)로 변경
3. **유사 내용 요약 추가** (신규):
   - AI가 추천한 각 회의록에서 현재 회의와 유사한 부분 자동 추출
   - 유사한 내용을 3-5개 문장으로 요약하여 표시
   - 전체 회의록을 열지 않아도 핵심 내용 파악 가능
   - "전체 회의록 보기" 버튼으로 상세 내용 확인
4. **성능 최적화**:
   - 과거 회의록 저장 시 요약본 미리 생성 (배치 처리)
   - 실시간 요약은 캐싱된 데이터 활용
   - 성능 목표: 1초 이내 표시

**적용 위치**: [UFR-AI-040: 관련회의록연결](#ufr-ai-040-관련회의록연결)

---

## 문서 이력

| 버전 | 날짜 | 작성자 | 변경 내용 |
|------|------|--------|-----------|
| v2.4.1 | 2025-10-27 | 팀 전체 | • UFR-MEET-047 개선: Todo 추가/편집 권한 정책 명확화<br>&nbsp;&nbsp;- Todo 추가: 모든 회의 참석자 가능 ("추가" 버튼 모든 참석자에게 노출)<br>&nbsp;&nbsp;- Todo 편집: 회의 생성자만 가능 (편집 버튼은 생성자에게만 노출)<br>&nbsp;&nbsp;- Todo 추가 모달: 제목, 담당자, 마감일 입력 (모든 참석자)<br>&nbsp;&nbsp;- Todo 편집 모달: 제목, 담당자, 마감일 수정 (생성자만, 바텀시트 스타일)<br>• 프로토타입 UI 개선: 10-회의록상세조회.html<br>&nbsp;&nbsp;- Todo 추가 모달과 편집 모달 바텀시트 스타일 통일<br>&nbsp;&nbsp;- 편집 버튼에 creator-only 클래스 적용하여 권한별 표시/숨김 처리 |
| v2.4.0 | 2025-10-27 | 팀 전체 | • MVP 스코프 축소: Todo 관리 기능 제거<br>• AI 요약 기능 통합 및 단순화<br>• UFR-USER-020 수정: 대시보드에서 "나의 Todo" 제거, "작성중 회의록" 추가<br>• UFR-PART-020 변경: AI주요내용체크 → AI기반메모작성 (메모 입력창 + AI 추천)<br>• UFR-AI-010 개선: 회의록 생성 시 참석자 메모 참조<br>• UFR-MEET-055 개선: 회의록 수정 시 실시간 협업 제거, 검증완료 체크로 보호<br>&nbsp;&nbsp;- 프로토타입 UI 개선: 안건별 검증완료 UI 단순화 (참석자: 체크박스만, 생성자: 검증완료 시 잠금해제 버튼)<br>• TODO 서비스 전체 제거 (UFR-TODO-010/030/040)<br>• NOTIFICATION 서비스: Todo 관련 알림 제거<br>• 네비게이션 간소화: Todo 관리 메뉴 제거 (대시보드, 회의록만 유지)<br>• UFR-MEET-030 개선: AI 제안 탭 내 개인 메모 작성 기능 명확화 (수동 저장만), 하단 고정 버튼 역할별 차별화 (생성자: 일시정지/재개+종료, 참석자: 나가기)<br>• UFR-AI-035 삭제: 섹션AI요약 제거 (중복 기능)<br>• UFR-AI-036 개선: AI 한줄요약 확인 및 재생성 기능 통합<br>&nbsp;&nbsp;- 회의 종료 시: 자동 생성 (읽기 전용)<br>&nbsp;&nbsp;- 회의록 수정 시: 텍스트 편집 영역 내용 기반 재생성 기능 추가<br>&nbsp;&nbsp;- "AI 상세요약" → "AI 요약"으로 명칭 변경<br>&nbsp;&nbsp;- 회의록 상세조회 화면의 대시보드 및 회의록 탭에 한줄요약 표시<br>&nbsp;&nbsp;- 프로토타입 UI 개선: AI 재생성 버튼 스타일 통일 (btn-secondary → btn-primary)<br>• UFR-COLLAB-030 개선: 안건 기반 충돌 방지 메커니즘 (검증완료 체크로 보호)|
| v2.3.1 | 2025-10-27 | 팀 전체 | • MVP 개선: 회의 참석자 권한 단순화<br>• 신규 유저스토리: UFR-PART-010/020/030 (참석자 공통), UFR-HOST-010/020 (생성자 전용)<br>• 신규 유저스토리: UFR-TERM-010/020/030 (용어 기능 MVP 단순화)<br>• UFR-MEET-040 수정: 회의 종료 권한 생성자 전용으로 명확화<br>• UFR-MEET-030 개선: 회의 진입 경로 2가지 명시 (바로시작, 참여하기)<br>• UFR-AI-040 개선: 관련 회의록 유사 내용 요약 추가 (최대 3개, 퍼센트 표시, 3-5문장 요약)<br>• 메모 기능 단순화: 체크박스 방식으로 변경<br>• 용어 설명 단순화: JSON 용어 사전 방식 도입 |
| v2.3.0 | 2025-10-24 | 이미준 | • 프로토타입 분석을 통한 유저스토리 전면 재정비<br>• 신규 유저스토리 추가: UFR-MEET-015 (참석자 실시간 초대), UFR-NOTI-010 (알림 발송)<br>• 알림 아키텍처 폴링 방식으로 통일 (실시간 발송 → 주기적 폴링)<br>• 10개 프로토타입 화면 반영 완료<br>• 마이크로서비스 구성 재정의 (User, Meeting, STT, AI, Notification)<br>• 기존 24개 유저스토리 ID 승계 및 정리 |
| v2.2.0 | 2025-10-23 | 이미준 | 이전 버전 |
