MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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