냉장고 속 재료와 유통기한을 기준으로, 지금 당장 해먹을 수 있는 현실적인 레시피를 추천해주는 서비스
"오늘 뭐 해먹지?" — 매일 반복되는 이 고민, 한 번쯤 해보셨을 거예요.
많은 사람들이 요리를 못하는 이유는 "레시피가 없어서"가 아니라 "지금 내 상황에 맞는 레시피가 없어서" 입니다.
- 🥬 냉장고에 뭐가 있는지 모르겠고
- ⏰ 유통기한 지나서 버리는 재료가 아깝고
- 🍽️ 자취·통학으로 매일 끼니 챙기기는 막막하고
- 📱 레시피 앱은 너무 많은데, 정작 "지금 내가 만들 수 있는 것"은 알려주지 않죠
레시픽은 이 문제에서 출발했습니다. 지금 내 냉장고 기준, 내 식습관 기준, 내 요리 실력 기준으로 — "지금 가능한 선택지" 를 제안하는 서비스예요.
| 가치 | 설명 |
|---|---|
| 🥗 현실적인 추천 | 지금 내 냉장고에 있는 재료로 실제로 만들 수 있는 레시피만 보여줍니다 |
| 🛡️ 안전한 추천 | 알러지, 비건, 기피 식재료를 원천 차단해서 추천합니다 |
| ♻️ 낭비 최소화 | 유통기한 임박 식재료를 사용하는 레시피를 우선 추천해 음식물 쓰레기를 줄입니다 |
| 📈 지속적 개인화 | 요리 일지를 쌓을수록 내 취향에 맞는 추천이 점점 정확해집니다 |
- 일반 로그인 + 소셜 로그인 (Google · Kakao · Naver) — JWT 기반 인증
- 취향 설정: 알러지, 기피 식재료, 요리 숙련도 (초보/중급/숙련)
- 비회원도 레시피 검색 및 상세 조회 가능 (찜·일지 등은 로그인 필요)
- 카테고리 기반 선택형 등록 (채소 / 육류 / 해산물 / 유제품 / 가공식품 / 기타 …)
- 리스트에 없는 식재료는 직접 추가 가능
- 유통기한은 선택 입력 — 입력하지 않아도 추천은 정상 작동
- 한국어/영어 식재료 자동 매핑 (Spoonacular API 연동을 위한 다국어 처리)
- 키워드 검색 — 메뉴명 / 재료명으로 자유롭게 검색
- 맞춤 추천 — 보유 식재료 + 유통기한 + 알러지 + 숙련도 종합 반영
- 두 데이터 소스 통합 활용
- 🇰🇷 식품의약품안전처 공공데이터 (한식 레시피 1,146개)
- 🌍 Spoonacular API (해외 레시피)
- 영문 레시피는 자동 한글 번역 후 노출
- 단계별 조리법 표시
- 단계 중간 타이머 기능 (프론트엔드)
- 한글 제목 우선 표시 (해외 레시피도 번역본 노출)
- 조리 완료 → 일지 작성으로 자연스럽게 연결
- 별점 · 체감 난이도 · 메모 · 사진 기록
- 월별 캘린더 조회 / 상세 조회
- 인스타 스토리 공유 (9:16 비율 이미지 자동 생성)
- 이번 요리로 소진한 식재료 자동 차감
- 임박 식재료 푸시 알림
- 헤더 종모양 아이콘 알림 탭에서 모아보기
- 임박 재료 활용 레시피를 홈 추천에 상단 우선 노출
레시픽의 핵심은 4가지 요소를 가중치로 종합하는 추천 점수 시스템입니다.
총점 = (재료 매칭 45%) + (유통기한 임박도 40%) + (난이도 적합도 10%) + (개인화 5%)
| 점수 요소 | 가중치 | 설명 |
|---|---|---|
| 🥕 재료 매칭 | 45% | 보유 재료와 레시피 재료의 일치율. 부족한 재료가 적을수록 높은 점수 |
| ⏰ 유통기한 임박도 | 40% | 임박 식재료를 사용하는 레시피일수록 가산점 (낭비 방지 핵심 가중치) |
| 🎚️ 난이도 적합도 | 10% | 사용자 숙련도와 레시피 난이도의 거리 |
| 👤 개인화 | 5% | 요리 일지 누적 기반 선호 패턴 반영 |
추천 결과는 사용자가 한눈에 우선순위를 파악할 수 있도록 3개 그룹으로 분류됩니다.
| 카테고리 | 라벨 | 조건 |
|---|---|---|
| 🚨 | 소비기한 임박 레시피 | 임박/만료 재료를 활용하는 레시피 |
| ✅ | 지금 바로 만들 수 있어요 | 부족한 재료 0개 |
| 🛒 | 재료 1-2개만 있으면 가능해요 | 1~2개 추가 재료만 필요 |
필터링 우선순위: ① 알러지/기피 식재료 제외 → ② 점수 계산 → ③ 카테고리 분류 → ④ 정렬
| 영역 | 기술 |
|---|---|
| Language | Python 3.11 |
| Framework | Django 5.2 · Django REST Framework 3.15 |
| Auth | SimpleJWT (Access/Refresh 토큰) + Django Allauth |
| Database | PostgreSQL (운영) · SQLite (개발) |
| Cache | File-based Cache (Redis 전환 준비 완료) |
| Storage | AWS S3 (django-storages + boto3) |
| Static | WhiteNoise (압축·캐시 헤더 자동 처리) |
| API Docs | drf-yasg (Swagger / ReDoc) |
- HTML5 · CSS3 · Vanilla JavaScript
- Django Templates 기반 SSR + AJAX
- 🌍 Spoonacular API — 해외 레시피 데이터
- 🇰🇷 식품의약품안전처 공공데이터 — 한식 레시피 1,146개
- 🌐 deep-translator / googletrans — 영↔한 자동 번역
- Docker + docker-compose
- AWS Elastic Beanstalk (배포)
- AWS RDS (PostgreSQL)
- AWS S3 (미디어 파일)
- Gunicorn (WSGI 서버)
Recipick/
├── config/ # Django 프로젝트 설정
│ ├── settings.py # 환경별 분기 (SQLite ↔ RDS, S3, JWT, CORS 등)
│ └── urls.py # 메인 라우팅 + Swagger
│
├── users/ # 👤 회원 · 인증 · 프로필
│ ├── models.py # User, UserProfile, SocialAccount
│ └── views.py # 일반/소셜 로그인, 마이페이지
│
├── ingredients/ # 🥦 식재료 마스터 / 사용자 보유 / 카테고리
│ ├── models.py # IngredientCategory, IngredientMaster,
│ │ # IngredientNameMapping, UserIngredient
│ ├── utils/ # 한↔영 식재료 매퍼
│ └── views.py
│
├── recipes/ # 🍳 레시피 · 추천 · 검색
│ ├── models.py # Recipe, RecipeIngredient, FavoriteRecipe
│ ├── utils.py # 추천 알고리즘 핵심 로직
│ ├── services/
│ │ ├── spoonacular.py # Spoonacular API 클라이언트
│ │ └── translator.py # 영문 레시피 자동 번역
│ └── management/commands/
│ ├── setup_recipick.py # 통합 초기 셋업
│ ├── load_korean_recipes.py # 한식 1,146개 적재
│ └── fetch_and_translate_recipes.py
│
├── logs/ # 📓 요리 일지
│ └── models.py # RecipeLog (별점, 난이도, 메모, 사진, 공유 이미지)
│
├── templates/ # Django 템플릿
├── static/ # CSS · JS · 이미지 · 폰트 · 사운드
├── fixtures/ # 초기 데이터 (카테고리, 식재료)
│ ├── categories.json
│ └── ingredients.json
├── foodsafetykorea.json # 식약처 한식 원본 데이터
├── hardcoded_recipes.json # 큐레이션 한식 레시피
│
├── Dockerfile
├── docker-compose.dev.yml
└── requirements.txt
- Python 3.11+
- PostgreSQL 14+ (또는 SQLite로 빠른 시작 가능)
- Docker (선택)
- Spoonacular API Key — 발급 받기
git clone https://github.com/your-org/Recipick.git
cd Recipick루트 디렉토리에 .env 파일을 만들고 아래 값을 채워주세요.
# Django
SECRET_KEY=your-secret-key-here
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
# Database (선택 — 미설정 시 SQLite 자동 사용)
DB_NAME=recipick
DB_USER=postgres
DB_PASSWORD=your-password
DB_HOST=localhost
DB_PORT=5432
# Spoonacular API
SPOONACULAR_API_KEY=your-spoonacular-key
# AWS S3 (운영 환경)
AWS_ACCESS_KEY_ID=your-aws-key
AWS_SECRET_ACCESS_KEY=your-aws-secret
# Social OAuth
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REDIRECT_URI=...
KAKAO_CLIENT_ID=...
KAKAO_CLIENT_SECRET=...
KAKAO_REDIRECT_URI=...
NAVER_CLIENT_ID=...
NAVER_CLIENT_SECRET=...
NAVER_REDIRECT_URI=...
# CORS
CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8000# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 패키지 설치
pip install -r requirements.txt
# DB 마이그레이션
python manage.py migrate
# 🍱 초기 데이터 세팅 (카테고리 + 식재료 + 한식 레시피 1,146개)
python manage.py setup_recipick
# 관리자 계정 생성 (선택)
python manage.py createsuperuser
# 개발 서버 실행 🎉
python manage.py runserver브라우저에서 http://127.0.0.1:8000 으로 접속하세요!
docker-compose -f docker-compose.dev.yml up --buildsetup_recipick 명령어는 다양한 옵션을 지원합니다.
# 전체 셋업 (기본)
python manage.py setup_recipick
# 일부 단계만 건너뛰기
python manage.py setup_recipick --skip-fixtures # fixtures 건너뛰기
python manage.py setup_recipick --skip-mappings # 식재료 매핑 건너뛰기
python manage.py setup_recipick --skip-recipes # 한식 레시피 로드 건너뛰기
# Spoonacular API 연결 테스트
python manage.py setup_recipick --test-spoonacular
# 테스트 사용자 + 샘플 식재료 생성
python manage.py setup_recipick --create-test-user서버 실행 후 아래 URL에서 자동 생성된 API 문서를 확인할 수 있습니다.
- Swagger UI: http://127.0.0.1:8000/swagger/
- ReDoc: http://127.0.0.1:8000/redoc/
👤 회원 / 인증
| Method | Endpoint | 설명 | Auth |
|---|---|---|---|
| POST | /api/users/signup/ |
회원가입 | ❌ |
| POST | /api/users/login/ |
로그인 | ❌ |
| POST | /api/users/social/login/{provider}/ |
소셜 로그인 | ❌ |
| POST | /api/users/token/refresh/ |
토큰 재발급 | ❌ |
| POST | /api/users/logout/ |
로그아웃 | ✅ |
| GET | /api/users/me/ |
내 정보 조회 | ✅ |
| PATCH | /api/users/me/ |
내 정보 수정 (취향 포함) | ✅ |
| DELETE | /api/users/me/ |
회원 탈퇴 | ✅ |
| GET | /api/users/check-nickname/ |
닉네임 중복 확인 | ❌ |
🥦 식재료
| Method | Endpoint | 설명 | Auth |
|---|---|---|---|
| GET | /ingredients |
식재료 마스터 목록 | ❌ |
| GET | /ingredients/categories |
카테고리 목록 | ❌ |
| GET | /ingredients/search?keyword= |
자동완성 검색 | ❌ |
| POST | /user-ingredients |
내 식재료 등록 | ✅ |
| GET | /user-ingredients |
내 식재료 조회 | ✅ |
| GET | /user-ingredients/expiring |
유통기한 임박 식재료 | ✅ |
| PATCH | /user-ingredients/{id} |
식재료 수정 (유통기한 등) | ✅ |
| PATCH | /user-ingredients/{id}/consume |
소비 처리 | ✅ |
| DELETE | /user-ingredients/{id} |
삭제 | ✅ |
🍳 레시피
| Method | Endpoint | 설명 | Auth |
|---|---|---|---|
| GET | /recipes?sort=recommend |
추천순 레시피 목록 | ❌ |
| GET | /recipes/{id} |
레시피 상세 | ❌ |
| GET | /recipes/search?keyword= |
레시피 검색 | ❌ |
| POST | /recipes/{id}/favorite |
찜하기 / 취소 | ✅ |
| GET | /recipes/favorites |
찜한 레시피 목록 | ✅ |
📓 요리 일지
| Method | Endpoint | 설명 | Auth |
|---|---|---|---|
| POST | /api/logs/ |
일지 작성 | ✅ |
| GET | /api/logs/ |
월별 일지 조회 | ✅ |
| GET | /api/logs/{id}/ |
일지 상세 | ✅ |
| PATCH | /api/logs/{id}/ |
일지 수정 | ✅ |
| DELETE | /api/logs/{id}/ |
일지 삭제 | ✅ |
- 사용자 정보 설정 (알러지 / 기피 재료 / 숙련도)
- 식재료 카테고리 기반 등록 + 직접 추가
- 보유 식재료 + 유통기한 기반 추천
- 키워드 레시피 검색
- 한식 + 해외 레시피 통합
- 요리 일지 작성 / 조회 / 인스타 공유
- 유통기한 임박 알림
- 📸 사진 인식 기반 식재료 자동 등록
- 🎥 레시피 설명 영상 / 영상 일지
- 🍴 보유 조리 도구 기반 필터링 고도화
- 🤝 요리 일지 커뮤니티 / 팔로우 기능
이 프로젝트는 5명의 팀원이 협업하여 개발했습니다.
이 프로젝트는 학습 및 포트폴리오 목적으로 제작되었으며, MIT 라이선스를 따릅니다.
레시피 데이터 출처: