프로젝트 요약
GPTs를 활용해 사용자가 요리 이름이나 재료를 입력하면,
해당 재료를 활용한 다양한 레시피를 추천해주는 API 서비스를 구현했다.
GPTs의 직접적인 API 호출 제한을 우회하기 위해
FastAPI와 Cloudflare 터널을 이용해 GPT에서 접근 가능한 HTTP 엔드포인트를 생성했다.
사용 기술 스택
- GPTs: 질의 기반 응답 처리
- Cloudflare Tunnel: 외부에서 접근 가능한 서버 주소 생성
- FastAPI: Python 기반 경량 웹 프레임워크
- LangChain: Pinecone 벡터 검색 연결
- Pinecone: 레시피 임베딩 벡터 검색
- JWT: 사용자 인증 토큰
- OAuth2.0: 인증 흐름
주요 구현 요소
1️⃣ 사용자 인증 시스템
- JWT 기반 토큰 발급 및 검증
- OAuth2 인증 흐름 (
/authorize → /token)
- 메모리 기반 사용자 등록 및 로그인
- 인증된 사용자만 API 접근 허용
2️⃣ 레시피 검색 시스템
- 사용자가 입력한 재료를 임베딩하여 벡터 유사도 기반으로 레시피 추천
PineconeVectorStore를 통해 미리 임베딩된 레시피 검색
- LangChain의
similarity_search() 사용
3️⃣ 즐겨찾기 기능
- 로그인한 사용자가 레시피를 즐겨찾기에 저장 가능
/favorites 엔드포인트로 저장된 레시피 HTML 뷰 제공
작동 흐름
1. GPTs → FastAPI 레시피 검색
- GPTs가
/recipes?ingredient=감자로 API 호출
- Pinecone을 통해 벡터 검색 실행
- 가장 유사한 레시피 반환
- GPTs가 응답 생성
2. 사용자 인증 흐름
- 처음 호출 시 로그인 페이지로 리다이렉트 (
/authorize)
- 사용자 등록/로그인
- code 발급 →
/token 요청 → access_token 발급
- 이후 모든 요청은
Authorization: Bearer {token} 사용
3. 즐겨찾기 저장
/add_favorite: JSON 형태로 레시피 등록
/favorites: 사용자 즐겨찾기 목록 HTML로 렌더링
테스트 예시
로그인 및 인증


- 사용자는 링크를 통해 로그인 페이지로 이동 후 인증 수행
- 로그인 성공 시 GPT로 리다이렉트
레시피 검색 결과


회고
- 메모리 기반 인증이지만 JWT 인증 로직을 실제로 구현해보며
작년 팀 프로젝트에서 아쉬웠던 인증 시스템을 보완할 수 있었다.
- FastAPI의 자동 API 문서화 기능(OpenAPI)은 테스트 및 프론트 연동에도 유용했고,
- GPTs와 연동 가능한 구조로 확장성을 확보한 점도 의미 있었다.
전체 코드
👉 전체 코드 보기 (GitHub Gist)