OpenAI API와 TMDB API를 활용한 개인화 영화 추천 플랫폼
개발 기간: 2024.05.01 ~ 2024.05.20 (SSAFY 1학기 관통 프로젝트)
단순한 영화 검색을 넘어, 사용자의 취향을 입력받아 생성형 AI(ChatGPT)가 영화를 추천해주는 하이브리드 큐레이션 서비스입니다.
[공동 핵심 기여 - Backend & Data]
- RESTful API 설계 및 구현: 리소스 중심의 API URI 설계 및 Status Code 표준화
- DB 모델링 및 최적화: N+1 문제 해결을 위한
select_related적용 및 정규화/비정규화(JSONField) 전략 수립 - 데이터 파이프라인 구축: TMDB 데이터 수집, 가공, 적재(ETL) 프로세스 자동화
[개별 담당 영역]
| 이름 | 담당 역할 (Role) | 상세 내용 |
|---|---|---|
| 최진오 | Frontend Lead & API Integration |
• SPA 전반 아키텍처 설계 및 구현 • 페이지네이션(Pagination) 및 복합 필터링 로직 구현 • Axios 인터셉터를 활용한 에러 핸들링 및 데이터 시각화 |
| 최형우 | AI Logic & Community |
• OpenAI API 프롬프트 엔지니어링 및 추천 알고리즘 구현 • 게시판(CRUD) 및 댓글 기능 구현 |
영화 데이터의 효율적인 적재를 위해 정규화된 테이블 구조와 유연한 JSON 필드를 혼합하여 설계했습니다.
(이미지 설명: User, Movie, Comment 간의 관계 및 확장성을 고려한 스키마 설계)
- TMDB API: 영화 메타 데이터 대량 수집 및 전처리 로직 구현
- OpenAI API: 사용자 선택 키워드 기반 추천 로직 구현
- 프로세스:
User Input→OpenAI Prompting→JSON Parsing→TMDB Search→Client Response
- Query Optimization: Django ORM의
select_related와prefetch_related를 적재적소에 사용하여 쿼리 수를 획기적으로 감소시키며 DB 부하 최소화. - JSONField 활용: 영화별 상이하고 가변적인 속성 데이터(장르, 태그 등)를 효율적으로 담기 위해 NoSQL적 요소를 도입하여 스키마 유연성 확보.
- Pagination & Filtering: 다량의 데이터 전송 시 발생할 수 있는 네트워크 리소스를 절약하기 위해, 서버 사이드 페이지네이션과 연동된 클라이언트 필터링 구현.
- 문제: 외부 API(OpenAI, TMDB)를 연속으로 호출하는 과정에서 응답 지연(Latency) 발생 및 실행 순서 보장 실패 이슈.
- 해결: 비동기 처리 흐름을 제어하고, 프론트엔드에서 로딩 상태(Skeleton UI)를 관리하여 UX 저하 방지.
- 이슈: 소셜 로그인 구현 과정에서 JWT 토큰 발급과 기존 Custom User Model 간의 필드 충돌 발생.
- 대응: 프로젝트 마감 기한 준수를 위해 소셜 로그인은 MVP 범위에서 제외하고, 자체 인증 시스템의 보안성 강화(Password Hashing 등)에 집중하여 배포 안정성 확보.
- Full-Stack 관점의 이해: 백엔드 API 설계부터 프론트엔드 연동까지 전 과정을 경험하며, API 명세서가 협업에 미치는 중요성을 체감함.
- 데이터 흐름 파악: 데이터가 수집되어 DB에 저장되고, API를 통해 클라이언트에 뿌려지기까지의 파이프라인을 직접 구축하며 시스템 이해도를 높임.
# 1. Repository Clone
git clone [레포지토리 주소]
# 2. Install Dependencies
pip install -r requirements.txt
# 3. Migration & Run Server
python manage.py migrate
python manage.py runserver