AI 기반 개인화 추천과 대화형 검색으로 취향에 꼭 맞는 영화를 찾아보세요
➡️ https://skkuse-cinemate.vercel.app/
pnpm install.env.example을 복사해 .env.local을 만들고 필요한 값을 채웁니다.
cp .env.example .env.local주요 환경 변수는 다음과 같습니다.
| 변수 | 설명 |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase 프로젝트 URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anon key |
SUPABASE_SERVICE_ROLE_KEY |
서버/seed 작업용 Supabase service role key |
SUPABASE_DB_PASSWORD |
Supabase CLI용 원격 DB 비밀번호 |
SUPABASE_POOLER_DATABASE_URL |
Supabase Postgres connection pooler URL |
OPENAI_API_KEY |
AI 추천/채팅 기능에 사용하는 OpenAI API key |
OPENAI_RECOMMENDATION_CHAT_MODEL |
추천 채팅 LLM 모델 |
OPENAI_RECOMMENDATION_CHAT_EMBEDDING_MODEL |
추천 채팅 embedding 모델 |
TMDB_READ_ACCESS_TOKEN |
TMDB 데이터 수집용 read access token |
TMDB_API_KEY |
TMDB API key |
Seed 데이터를 적재하기 전에 supabase/migrations의 migration을 Supabase DB에 적용합니다.
supabase db pushSeed script 실행을 위해 MovieLens Latest Dataset의 Full 버전이 필요합니다.
- MovieLens Latest Datasets에서
ml-latest.zip을 다운로드합니다. - 프로젝트 루트에 압축을 해제해
ml-latest디렉터리를 위치시킵니다.
최종 디렉터리 구조는 다음과 같아야 합니다.
cinemate/
├── ml-latest/
│ ├── genome-scores.csv
│ ├── genome-tags.csv
│ ├── links.csv
│ ├── movies.csv
│ ├── ratings.csv
│ └── tags.csv
├── package.json
└── ...
Seed 데이터는 반드시 아래 순서대로 적재합니다. 영화/추천 seed가 먼저 준비되어야 추천 채팅과 캐릭터 채팅 데이터가 정상적으로 연결됩니다.
MovieLens 데이터셋과 TMDB API를 기반으로 DB 적재용 CSV를 생성합니다.
pnpm seed:movie-catalog:generate-csv-from-movielens
pnpm seed:movie-credits:generate-csv-from-tmdb
pnpm seed:movie-recommendation:generate-csv-from-movielens생성된 CSV는 각 seed 디렉터리의 generated 폴더에 저장됩니다.
seeds/movie-catalog/generated/
seeds/movie-credits/generated/
seeds/movie-recommendation/generated/
다음 명령으로 생성된 CSV를 Supabase DB에 적재합니다.
pnpm seed:movie-catalog:upload-csv-to-supabase
pnpm seed:movie-credits:upload-csv-to-supabase
pnpm seed:movie-recommendation:upload-csv-to-supabase추천 채팅은 사용자가 입력한 자연어에서 태그를 추출한 뒤, 해당 태그와 씨네메이트 태그의 의미적 유사도를 비교해 추천 후보를 찾습니다.
이를 위해 미리 씨네메이트 태그에 OpenAI embedding vector를 붙인 seed 데이터를 Supabase DB에 적재합니다.
pnpm seed:recommendation-chat:generate-tag-embedding-file
pnpm seed:recommendation-chat:generate-tag-embedding-vectors
pnpm seed:recommendation-chat:upload-tag-embeddings-to-supabase캐릭터 채팅을 위해 캐릭터 프로필, 캐릭터 이미지, 영화별 사건, 사건별 등장 캐릭터, 캐릭터별 기본 질문 데이터를 미리 Supabase DB와 Storage에 저장합니다.
캐릭터 채팅 seed는 seeds/character-chat/movies/{movieId} 하위의 캐릭터 설정, 사건 설정, 기본 질문 설정, 프롬프트, 이미지 파일을 기반으로 생성합니다.
pnpm seed:character-chat:upload-images
pnpm seed:character-chat:generate-csv
pnpm seed:character-chat:uploadpnpm dev기본 실행 주소는 http://localhost:3000입니다.
| 이름 | 역할 |
|---|---|
| 왕지훈 | BackEnd |
| 이진성 | FrontEnd |
| 서동규 | BackEnd |
| 정다연 | FrontEnd |