🧩 BE

국회 Monitor 서비스 → FastAPI로 전환하여 기능 API화

Assigned To
Date
2026/02/25
Status
Not started
Type
Backlog
Server

설명

backend-gookwhe의 Monitor 서비스를 독립 실행 스크립트에서 FastAPI 기반 웹 애플리케이션으로 전환하여 회의 수집을 관리할 수 있는 REST API를 제공.

현재 구조

Monitor Service (독립 스크립트) ├─ 2초마다 회의 목록 폴링 ├─ DB에 회의 저장 └─ Celery 태스크 트리거 (자동) → 관리 UI 없음, 로그로만 상태 확인
Plain Text
복사

개선 후 구조

FastAPI App (:8001) ├─ REST API 엔드포인트 (회의 관리) │ ├─ GET /meetings # 모든 회의 조회 │ ├─ GET /meetings/active # 수집 중인 회의 │ ├─ POST /meetings/{id}/start # 수동 수집 시작 │ ├─ POST /meetings/{id}/stop # 수집 중지 │ └─ POST /meetings/{id}/summarize # AI 요약 생성 │ └─ Background Service (모니터링) ├─ 2초마다 회의 폴링 └─ Celery 태스크 자동 트리거
Plain Text
복사

기대 효과

Swagger UI로 쉽게 관리 가능 (/docs)
수동으로 회의 수집 시작/중지 가능
진행 중인 회의 상태 실시간 조회
AI 요약 등 추가 기능 확장 용이
Celery는 그대로 유지 (장시간 태스크, 재복구 기능)

작업할 내용

Phase 1: FastAPI 기본 구조

FastAPI 앱 초기화 (app/main.py)
기존 Monitor를 FastAPI Background Task로 전환
Health check 엔드포인트 추가 (GET /health)
Swagger UI 설정

Phase 2: 회의 관리 API

회의 조회 API 구현
GET /meetings - 모든 회의 조회
GET /meetings/{id} - 특정 회의 조회
GET /meetings/active - 수집 중인 회의 목록
회의 수집 제어 API 구현
POST /meetings/{id}/start - 수동 수집 시작
POST /meetings/{id}/stop - 수집 중지
속기록 조회 API 구현
GET /transcripts/{meeting_id} - 회의별 속기록 조회

Phase 3: 추가 기능

AI 요약 API 구현
POST /meetings/{id}/summarize - AI 요약 생성
OpenAI API 연동
Chunk 병합 API 구현
POST /meetings/{id}/merge - Chunk 병합
배치 작업 스케줄러 추가 (APScheduler)
종료된 회의 자동 병합 (10분마다)
AI 요약 자동 생성 (매일 새벽 2시)

Phase 4: 배포 및 문서화

Docker 설정 업데이트 (FastAPI 포트 노출)
README 업데이트 (API 사용법)
entrypoint.sh 수정 (FastAPI 실행 추가)

참고 자료

현재 파일 구조:
backend-gookwhe/ ├─ src/ │ ├─ main.py # Monitor 진입점 │ ├─ monitor.py # 폴링 로직 │ ├─ tasks.py # Celery 태스크 │ └─ collector.py # WebSocket 수집 └─ entrypoint.sh # 3개 프로세스 실행
Plain Text
복사
개선 후 구조:
backend-gookwhe/ ├─ app/ │ ├─ main.py # FastAPI 앱 │ ├─ api/ │ │ ├─ meetings.py # 회의 관리 API │ │ ├─ transcripts.py # 속기록 조회 API │ │ └─ health.py # Health check │ ├─ services/ │ │ ├─ monitor.py # 백그라운드 모니터링 │ │ ├─ collector.py # WebSocket 수집 │ │ └─ summarizer.py # AI 요약 │ └─ db/ │ ├─ database.py # DB 연결 │ └─ models.py # 모델 └─ entrypoint.sh # 업데이트
Plain Text
복사