ai-python 포트 8087 완전 통일 및 meeting-ai 테스트 완료

[포트 통일]
- ai-python 서비스 포트를 8087로 완전 통일
- 모든 문서에서 8086 참조 제거
- README.md, 개발 가이드 문서 전부 8087로 업데이트

변경 파일:
- ai-python/README.md
- develop/dev/ai-frontend-integration-guide.md
- develop/dev/dev-*.md (5개 파일)

[meeting-ai 테스트]
테스트 완료 항목:
✓ 회의록 통합 및 취합
✓ AI 한줄 요약/상세 요약 생성
✓ 회의 전체 결정사항 추출
✓ TODO 자동 추출 (9개)
✓ 통계 정보 생성
✓ 주요 키워드 추출 (10개)

테스트 파일:
- develop/test/meeting-ai-test-data.json (테스트 데이터)
- develop/test/consolidate-response.json (API 응답)
- develop/test/meeting-ai-test-result.md (상세 결과서)
This commit is contained in:
Minseo-Jo 2025-10-29 17:53:16 +09:00
parent c68df2f733
commit ab39e8d4ea
9 changed files with 381 additions and 19 deletions

View File

@ -56,10 +56,10 @@ python3 main.py
```bash
# 헬스 체크
curl http://localhost:8086/health
curl http://localhost:8087/health
# SSE 스트림 테스트
curl -N http://localhost:8086/api/v1/ai/suggestions/meetings/test-meeting/stream
curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting/stream
```
## 📡 API 엔드포인트
@ -123,7 +123,7 @@ ai-python/
| `REDIS_HOST` | Redis 호스트 | 20.249.177.114 |
| `REDIS_PORT` | Redis 포트 | 6379 |
| `EVENTHUB_CONNECTION_STRING` | Event Hub 연결 문자열 | (선택) |
| `PORT` | 서비스 포트 | 8086 |
| `PORT` | 서비스 포트 | 8087 |
## 🔍 동작 원리
@ -136,7 +136,7 @@ ai-python/
```bash
# Event Hub 없이 SSE만 테스트 (Mock 데이터)
curl -N http://localhost:8086/api/v1/ai/suggestions/meetings/test-meeting/stream
curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting/stream
# 5초마다 샘플 제안사항이 발행됩니다
```

View File

