# 회의종료 기능 개발 계획 ## 📋 개요 회의가 종료되면 모든 참석자의 회의록을 수집하여 Claude AI가 통합 요약하고 Todo를 자동 추출하는 기능 ## 🎯 핵심 기능 1. **참석자별 회의록 통합**: 모든 참석자가 작성한 회의록을 DB에서 조회 2. **AI 통합 요약**: Claude AI가 안건별로 요약 및 구조화 3. **Todo 자동 추출**: AI가 회의록에서 액션 아이템 자동 추출 4. **통계 생성**: 참석자 수, 회의 시간, 안건 수, Todo 수 통계 --- ## 🗄️ 데이터베이스 스키마 설계 ### 1. minutes (회의록 테이블) - 확장 ```sql -- 기존 테이블 확장 ALTER TABLE minutes ADD COLUMN user_id VARCHAR(50); -- 작성자 ID ALTER TABLE minutes ADD COLUMN is_consolidated BOOLEAN DEFAULT FALSE; -- 통합 회의록 여부 ALTER TABLE minutes ADD COLUMN consolidated_by VARCHAR(255); -- 통합 처리자 (AI) -- 인덱스 추가 CREATE INDEX idx_minutes_meeting_user ON minutes(meeting_id, user_id); CREATE INDEX idx_minutes_consolidated ON minutes(is_consolidated); ``` ### 2. agenda_sections (안건별 섹션 테이블) - 신규 ```sql CREATE TABLE agenda_sections ( id VARCHAR(36) PRIMARY KEY, minutes_id VARCHAR(36) NOT NULL, meeting_id VARCHAR(36) NOT NULL, agenda_number INT NOT NULL, -- 안건 번호 (1, 2, 3...) agenda_title VARCHAR(200) NOT NULL, -- 안건 제목 -- AI 요약 결과 ai_summary_short TEXT, -- 짧은 요약 (1줄) discussion TEXT, -- 논의 사항 decisions JSON, -- 결정 사항 배열 pending_items JSON, -- 보류 사항 배열 opinions JSON, -- 참석자별 의견 배열 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (minutes_id) REFERENCES minutes(id) ON DELETE CASCADE, FOREIGN KEY (meeting_id) REFERENCES meetings(id) ON DELETE CASCADE, INDEX idx_sections_meeting (meeting_id), INDEX idx_sections_agenda (meeting_id, agenda_number) ); ``` ### 3. ai_summaries (AI 요약 결과 캐시) - 신규 ```sql CREATE TABLE ai_summaries ( id VARCHAR(36) PRIMARY KEY, meeting_id VARCHAR(36) NOT NULL, summary_type VARCHAR(50) NOT NULL, -- 'CONSOLIDATED', 'TODO_EXTRACTION' -- 입력 정보 source_minutes_ids JSON NOT NULL, -- 통합에 사용된 회의록 ID 배열 -- AI 처리 결과 result JSON NOT NULL, -- AI 응답 전체 결과 processing_time_ms INT, -- 처리 시간 (밀리초) model_version VARCHAR(50), -- 사용한 AI 모델 버전 -- 통계 keywords JSON, -- 주요 키워드 배열 statistics JSON, -- 통계 정보 (참석자 수, 안건 수 등) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (meeting_id) REFERENCES meetings(id) ON DELETE CASCADE, INDEX idx_summaries_meeting (meeting_id), INDEX idx_summaries_type (meeting_id, summary_type) ); ``` ### 4. todos (Todo 테이블) - 확장 ```sql -- 기존 테이블 확장 ALTER TABLE todos ADD COLUMN extracted_by VARCHAR(50) DEFAULT 'AI'; -- 'AI' 또는 'MANUAL' ALTER TABLE todos ADD COLUMN section_reference VARCHAR(200); -- 관련 안건 참조 ALTER TABLE todos ADD COLUMN extraction_confidence DECIMAL(3,2); -- AI 추출 신뢰도 (0.00~1.00) -- 인덱스 추가 CREATE INDEX idx_todos_extracted ON todos(extracted_by); CREATE INDEX idx_todos_meeting ON todos(meeting_id); ``` --- ## 🔌 API 설계 ### Meeting Service API #### 1. 참석자별 회의록 조회 ```yaml GET /meetings/{meetingId}/minutes/by-participants Response: participantMinutes: - userId: "user1" userName: "김민준" minutesId: "uuid" content: "회의록 내용..." status: "DRAFT" - userId: "user2" userName: "박서연" ... ``` #### 2. 안건별 섹션 조회 ```yaml GET /meetings/{meetingId}/agenda-sections Response: sections: - agendaNumber: 1 agendaTitle: "신제품 기획 방향성" aiSummaryShort: "타겟 고객을 20-30대로 설정..." discussions: "..." decisions: [...] todos: [...] ``` #### 3. 회의 통계 조회 ```yaml GET /meetings/{meetingId}/statistics Response: participantsCount: 4 durationMinutes: 90 agendasCount: 3 todosCount: 5 keywords: ["신제품기획", "예산편성", ...] ``` ### AI Service API #### 1. 통합 회의록 요약 API (신규) ```yaml POST /transcripts/consolidate Request: meetingId: "uuid" participantMinutes: - userId: "user1" content: "회의록 내용..." - userId: "user2" content: "회의록 내용..." agendas: - number: 1 title: "신제품 기획 방향성" Response: consolidatedMinutesId: "uuid" agendaSections: - agendaNumber: 1 aiSummaryShort: "타겟 고객을 20-30대로 설정..." discussions: "..." decisions: [...] pendingItems: [...] keywords: ["신제품기획", "예산편성"] processingTimeMs: 3500 ``` #### 2. Todo 자동 추출 API (기존) ```yaml POST /todos/extract Request: meetingId: "uuid" minutesContent: "통합된 회의록 전체 내용..." Response: todos: - content: "시장 조사 보고서 작성" assignee: "김민준" dueDate: "2025-11-01" priority: "HIGH" sectionReference: "안건 1" confidence: 0.92 ``` --- ## 🤖 Claude AI 프롬프트 설계 ### 1. 통합 회의록 요약 프롬프트 ``` 당신은 회의록 통합 전문가입니다. 입력: - 회의 제목: {meetingTitle} - 안건 목록: {agendas} - 참석자별 회의록: * {userName1}: {content1} * {userName2}: {content2} ... 작업: 각 안건별로 다음을 생성하세요: 1. 짧은 요약 (1줄, 20자 이내) 2. 논의 사항 (핵심 내용 3-5문장) 3. 결정 사항 (배열 형태) 4. 보류 사항 (배열 형태) 5. 참석자별 의견 (speaker, opinion) 출력 형식 (JSON): { "agendaSections": [ { "agendaNumber": 1, "aiSummaryShort": "...", "discussions": "...", "decisions": ["결정1", "결정2"], "pendingItems": ["보류1"], "opinions": [ {"speaker": "김민준", "opinion": "..."} ] } ], "keywords": ["키워드1", "키워드2", ...] } ``` ### 2. Todo 자동 추출 프롬프트 ``` 당신은 Todo 추출 전문가입니다. 입력: - 회의록 전체 내용: {minutesContent} - 참석자 목록: {participants} 작업: 회의록에서 액션 아이템(Todo)을 추출하세요. - "~하기로 함", "~가 작성", "~까지 완료" 등의 패턴 탐지 - 담당자와 마감일 식별 - 우선순위 판단 (HIGH/MEDIUM/LOW) 출력 형식 (JSON): { "todos": [ { "content": "시장 조사 보고서 작성", "assignee": "김민준", "dueDate": "2025-11-01", "priority": "HIGH", "sectionReference": "안건 1", "confidence": 0.92 } ] } ``` --- ## 🔄 통합 플로우 ### 회의 종료 처리 시퀀스 ``` 1. 사용자가 "회의 종료" 버튼 클릭 ↓ 2. Meeting Service: 회의 상태를 'ENDED'로 변경 ↓ 3. Meeting Service: 모든 참석자의 회의록 조회 (GET /meetings/{meetingId}/minutes/by-participants) ↓ 4. AI Service 호출: 통합 요약 요청 (POST /transcripts/consolidate) ↓ 5. Claude AI: 안건별 요약 및 구조화 ↓ 6. AI Service: agenda_sections 테이블에 저장 ↓ 7. AI Service 호출: Todo 자동 추출 (POST /todos/extract) ↓ 8. Claude AI: Todo 추출 및 담당자 식별 ↓ 9. Meeting Service: todos 테이블에 저장 ↓ 10. Meeting Service: ai_summaries 테이블에 캐시 저장 ↓ 11. 프론트엔드: 07-회의종료.html 화면 렌더링 ``` --- ## 📊 성능 고려사항 ### 1. 처리 시간 목표 - AI 통합 요약: 3-5초 이내 - Todo 추출: 2-3초 이내 - 전체 회의 종료 처리: 10초 이내 ### 2. 최적화 방안 - **병렬 처리**: 통합 요약과 Todo 추출을 병렬로 실행 - **캐싱**: ai_summaries 테이블에 결과 캐싱 (재조회 시 0.5초 이내) - **비동기 처리**: 회의 종료 후 백그라운드에서 AI 처리 - **진행 상태 표시**: WebSocket으로 실시간 진행률 전달 ### 3. 대용량 처리 - 10명 이상 참석자: 회의록을 청크 단위로 분할 처리 - 긴 회의 (2시간 이상): 안건별 병렬 처리 --- ## 🧪 테스트 시나리오 ### 1. 단위 테스트 - [ ] 참석자별 회의록 조회 API 테스트 - [ ] AI 통합 요약 API 테스트 - [ ] Todo 자동 추출 API 테스트 - [ ] 안건별 섹션 저장 및 조회 테스트 ### 2. 통합 테스트 - [ ] 회의 종료 → AI 요약 → Todo 추출 전체 플로우 - [ ] 다수 참석자 (10명) 회의록 통합 테스트 - [ ] 긴 회의록 (5000자 이상) 처리 테스트 ### 3. 성능 테스트 - [ ] AI 요약 응답 시간 측정 (목표: 5초 이내) - [ ] 동시 다발적 회의 종료 처리 (10개 동시) - [ ] 대용량 회의록 (10000자 이상) 처리 시간 --- ## 📅 개발 일정 (예상) ### Phase 1: DB 및 기본 API (3일) - Day 1: DB 스키마 설계 및 마이그레이션 - Day 2: Meeting Service API 개발 - Day 3: 단위 테스트 및 API 검증 ### Phase 2: AI 통합 (4일) - Day 1-2: Claude AI 프롬프트 설계 및 테스트 - Day 3: AI Service API 개발 - Day 4: 통합 테스트 ### Phase 3: 최적화 및 배포 (2일) - Day 1: 성능 최적화 및 캐싱 - Day 2: 프론트엔드 연동 테스트 및 배포 **총 예상 기간: 9일** --- ## 🚀 배포 체크리스트 - [ ] DB 마이그레이션 스크립트 준비 - [ ] API 명세서 업데이트 - [ ] AI 프롬프트 버전 관리 - [ ] 성능 모니터링 설정 - [ ] 에러 로깅 및 알림 설정 - [ ] 백업 및 롤백 계획 수립 --- ## 📝 참고 문서 - [유저스토리](../design/userstory.md) - [AI Service API 명세](../design/backend/api/ai-service-api.yaml) - [Meeting Service API 명세](../design/backend/api/meeting-service-api.yaml) - [07-회의종료.html 프로토타입](../design/uiux/prototype/07-회의종료.html)