hgzero/claude/MEETING-AI-TEST-GUIDE.md
Minseo-Jo 143721d106 feat: Meeting Service AI 통합 개발
 구현 완료
- AI Python Service (FastAPI, Claude API, 8087 포트)
  - POST /api/v1/transcripts/consolidate
  - 참석자별 회의록 → AI 통합 분석
  - 키워드/안건별 요약/Todo 추출

- Meeting Service AI 통합
  - EndMeetingService (@Primary)
  - AIServiceClient (RestTemplate, 30초 timeout)
  - AI 분석 결과 저장 (meeting_analysis, todos)
  - 회의 상태 COMPLETED 처리

- DTO 구조 (간소화)
  - ConsolidateRequest/Response
  - MeetingEndDTO
  - Todo 제목만 포함 (담당자/마감일 제거)

📝 기술스택
- Python: FastAPI, anthropic 0.71.0, psycopg2
- Java: Spring Boot, RestTemplate
- Claude: claude-3-5-sonnet-20241022

🔧 주요 이슈 해결
- 포트 충돌: 8086(feature/stt-ai) → 8087(feat/meeting-ai)
- Bean 충돌: @Primary 추가
- YAML 문법: ai.service.url 구조 수정
- anthropic 라이브러리 업그레이드

📚 테스트 가이드 및 스크립트 작성
- claude/MEETING-AI-TEST-GUIDE.md
- test-meeting-ai.sh

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 16:42:09 +09:00

8.8 KiB

Meeting AI 통합 실행 및 테스트 가이드

작성일: 2025-10-28 작성자: 이동욱 (Backend Developer)

📋 목차

  1. 사전 준비
  2. AI Python Service 실행
  3. Meeting Service 실행
  4. 통합 테스트
  5. 트러블슈팅

사전 준비

1. 포트 확인

# 포트 사용 확인
lsof -i :8082  # Meeting Service
lsof -i :8087  # AI Python Service

2. 데이터베이스 확인

-- PostgreSQL 연결 확인
psql -h 4.230.48.72 -U hgzerouser -d meetingdb

-- 필요한 테이블 확인
\dt meeting_analysis
\dt todos
\dt meetings
\dt agenda_sections

3. Redis 확인

# Redis 연결 테스트
redis-cli -h 20.249.177.114 -p 6379 -a Hi5Jessica! ping

AI Python Service 실행

1. 디렉토리 이동

cd /Users/jominseo/HGZero/ai-python

2. 환경 변수 확인

# .env 파일 확인 (없으면 .env.example에서 복사)
cat .env

# 필수 환경 변수:
# - PORT=8087
# - CLAUDE_API_KEY=sk-ant-api03-...
# - REDIS_HOST=20.249.177.114
# - REDIS_PORT=6379

3. 의존성 설치

# Python 가상환경 활성화 (선택사항)
source venv/bin/activate  # 또는 python3 -m venv venv

# 의존성 설치
pip install -r requirements.txt

4. 서비스 실행

# 방법 1: 직접 실행
python3 main.py

# 방법 2: uvicorn으로 실행
uvicorn main:app --host 0.0.0.0 --port 8087 --reload

# 방법 3: 백그라운드 실행
nohup python3 main.py > logs/ai-python.log 2>&1 & echo "Started AI Python Service with PID: $!"

5. 상태 확인

# Health Check
curl http://localhost:8087/health

# 기대 응답:
# {"status":"healthy","service":"AI Service (Python)"}

# API 문서 확인
open http://localhost:8087/docs

Meeting Service 실행

1. 디렉토리 이동

cd /Users/jominseo/HGZero

2. 빌드

# Java 21 사용
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home

# 빌드
./gradlew :meeting:clean :meeting:build -x test

3. 실행

# 방법 1: Gradle로 실행
./gradlew :meeting:bootRun

# 방법 2: JAR 실행
java -jar meeting/build/libs/meeting-0.0.1-SNAPSHOT.jar

# 방법 3: IntelliJ 실행 프로파일 사용
python3 tools/run-intellij-service-profile.py meeting

4. 상태 확인

# Health Check
curl http://localhost:8082/actuator/health

# Swagger UI
open http://localhost:8082/swagger-ui.html

통합 테스트

테스트 시나리오

1. 회의 생성 (사전 작업)

curl -X POST http://localhost:8082/api/meetings \
  -H "Content-Type: application/json" \
  -H "X-User-Id: user123" \
  -H "X-User-Name: 홍길동" \
  -H "X-User-Email: hong@example.com" \
  -d '{
    "title": "AI 통합 테스트 회의",
    "purpose": "Meeting AI 기능 테스트",
    "scheduledAt": "2025-10-28T14:00:00",
    "endTime": "2025-10-28T15:00:00",
    "location": "회의실 A",
    "participantIds": ["user123", "user456"]
  }'

응답에서 meetingId 저장

2. 회의 시작

MEETING_ID="위에서 받은 meetingId"

curl -X POST http://localhost:8082/api/meetings/${MEETING_ID}/start \
  -H "X-User-Id: user123" \
  -H "X-User-Name: 홍길동" \
  -H "X-User-Email: hong@example.com"

3. 안건 섹션 생성 (테스트 데이터)

