# Meeting AI 통합 실행 및 테스트 가이드 작성일: 2025-10-28 작성자: 이동욱 (Backend Developer) ## 📋 목차 1. [사전 준비](#사전-준비) 2. [AI Python Service 실행](#ai-python-service-실행) 3. [Meeting Service 실행](#meeting-service-실행) 4. [통합 테스트](#통합-테스트) 5. [트러블슈팅](#트러블슈팅) --- ## 사전 준비 ### 1. 포트 확인 ```bash # 포트 사용 확인 lsof -i :8082 # Meeting Service lsof -i :8087 # AI Python Service ``` ### 2. 데이터베이스 확인 ```sql -- PostgreSQL 연결 확인 psql -h 4.230.48.72 -U hgzerouser -d meetingdb -- 필요한 테이블 확인 \dt meeting_analysis \dt todos \dt meetings \dt agenda_sections ``` ### 3. Redis 확인 ```bash # Redis 연결 테스트 redis-cli -h 20.249.177.114 -p 6379 -a Hi5Jessica! ping ``` --- ## AI Python Service 실행 ### 1. 디렉토리 이동 ```bash cd /Users/jominseo/HGZero/ai-python ``` ### 2. 환경 변수 확인 ```bash # .env 파일 확인 (없으면 .env.example에서 복사) cat .env # 필수 환경 변수: # - PORT=8087 # - CLAUDE_API_KEY=sk-ant-api03-... # - REDIS_HOST=20.249.177.114 # - REDIS_PORT=6379 ``` ### 3. 의존성 설치 ```bash # Python 가상환경 활성화 (선택사항) source venv/bin/activate # 또는 python3 -m venv venv # 의존성 설치 pip install -r requirements.txt ``` ### 4. 서비스 실행 ```bash # 방법 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. 상태 확인 ```bash # Health Check curl http://localhost:8087/health # 기대 응답: # {"status":"healthy","service":"AI Service (Python)"} # API 문서 확인 open http://localhost:8087/docs ``` --- ## Meeting Service 실행 ### 1. 디렉토리 이동 ```bash cd /Users/jominseo/HGZero ``` ### 2. 빌드 ```bash # Java 21 사용 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home # 빌드 ./gradlew :meeting:clean :meeting:build -x test ``` ### 3. 실행 ```bash # 방법 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. 상태 확인 ```bash # Health Check curl http://localhost:8082/actuator/health # Swagger UI open http://localhost:8082/swagger-ui.html ``` --- ## 통합 테스트 ### 테스트 시나리오 #### 1. 회의 생성 (사전 작업) ```bash 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. 회의 시작 ```bash 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. 안건 섹션 생성 (테스트 데이터) ```sql -- 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 호출** ```bash 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 ``` **기대 응답:** ```json { "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. 결과 확인 **데이터베이스 확인:** ```sql -- 회의 상태 확인 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 생성 ``` **로그 확인:** ```bash # 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 참조) ``` --- ## 성능 측정 ### 응답 시간 측정 ```bash # 회의 종료 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 호출 포함) ``` ### 동시성 테스트 ```bash # 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 확인 --- ## 참고 링크 - AI Python Service: http://localhost:8087/docs - Meeting Service Swagger: http://localhost:8082/swagger-ui.html - Claude API 문서: https://docs.anthropic.com/claude/reference