尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
일기를 쓰면 감정을 분석해 지금 볼 만한 영화를 골라주는 서비스 — 상시 서버 비용 없이 운영합니다 -4285F4?logo=googlecloud&logoColor=white) 오늘 쓴 일기를 Gemini가 읽어 감정을 파악하고, 그 감정에 맞는 영화를 TMDB에서 찾아 추천합니다. 추천으로 끝내지 않고 일기와 추천 기록이 남아 지난 감정을 다시 볼 수 있습니다. 기획·프론트·백엔드·배포를 혼자 만들었고, 프론트는 GitHub Pages, 백엔드는 Cloud Run에 올려 상시 서버 비용 없이 운영합니다. 외부 API를 두 곳 호출한다 → async를 기본 지원하는 프레임워크를 골랐다 감정 분석(Gemini)과 영화 조회(TMDB)가 둘 다 네트워크 대기입니다. 한 요청이 두 번의 외부 대기를 순차로 물기 때문에, 대기 구간에서 다른 요청을 처리할 수 있는 구조가 필요했습니다. 그래서 async를 기본 지원하는 FastAPI를 골랐고, Gemini 감정 분석 호출은 generate_content_async로 비동기 처리합니다.檢視完整 README ↗
일기를 쓰면 감정을 분석해 지금 볼 만한 영화를 골라주는 서비스 — 상시 서버 비용 없이 운영합니다
오늘 쓴 일기를 Gemini가 읽어 감정을 파악하고, 그 감정에 맞는 영화를 TMDB에서 찾아 추천합니다. 추천으로 끝내지 않고 일기와 추천 기록이 남아 지난 감정을 다시 볼 수 있습니다.
기획·프론트·백엔드·배포를 혼자 만들었고, 프론트는 GitHub Pages, 백엔드는 Cloud Run에 올려 상시 서버 비용 없이 운영합니다.
| 기능 | 내용 |
|---|---|
| 감정 분석 | 일기에서 핵심 감정을 읽고 그에 맞는 메시지를 함께 제시 |
| 맞춤 영화 추천 | 감정에 맞는 작품을 TMDB에서 선별 |
| OTT 필터 | 구독 중인 OTT(넷플릭스·왓챠 등)에 있는 작품만 보기 |
| 다시 추천 | 마음에 들지 않으면 새 추천 세트를 다시 요청 |
| 내 일기장 | 작성한 일기와 추천 기록을 로컬에 보관해 다시 열람 |
| 상세 정보 | 줄거리·평점·캐스팅과 지금 볼 수 있는 OTT 링크 |
감정 분석(Gemini)과 영화 조회(TMDB)가 둘 다 네트워크 대기입니다. FastAPI를 사용하고 Gemini 호출은 비동기로 처리했습니다. TMDB 조회는 동기 requests로 구현돼 해당 호출 중 이벤트 루프를 차단하며, 전체 외부 호출의 비동기화나 동시 처리 성능은 검증하지 않았습니다.
개인 서비스에 24시간 인스턴스를 띄우면 트래픽이 없어도 비용이 계속 나갑니다. 요청이 있을 때만 실행되는 Cloud Run에 백엔드를 올려 상시 비용을 없앴습니다. 대신 첫 요청은 인스턴스를 올리는 시간이 붙습니다 — 개인 프로젝트에서 비용과 지연 중 비용을 택한 결과입니다.
Gemini·TMDB 키는 서버 환경변수로만 보관하고 브라우저 번들에 넣지 않았습니다. 프론트는 백엔드를 통해서만 외부 API에 닿습니다.
LLM 모델 이름은 계속 바뀌고 특정 모델이 계정·리전에서 안 열릴 수 있습니다. 사용 가능한 모델을 우선순위대로 자동 선택하도록 해서 모델 하나가 막혀도 서비스가 멈추지 않게 했습니다.
TMDB 응답에는 포스터·줄거리·OTT 정보가 빠진 항목이 섞여 있습니다. 누락 필드와 응답 형식 차이를 걸러 추천 결과가 깨진 카드로 나오지 않도록 처리했습니다.
| 영역 | 기술 |
|---|---|
| 프론트 | React 19, Vite, Tailwind CSS, Framer Motion, Lucide React |
| 백엔드 | Python, FastAPI (async) |
| AI | Google Gemini (사용 가능 모델 자동 선택) |
| 데이터 | TMDB API |
| 배포 | 백엔드 Google Cloud Run · 프론트 GitHub Pages |
| 자동화 | GitHub Actions (PR·main 푸시마다 프론트 lint·build와 백엔드 pytest, 프론트 자동 배포) |
.env에 API 키가 필요합니다.
# 백엔드
cd backend && pip install -r requirements.txt && uvicorn main:app --reload
# 프론트
cd frontend && npm install && npm run dev
# 검증 (API 키 없이 실행)
cd backend && pytest -q
백엔드 테스트 6건은 Gemini·TMDB 호출을 대체해 추천·검색·상세 조회의 정상 응답과 빈 일기·빈 검색어·없는 영화의 처리를 확인합니다.
PR과 main 푸시마다 GitHub Actions가 이 테스트와 프론트 lint·build를 실행합니다.
필요한 키: GEMINI_API_KEY(Google AI Studio), TMDB_API_KEY(TMDB)
Jigwan Joe — Backend · Frontend