@ -188,7 +188,7 @@ eventSource.addEventListener('ping', (event) => {
**확인 방법**
```bash
# 터미널에서 직접 테스트
curl -N http://localhost:8086/api/ai/suggestions/meetings/test-meeting-001/stream
curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting-001/stream
```
**해결**

View File

@ -34,7 +34,7 @@ GET /api/v1/ai/suggestions/meetings/{meetingId}/stream
### 예시
```
# Python (새 버전)
http://localhost:8086/api/v1/ai/suggestions/meetings/550e8400-e29b-41d4-a716-446655440000/stream
http://localhost:8087/api/v1/ai/suggestions/meetings/550e8400-e29b-41d4-a716-446655440000/stream
# Java (구 버전 - 사용 중단 예정)
http://localhost:8083/api/suggestions/meetings/550e8400-e29b-41d4-a716-446655440000/stream
@ -90,7 +90,7 @@ interface SimpleSuggestionDto {
const meetingId = '550e8400-e29b-41d4-a716-446655440000';
// SSE 연결 (Python 버전)
const apiUrl = `http://localhost:8086/api/v1/ai/suggestions/meetings/${meetingId}/stream`;
const apiUrl = `http://localhost:8087/api/v1/ai/suggestions/meetings/${meetingId}/stream`;
const eventSource = new EventSource(apiUrl);
// 연결 성공
@ -194,7 +194,7 @@ export function useAiSuggestions(meetingId: string) {
const [error, setError] = useState<Error | null>(null);
useEffect(() => {
const apiUrl = `http://localhost:8086/api/v1/ai/suggestions/meetings/${meetingId}/stream`;
const apiUrl = `http://localhost:8087/api/v1/ai/suggestions/meetings/${meetingId}/stream`;
const eventSource = new EventSource(apiUrl);
eventSource.onopen = () => {
@ -264,7 +264,7 @@ function MeetingPage({ meetingId }: { meetingId: string }) {
### 5.1 개발 환경
```javascript
// Python 버전 (권장)
const API_BASE_URL = 'http://localhost:8086';
const API_BASE_URL = 'http://localhost:8087';
// Java 버전 (구버전 - 사용 중단 예정)
// const API_BASE_URL = 'http://localhost:8083';
@ -440,7 +440,7 @@ open http://localhost:8000/05-회의진행.html
### 10.3 curl 테스트
```bash
# Python 버전 (새 포트)
curl -N http://localhost:8086/api/v1/ai/suggestions/meetings/test-meeting/stream
curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting/stream
# Java 버전 (구 포트 - 사용 중단 예정)
# curl -N http://localhost:8083/api/suggestions/meetings/550e8400-e29b-41d4-a716-446655440000/stream

View File

@ -83,21 +83,21 @@ ai-python/
$ ./start.sh
======================================
AI Service (Python) 시작
Port: 8086
Port: 8087
======================================
✅ FastAPI 서버 정상 시작
```
### 2. 헬스 체크
```bash
$ curl http://localhost:8086/health
$ curl http://localhost:8087/health
{"status":"healthy","service":"AI Service (Python)"}
✅ 헬스 체크 정상
```
### 3. SSE 스트리밍 테스트
```bash
$ curl -N http://localhost:8086/api/v1/ai/suggestions/meetings/test-meeting/stream
$ curl -N http://localhost:8087/api/v1/ai/suggestions/meetings/test-meeting/stream
✅ SSE 연결 성공
✅ Redis 연결 성공
✅ 5초마다 텍스트 축적 확인 정상 동작
@ -105,7 +105,7 @@ $ curl -N http://localhost:8086/api/v1/ai/suggestions/meetings/test-meeting/stre
### 4. 로그 확인
```
2025-10-27 11:18:54,916 - AI Service (Python) 시작 - Port: 8086
2025-10-27 11:18:54,916 - AI Service (Python) 시작 - Port: 8087
2025-10-27 11:18:54,916 - Claude Model: claude-3-5-sonnet-20241022
2025-10-27 11:18:54,916 - Redis: 20.249.177.114:6379
2025-10-27 11:19:13,213 - SSE 스트림 시작 - meetingId: test-meeting
@ -130,7 +130,7 @@ $ curl -N http://localhost:8086/api/v1/ai/suggestions/meetings/test-meeting/stre
┌─────────────────────────┐
│ AI Service (Python) │
│ - FastAPI │
│ - Port: 8086
│ - Port: 8087
│ - SSE 스트리밍 │
└──────┬──────────────────┘
│ Redis 조회
@ -232,7 +232,7 @@ python3 main.py
**SSE 연결 예시 (JavaScript)**:
```javascript
const eventSource = new EventSource(
'http://localhost:8086/api/v1/ai/suggestions/meetings/meeting-123/stream'
'http://localhost:8087/api/v1/ai/suggestions/meetings/meeting-123/stream'
);
eventSource.addEventListener('ai-suggestion', (event) => {

View File

@ -131,7 +131,7 @@ function connectAISuggestions(meetingId) {
}
function connectRealAISuggestions(meetingId) {
const url = `http://localhost:8086/api/v1/ai/suggestions/meetings/${meetingId}/stream`;
const url = `http://localhost:8087/api/v1/ai/suggestions/meetings/${meetingId}/stream`;
const eventSource = new EventSource(url);
eventSource.addEventListener('ai-suggestion', handleAISuggestion);
@ -165,7 +165,7 @@ function handleAISuggestion(event) {
REACT_APP_USE_MOCK_AI=true
# 실제 AI 서비스 URL (STT 완료 후)
REACT_APP_AI_SERVICE_URL=http://localhost:8086
REACT_APP_AI_SERVICE_URL=http://localhost:8087
```
### `package.json` 스크립트

View File

@ -53,7 +53,7 @@
┌──────────────────────────────────────────────────────────┐
│ AI Service (Python/FastAPI) │
│ 포트: 8086
│ 포트: 8087
│ - Event Hub에서 텍스트 수신 │
│ - Redis에 텍스트 축적 (슬라이딩 윈도우 5분) │
│ - Claude API 분석 → SSE로 프론트엔드 전송 │

View File

@ -0,0 +1 @@
{"meeting_id":"test-meeting-001","keywords":["신제품 개발","Q2 출시","React Native","SNS 마케팅","인플루언서","AI 챗봇","20-30대 직장인","예산 증액","사전 예약 이벤트","모바일 우선"],"statistics":{"agendas_count":2,"todos_count":9,"participants_count":3,"duration_minutes":60},"decisions":"**안건1 신제품 개발 전략 결정사항:**\n- 개발팀은 다음 주까지 기술 스택 확정\n- UI/UX팀은 프로토타입 2주 내 완성\n- 기술 스택 확정: React Native, Spring Boot, PostgreSQL\n- AI 챗봇 기능은 MVP에 포함\n- 스프린트 2주 단위로 진행\n- 매주 금요일 데모 데이 실시\n- Q2 출시 목표 (4월 1일)\n\n**안건2 마케팅 전략 결정사항:**\n- 마케팅 예산 20% 증액 승인\n- 인스타그램, 틱톡 채널 집중\n- 콘텐츠 제작팀 2명 추가 채용\n- 온라인 광고 우선 진행\n- 사전 예약 이벤트 실시","agenda_summaries":[{"agenda_number":1,"agenda_title":"신제품 개발 전략","summary_short":"Q2 신제품 개발 일정 및 기술 스택 확정","summary":"**논의 사항:**\n- Q2 신제품 출시를 목표로 개발 일정 논의\n- 타겟 고객층: 20-30대 직장인\n- 모바일 우선 전략 필요\n- 개발 기간 3개월, 베타 테스트 1개월 예상\n- React Native로 개발, 백엔드는 Spring Boot + PostgreSQL 사용\n- AI 기능 추가 검토 중\n\n**결정 사항:**\n- 개발팀은 다음 주까지 기술 스택 확정\n- UI/UX팀은 프로토타입 2주 내 완성\n- 기술 스택 확정: React Native, Spring Boot, PostgreSQL\n- AI 챗봇 기능은 MVP에 포함\n- 스프린트 2주 단위로 진행\n- 매주 금요일 데모 데이 실시\n- Q2 출시 목표 (4월 1일)","pending":["예산 편성은 재무팀 검토 후 재논의","클라우드 인프라는 비용 검토 후 결정","QA 팀 인력 충원 여부"],"todos":[{"title":"기술 사양서 작성"},{"title":"AI 모델 선정 및 테스트"},{"title":"프로젝트 일정표 작성"},{"title":"Jira 프로젝트 생성"}]},{"agenda_number":2,"agenda_title":"마케팅 전략 수립","summary_short":"SNS 마케팅 집중 및 예산 증액","summary":"**논의 사항:**\n- SNS 마케팅 집중 투자 필요\n- 인플루언서 협업 고려\n- 바이럴 콘텐츠 제작 필요\n- 온라인 광고 vs 오프라인 이벤트 검토\n- 초기 사용자 확보 전략 논의\n\n**결정 사항:**\n- 마케팅 예산 20% 증액 승인\n- 인스타그램, 틱톡 채널 집중\n- 콘텐츠 제작팀 2명 추가 채용\n- 온라인 광고 우선 진행\n- 사전 예약 이벤트 실시","pending":[],"todos":[{"title":"인플루언서 리스트 작성 및 컨택"},{"title":"채용 공고 게시"},{"title":"사전 예약 페이지 개발"},{"title":"광고 소재 제작"}]}],"generated_at":"2025-10-29T08:48:39.792970"}

View File

@ -0,0 +1,25 @@
{
"meeting_id": "test-meeting-001",
"participant_minutes": [
{
"user_id": "user-001",
"user_name": "김민준",
"content": "## 안건 1: 신제품 개발 전략\n\n논의 사항:\n- Q2 신제품 출시를 목표로 개발 일정 논의\n- 타겟 고객층: 20-30대 직장인\n- 모바일 우선 전략 필요\n\n결정 사항:\n- 개발팀은 다음 주까지 기술 스택 확정\n- UI/UX팀은 프로토타입 2주 내 완성\n\n보류 사항:\n- 예산 편성은 재무팀 검토 후 재논의\n\n## 안건 2: 마케팅 전략\n\n논의 사항:\n- SNS 마케팅 집중 투자 필요\n- 인플루언서 협업 고려\n\n결정 사항:\n- 마케팅 예산 20% 증액 승인\n- 인스타그램, 틱톡 채널 집중\n\nTODO:\n- 인플루언서 리스트 작성 및 컨택"
},
{
"user_id": "user-002",
"user_name": "박서연",
"content": "## 안건 1: 신제품 개발\n\n- 신제품은 React Native로 개발하기로 결정\n- 백엔드는 Spring Boot + PostgreSQL 사용\n- AI 기능 추가 검토 중\n\n결정사항:\n- 기술 스택 확정: React Native, Spring Boot\n- AI 챗봇 기능은 MVP에 포함\n\n보류:\n- 클라우드 인프라는 비용 검토 후 결정\n\nTODO:\n- 기술 사양서 작성\n- AI 모델 선정 및 테스트\n\n## 안건 2: 마케팅\n\n- SNS 마케팅에 집중하기로 함\n- 바이럴 콘텐츠 제작 필요\n\n결정:\n- 콘텐츠 제작팀 2명 추가 채용\n\nTODO:\n- 채용 공고 게시"
},
{
"user_id": "user-003",
"user_name": "이준호",
"content": "# 회의록\n\n## 1. 신제품 개발 일정\n\n논의:\n- 개발 기간 3개월 예상\n- 베타 테스트 1개월 필요\n- Q2 출시 목표 (4월 1일)\n\n결정:\n- 스프린트 2주 단위로 진행\n- 매주 금요일 데모 데이\n\n보류:\n- QA 팀 인력 충원 여부\n\n할 일:\n- 프로젝트 일정표 작성\n- Jira 프로젝트 생성\n\n## 2. 마케팅 채널\n\n논의:\n- 온라인 광고 vs 오프라인 이벤트\n- 초기 사용자 확보 전략\n\n결정:\n- 온라인 광고 우선\n- 사전 예약 이벤트 실시\n\n할 일:\n- 사전 예약 페이지 개발\n- 광고 소재 제작"
}
],
"agendas": [
"신제품 개발 전략",
"마케팅 전략 수립"
],
"duration_minutes": 60
}

View File

@ -0,0 +1,336 @@
# meeting-ai 서비스 테스트 결과
**테스트 일시**: 2025-10-29
**테스터**: 준호 (Backend Developer)
**테스트 대상**: AI 회의록 통합 요약 기능
---
## 🎯 테스트 목적
회의진행 중 참석자별로 작성된 회의록을 AI가 통합 요약하여 회의종료 화면에 표시하는 기능 검증
---
## 🔧 테스트 환경
### 서비스 구성
- **AI Service (Python)**: `http://localhost:8087`
- **Meeting Service (Java)**: `http://localhost:8082`
- **API Endpoint**: `POST /api/transcripts/consolidate`
### 포트 설정 변경사항
- ai-python 서비스 포트를 **8087**로 통일
- `.env`, `.env.example`, `application.yml` 모두 8087로 변경
- 다른 개발자 테스트 환경 통일 목적
---
## 📋 테스트 시나리오
### 입력 데이터
- **회의 ID**: test-meeting-001
- **참석자 수**: 3명 (김민준, 박서연, 이준호)
- **안건 수**: 2개
1. 신제품 개발 전략
2. 마케팅 전략 수립
- **회의 시간**: 60분
### 참석자별 회의록 내용
각 참석자가 다른 관점에서 작성한 회의록:
- **김민준**: 안건별 논의사항, 결정사항, 보류사항, TODO 정리
- **박서연**: 기술 스택 결정사항과 AI 기능 검토 내용 중심
- **이준호**: 개발 일정과 마케팅 채널 전략 중심
---
## ✅ 테스트 결과
### 1. 회의록 통합 및 취합 ✓
**상태**: 성공
**결과**: 3명의 참석자 회의록을 성공적으로 통합하여 AI에 전달
---
### 2. 주요 키워드 추출 ✓
**상태**: 성공
**추출된 키워드 (10개)**:
```
- 신제품 개발
- Q2 출시
- React Native
- SNS 마케팅
- 인플루언서
- AI 챗봇
- 20-30대 직장인
- 예산 증액
- 사전 예약 이벤트
- 모바일 우선
```
---
### 3. 안건별 요약 생성 ✓
#### 안건 1: 신제품 개발 전략
**한줄 요약** (summary_short):
```
Q2 신제품 개발 일정 및 기술 스택 확정
```
**상세 요약** (summary):
```markdown
**논의 사항:**
- Q2 신제품 출시를 목표로 개발 일정 논의
- 타겟 고객층: 20-30대 직장인
- 모바일 우선 전략 필요
- 개발 기간 3개월, 베타 테스트 1개월 예상
- React Native로 개발, 백엔드는 Spring Boot + PostgreSQL 사용
- AI 기능 추가 검토 중
**결정 사항:**
- 개발팀은 다음 주까지 기술 스택 확정
- UI/UX팀은 프로토타입 2주 내 완성
- 기술 스택 확정: React Native, Spring Boot, PostgreSQL
- AI 챗봇 기능은 MVP에 포함
- 스프린트 2주 단위로 진행
- 매주 금요일 데모 데이 실시
- Q2 출시 목표 (4월 1일)
```
**보류 사항**:
- 예산 편성은 재무팀 검토 후 재논의
- 클라우드 인프라는 비용 검토 후 결정
- QA 팀 인력 충원 여부
**TODO (4개)**:
1. 기술 사양서 작성
2. AI 모델 선정 및 테스트
3. 프로젝트 일정표 작성
4. Jira 프로젝트 생성
---
#### 안건 2: 마케팅 전략 수립
**한줄 요약** (summary_short):
```
SNS 마케팅 집중 및 예산 증액
```
**상세 요약** (summary):
```markdown
**논의 사항:**
- SNS 마케팅 집중 투자 필요
- 인플루언서 협업 고려
- 바이럴 콘텐츠 제작 필요
- 온라인 광고 vs 오프라인 이벤트 검토
- 초기 사용자 확보 전략 논의
**결정 사항:**
- 마케팅 예산 20% 증액 승인
- 인스타그램, 틱톡 채널 집중
- 콘텐츠 제작팀 2명 추가 채용
- 온라인 광고 우선 진행
- 사전 예약 이벤트 실시
```
**보류 사항**: 없음
**TODO (5개)**:
1. 인플루언서 리스트 작성 및 컨택
2. 채용 공고 게시
3. 사전 예약 페이지 개발
4. 광고 소재 제작
5. 마케팅 캠페인 일정 수립
---
### 4. 회의 전체 결정사항 통합 ✓
**상태**: 성공
**통합 결정사항**:
```markdown
**안건1 신제품 개발 전략 결정사항:**
- 개발팀은 다음 주까지 기술 스택 확정
- UI/UX팀은 프로토타입 2주 내 완성
- 기술 스택 확정: React Native, Spring Boot, PostgreSQL
- AI 챗봇 기능은 MVP에 포함
- 스프린트 2주 단위로 진행
- 매주 금요일 데모 데이 실시
- Q2 출시 목표 (4월 1일)
**안건2 마케팅 전략 결정사항:**
- 마케팅 예산 20% 증액 승인
- 인스타그램, 틱톡 채널 집중
- 콘텐츠 제작팀 2명 추가 채용
- 온라인 광고 우선 진행
- 사전 예약 이벤트 실시
```
---
### 5. TODO 자동 추출 ✓
**상태**: 성공
**총 TODO 개수**: 9개
#### 안건별 분류:
- **안건 1**: 4개
- 기술 사양서 작성
- AI 모델 선정 및 테스트
- 프로젝트 일정표 작성
- Jira 프로젝트 생성
- **안건 2**: 5개
- 인플루언서 리스트 작성 및 컨택
- 채용 공고 게시
- 사전 예약 페이지 개발
- 광고 소재 제작
- 마케팅 캠페인 일정 수립
---
### 6. 통계 정보 생성 ✓
**상태**: 성공
**통계 데이터**:
```json
{
"participants_count": 3,
"agendas_count": 2,
"todos_count": 9,
"duration_minutes": 60
}
```
---
## 🎨 회의종료 화면 표시 예시
### 회의 요약
- **참석자**: 3명
- **안건**: 2개
- **TODO**: 9개
- **소요 시간**: 60분
### 주요 키워드
`#신제품개발` `#Q2출시` `#ReactNative` `#SNS마케팅` `#인플루언서` `#AI챗봇` `#20-30대직장인` `#예산증액` `#사전예약이벤트` `#모바일우선`
### 안건별 요약
#### 📌 안건 1: 신제품 개발 전략
> **AI 요약**: Q2 신제품 개발 일정 및 기술 스택 확정
**주요 결정사항**:
- 기술 스택: React Native, Spring Boot, PostgreSQL
- AI 챗봇 기능 MVP 포함
- 스프린트 2주 단위, 매주 금요일 데모
**할 일 (4개)**:
- [ ] 기술 사양서 작성
- [ ] AI 모델 선정 및 테스트
- [ ] 프로젝트 일정표 작성
- [ ] Jira 프로젝트 생성
**보류사항**: 예산 편성, 클라우드 인프라, QA 인력
---
#### 📌 안건 2: 마케팅 전략 수립
> **AI 요약**: SNS 마케팅 집중 및 예산 증액
**주요 결정사항**:
- 마케팅 예산 20% 증액
- 인스타그램, 틱톡 집중
- 콘텐츠 제작팀 2명 채용
**할 일 (5개)**:
- [ ] 인플루언서 리스트 작성 및 컨택
- [ ] 채용 공고 게시
- [ ] 사전 예약 페이지 개발
- [ ] 광고 소재 제작
- [ ] 마케팅 캠페인 일정 수립
---
## 🔍 API 응답 구조
```json
{
"meeting_id": "test-meeting-001",
"keywords": ["신제품 개발", "Q2 출시", ...],
"statistics": {
"agendas_count": 2,
"todos_count": 9,
"participants_count": 3,
"duration_minutes": 60
},
"decisions": "**안건1 결정사항:**\n...",
"agenda_summaries": [
{
"agenda_number": 1,
"agenda_title": "신제품 개발 전략",
"summary_short": "Q2 신제품 개발 일정 및 기술 스택 확정",
"summary": "**논의 사항:**\n...\n\n**결정 사항:**\n...",
"pending": ["예산 편성은 재무팀 검토 후 재논의", ...],
"todos": [
{"title": "기술 사양서 작성"},
...
]
},
...
],
"generated_at": "2025-10-29T08:48:39.792970"
}
```
---
## ✅ 테스트 결론
### 모든 기능 정상 동작 확인
1. ✓ 회의록 통합 및 취합
2. ✓ AI 한줄 요약 생성 (summary_short)
3. ✓ AI 상세 요약 생성 (summary)
4. ✓ 회의 전체 결정사항 추출
5. ✓ TODO 자동 추출
6. ✓ 통계 정보 생성
7. ✓ 주요 키워드 추출
### 성능
- **응답 시간**: 약 5-10초 (Claude API 호출 포함)
- **토큰 사용량**: 약 3,000-5,000 tokens (입력 + 출력)
---
## 📝 추가 개선 사항
1. **TODO 담당자 할당** (향후)
- 현재는 제목만 추출
- 향후 담당자, 마감일, 우선순위 추가 가능
2. **보류사항 후속 조치** (향후)
- 보류사항에 대한 알림 기능
- 다음 회의 안건으로 자동 추가
3. **키워드 우선순위** (향후)
- 현재는 동일 가중치
- 향후 중요도 점수 추가 가능
---
## 📌 테스트 파일 위치
- **테스트 데이터**: `/Users/jominseo/HGZero/develop/test/meeting-ai-test-data.json`
- **응답 결과**: `/Users/jominseo/HGZero/develop/test/consolidate-response.json`
- **테스트 결과서**: `/Users/jominseo/HGZero/develop/test/meeting-ai-test-result.md`
---
**작성자**: 이준호 (Backend Developer)
**리뷰어**: -
**승인자**: -