목차

정적 React 프로토타입을 직접 실행한 화면. 기능을 검증한 Gradio 앱과는 별도로 만든 모바일 화면이다.
2026년 6월 24일부터 25일까지, KDA4 수업에서 냉털 레시피 챗봇을 만들었다. 기간은 딱 이틀이었다. 큰 서비스를 만든 프로젝트라기보다, “냉장고에 있는 재료만으로 오늘 먹을 한 끼를 골라줄 수 있을까?”라는 아이디어를 빠르게 기능으로 옮겨본 작은 MVP에 가까웠다.
냉장고에 재료는 있는데 메뉴는 없다
출발점은 자취하면서 자주 겪는 상황이었다. 냉장고에 김치, 밥, 계란이 남아 있어도 막상 무엇을 만들어야 할지는 잘 떠오르지 않는다. 레시피를 검색해도 여러 인분 기준이면 양을 다시 계산해야 하고, 조리시간과 난이도까지 확인하다 보면 간단한 한 끼를 고르는 일도 길어진다.
그래서 입력을 메뉴명이 아니라 보유 식재료에서 시작하게 했다. 사용자가 식재료와 제외할 재료, 음식 카테고리를 넣으면 30분 이내이면서 난이도가 쉬운 레시피를 우선 찾는다. 여러 인분으로 적힌 레시피는 가능한 범위에서 1인분으로 환산하고, 예상 칼로리와 원본 링크도 함께 보여주는 흐름을 잡았다.
추천 한 번을 작은 기능으로 나눴다
이틀 안에 모든 것을 한 함수에 넣기보다, 실패 지점을 찾기 쉽도록 추천 과정을 나눴다.
- 입력한 단어를 정리하고 식재료가 아닌 항목을 걸러낸다.
- 보유 재료와 카테고리로 만개의레시피 검색 결과에서 후보를 찾는다.
- 상세 페이지에서 인분, 조리시간, 난이도, 재료와 조리 단계를 읽는다.
- 30분 이내·초급 또는 아무나 조건을 적용한다.
- 재료 양을 1인분 기준으로 환산하고 칼로리를 추정한다.
- 재추천할 때는 이전에 추천한 URL과 중복되는 후보를 제외한다.
OpenAI를 추천 과정 전체에 사용하지는 않았다. 로컬 사전에 있는 재료는 코드로 먼저 판별하고, 사전에 없는 입력의 식재료 여부와 칼로리 추정처럼 애매한 부분에만 보조적으로 사용했다. 검색과 필터링, URL 검증, 1인분 환산처럼 규칙이 분명한 작업은 일반 코드가 맡게 했다.
초기에는 Tavily나 LLM을 이용한 메뉴 검색도 검토했지만, 최종 MVP에서는 만개의레시피 검색 결과 페이지를 직접 읽는 방식으로 범위를 줄였다. 이틀짜리 프로젝트에서는 새로운 기능을 계속 추가하기보다 한 번의 추천이 끝까지 통과하는 것이 더 중요했다.

냉장고 열기 → 재료와 카테고리 입력 → 레시피 결과로 이어지는 화면 흐름. 결과 데이터는 프론트 프로토타입용 mock이다.
기능 화면과 경험 화면을 따로 만들었다
기능을 확인하는 MVP는 Python과 Gradio로 구성했다. 재료 입력칸을 최대 20개까지 늘릴 수 있고, 제외 재료와 음식 카테고리를 입력한 뒤 추천 또는 재추천을 실행하는 구조였다.
별도로 모바일 환경에서 어떤 느낌으로 사용할지 보기 위해 정적 React 프로토타입도 만들었다. 냉장고 문을 열면 재료가 움직이고, 재료를 입력한 뒤 요리 중 화면을 거쳐 결과 카드가 나타난다. 결과에는 메뉴명, 난이도, 조리시간, 예상 칼로리, 조리 단계와 재료를 배치했다.
이 모바일 화면은 백엔드와 통합된 완성 앱이 아니라 사용자 흐름을 확인하기 위한 프로토타입이다. 냉장고를 여는 동작을 첫 화면에 두니, 평범한 입력 폼보다 ‘냉털’이라는 성격이 바로 보였다.

김치·밥·계란과 한식을 선택했을 때의 mock 결과. 실제 추천 파이프라인과 연결하기 전 화면 상태다.
이틀 동안 어디까지 갔나
짧은 프로젝트라 하지 않은 것도 분명했다. 로그인이나 데이터베이스, 사용자별 기록, 장바구니 같은 기능은 범위에서 뺐다. 모바일 React 화면과 Python 추천 파이프라인도 하나의 제품으로 완전히 통합하지는 못했다. 외부 레시피 사이트의 HTML 구조가 바뀌면 파서가 영향을 받을 수 있고, 콘텐츠 표시 범위도 별도로 확인해야 한다.
그래도 문제 정의부터 식재료 검증, 레시피 검색과 파싱, 1인분 환산, 칼로리 추정, 재추천까지 한 번의 흐름으로 정리해볼 수 있었다. 최종 PRD에는 작성 당시 Python 앱이 정상적으로 import되고 Gradio 데모가 생성됐으며, 테스트 86개가 통과했다고 기록돼 있다. 다만 현재 보관된 ZIP에는 Python 코드와 테스트 파일이 없어 같은 결과를 다시 실행해 확인하지는 못했다.
크게 포장할 프로젝트는 아니지만, 이틀 안에 아이디어를 기능과 화면으로 옮겨본 기록으로는 충분히 남길 만했다. 완성도를 무리하게 끌어올리기보다 핵심 흐름을 먼저 만들고, 무엇이 실제 구현이고 무엇이 다음 단계인지 구분하는 연습이 된 작은 프로젝트였다.