-- PostgreSQL에서 직접 실행
INSERT INTO agenda_sections (
    id, minutes_id, meeting_id, agenda_number, agenda_title,
    ai_summary_short, discussions,
    decisions, pending_items, opinions, todos,
    created_at, updated_at
) VALUES (
    'agenda-001', 'minutes-001', '위의_meetingId', 1, '신제품 기획',
    NULL,
    '타겟 고객층을 20-30대로 설정하고 UI/UX 개선에 집중하기로 논의했습니다.',
    '["타겟 고객: 20-30대 직장인", "UI/UX 개선 최우선"]'::json,
    '["가격 정책 추가 검토 필요"]'::json,
    '[]'::json,
    '[]'::json,
    NOW(), NOW()
),
(
    'agenda-002', 'minutes-001', '위의_meetingId', 2, '마케팅 전략',
    NULL,
    'SNS 마케팅과 인플루언서 협업을 통한 브랜드 인지도 제고 방안을 논의했습니다.',
    '["SNS 광고 집행", "인플루언서 3명과 계약"]'::json,
    '["예산 승인 대기"]'::json,
    '[]'::json,
    '[]'::json,
    NOW(), NOW()
);

4. 핵심 테스트: 회의 종료 API 호출

curl -X POST http://localhost:8082/api/meetings/${MEETING_ID}/end \
  -H "X-User-Id: user123" \
  -H "X-User-Name: 홍길동" \
  -H "X-User-Email: hong@example.com" \
  -v

기대 응답:

{
  "success": true,
  "data": {
    "title": "AI 통합 테스트 회의",
    "participantCount": 2,
    "durationMinutes": 60,
    "agendaCount": 2,
    "todoCount": 5,
    "keywords": ["신제품", "UI/UX", "마케팅", "SNS", "인플루언서"],
    "agendaSummaries": [
      {
        "title": "안건 1: 신제품 기획",
        "aiSummaryShort": "타겟 고객 설정 및 UI/UX 개선 방향 논의",
        "details": {
          "discussion": "타겟 고객층을 20-30대로 설정...",
          "decisions": ["타겟 고객: 20-30대 직장인", "UI/UX 개선 최우선"],
          "pending": ["가격 정책 추가 검토 필요"]
        },
        "todos": [
          {"title": "시장 조사 보고서 작성"},
          {"title": "UI/UX 개선안 프로토타입 제작"}
        ]
      },
      {
        "title": "안건 2: 마케팅 전략",
        "aiSummaryShort": "SNS 마케팅 및 인플루언서 협업 계획",
        "details": {
          "discussion": "SNS 마케팅과 인플루언서 협업...",
          "decisions": ["SNS 광고 집행", "인플루언서 3명과 계약"],
          "pending": ["예산 승인 대기"]
        },
        "todos": [
          {"title": "인플루언서 계약서 작성"},
          {"title": "SNS 광고 컨텐츠 제작"},
          {"title": "예산안 제출"}
        ]
      }
    ]
  }
}

5. 결과 확인

데이터베이스 확인:

-- 회의 상태 확인
SELECT meeting_id, title, status, ended_at
FROM meetings
WHERE meeting_id = '위의_meetingId';
-- 기대: status = 'COMPLETED'

-- AI 분석 결과 확인
SELECT analysis_id, meeting_id, keywords, status, completed_at
FROM meeting_analysis
WHERE meeting_id = '위의_meetingId';

-- Todo 확인
SELECT todo_id, title, status
FROM todos
WHERE meeting_id = '위의_meetingId';
-- 기대: 5개의 Todo 생성

로그 확인:

# AI Python Service 로그
tail -f logs/ai-python.log

# Meeting Service 로그
tail -f meeting/logs/meeting-service.log

트러블슈팅

1. AI Python Service 연결 실패

에러: Connection refused (8087)

해결:
1. AI Python Service가 실행 중인지 확인
   ps aux | grep python | grep main.py
2. 포트 확인
   lsof -i :8087
3. 로그 확인
   tail -f logs/ai-python.log

2. Claude API 오류

에러: Invalid API key

해결:
1. .env 파일의 CLAUDE_API_KEY 확인
2. API 키 유효성 확인
   curl https://api.anthropic.com/v1/messages \
     -H "x-api-key: $CLAUDE_API_KEY" \
     -H "anthropic-version: 2023-06-01"

3. 데이터베이스 연결 실패

에러: Connection to 4.230.48.72:5432 refused

해결:
1. PostgreSQL 서버 상태 확인
2. 방화벽 규칙 확인
3. application.yml의 DB 설정 확인

4. 타임아웃 오류

에러: Read timeout (30초)

해결:
1. application.yml에서 타임아웃 증가
   ai.service.timeout=60000
2. Claude API 응답 시간 확인
3. 네트워크 상태 확인

5. 안건 데이터 없음

에러: No agenda sections found

해결:
1. agenda_sections 테이블에 데이터 확인
   SELECT * FROM agenda_sections WHERE meeting_id = '해당ID';
2. 테스트 데이터 삽입 (위 SQL 참조)

성능 측정

응답 시간 측정

# 회의 종료 API 응답 시간
time curl -X POST http://localhost:8082/api/meetings/${MEETING_ID}/end \
  -H "X-User-Id: user123" \
  -H "X-User-Name: 홍길동" \
  -H "X-User-Email: hong@example.com"

# 기대 시간: 5-15초 (Claude API 호출 포함)

동시성 테스트

# Apache Bench로 부하 테스트 (선택사항)
ab -n 10 -c 2 -H "X-User-Id: user123" \
   http://localhost:8087/health

체크리스트

  • AI Python Service 실행 (8087)
  • Meeting Service 실행 (8082)
  • 데이터베이스 연결 확인
  • Redis 연결 확인
  • 회의 생성 API 성공
  • 회의 시작 API 성공
  • 안건 데이터 삽입
  • 회의 종료 API 성공
  • AI 분석 결과 저장 확인
  • Todo 자동 생성 확인
  • 회의 상태 COMPLETED 확인

참고 링크