Mova — AI 영화 추천 플랫폼

LoRA 파인튜닝 EXAONE-2.4B와 Gemini API 듀얼 백엔드로 개인화 영화 추천, AI 리뷰 자동 생성, 실시간 박스오피스 랭킹, AI 챗봇, 개봉 예정작 알림을 제공하는 영화 플랫폼.


주요 기능

기능 설명
AI 맞춤 추천 LoRA 파인튜닝 EXAONE-2.4B와 Gemini API 듀얼 백엔드. 사용자 취향 학습 기반 개인화 추천, GPU 미가용 시 Gemini 자동 폴백(전환 8초).
AI 리뷰 생성 KOBIS 박스오피스·Google 뉴스·위키피디아 자동 크롤링 → Gemini가 평론가 톤 리뷰 작성. 수집 자료의 긍부정 반응을 종합해 별점 산정.
박스오피스 랭킹 KOFIC API로 일별·주간·월간 한국 박스오피스 집계. 포스터·관객수·매출 시각화.
개봉 예정작 TMDB API로 한국 개봉 예정 영화 자동 갱신, 월별 그룹핑.
영화 AI 챗봇 Gemini 기반 영화 추천·정보 대화. 사용자 시청 이력과 취향을 반영한 맥락 대화.
컬렉션·찜 개인 영화 컬렉션 생성·관리, 찜 목록 토글.
마이페이지 시청 기록, 리뷰 목록, 프로필 관리.

기능 요구 사항

ID 기능 설명 우선순위
M-001 AI 추천 LoRA/Gemini 듀얼 백엔드 개인화 추천, 폴백 전환 필수
M-002 AI 리뷰 KOBIS·뉴스·위키 크롤링 → Gemini 리뷰 생성 + 별점 산정 필수
M-003 랭킹 KOFIC 박스오피스 일별/주간/월간 집계·시각화 필수
M-004 챗봇 Gemini 영화 추천·정보 맥락 대화 필수
M-005 개봉 예정작 TMDB API 자동 갱신, 월별 그룹핑 선택
M-006 컬렉션·찜 개인 영화 목록 생성·관리, 찜 토글 필수
M-007 마이페이지 시청 기록, 리뷰 목록, 프로필 관리 필수
M-008 소셜 로그인 Google·Kakao·Naver OAuth 2.0 통합 인증 필수

AI 파이프라인

추천 엔진 — 듀얼 백엔드

사용자 취향 데이터
    │
    ├─ GPU 가용 ──→ LoRA 서버 (EXAONE-2.4B AWQ, :8200)
    │                    │
    │                    └─→ Cloudflare Tunnel ──→ EC2 API
    │
    └─ GPU 미가용 ──→ Gemini API (폴백)
                         │
                         └─→ EC2 API
  • RECOMMENDATION_BACKEND 환경변수로 loragemini 전환
  • 전환 왕복 약 8초 (docker compose 재기동)
  • LoRA 서버: systemd 서비스, WSL2 GPU (RTX)

AI 리뷰 생성 파이프라인

KOBIS 일별 박스오피스 ──→ 영화 제목 리스트
    │
    ├─→ Google News 크롤링 (관련 기사 수집)
    ├─→ 한국어 위키피디아 크롤링 (줄거리·평가·인포박스)
    └─→ KOBIS 흥행 지표 (관객수·매출)
         │
         ▼
    JSONL 통합 자료
         │
         ▼
    Gemini ──→ 평론가 톤 리뷰 (200~300자)
         │
         ▼
    Gemini ──→ 긍부정 종합 별점 산정 (1.0~5.0, 0.5 단위)
         │
         ▼
    reviews 테이블 저장 (ai_reviewer 계정)

기술 스택

구분 기술
백엔드 Python 3.12 · FastAPI · PostgreSQL (Neon) · Redis · SQLAlchemy 2.0 Async
프론트엔드 Next.js 16 · TypeScript 5.7 · React 19 · Tailwind CSS 4 · shadcn/ui
모바일 Flutter · Dart
AI/ML EXAONE-2.4B AWQ (LoRA) · Google Gemini API
데이터 TMDB API · KOFIC/KOBIS API · Google News · 위키피디아
인프라 Docker Compose · AWS EC2 · AWS S3 · Cloudflare Tunnel

트러블슈팅

LoRA 서버 ↔ Gemini 듀얼 백엔드 폴백

  • 상황: GPU 노트북(LoRA 서버)이 꺼지거나 Cloudflare Tunnel이 끊기면 추천 API 전면 장애
  • 원인: EXAONE-2.4B AWQ 모델이 로컬 GPU에서만 서빙 가능, EC2에는 GPU 없음
  • 해결: RECOMMENDATION_BACKEND 환경변수로 lora/gemini 전환, docker compose 재기동 한 번으로 폴백(왕복 8초)
  • 결과: GPU 미가용 시에도 추천 서비스 무중단 제공

IDOR 취약점 5건 전수 수정

  • 상황: user_id를 경로·바디 파라미터로 받아 다른 사용자의 리소스에 접근 가능
  • 원인: 초기 개발 시 user_id를 클라이언트 입력으로 신뢰, 토큰 기반 신원 확인 누락
  • 해결: 전수 조사로 5건(mypage·profile·watchlist·picks·chat) 식별 후 전부 JWT 토큰 기반으로 전환
  • 결과: 모든 리소스 접근에 소유권 검증 적용, IDOR 취약점 0건

스크린샷

Mova 메인 — AI 추천 영화 목록
Mova 메인 — AI 추천 영화 목록
Mova 박스오피스 랭킹
Mova 박스오피스 랭킹