Fridge Oracle: 친구에게 선물한 레시피 도우미 (노트북에서 작동)
요약
냉장고 재료와 개인의 식단 제약 조건(예: 유당불내증)을 입력하면, 해당 조건을 만족하는 레시피를 제공하는 'Fridge Oracle' 앱을 소개합니다. 이 앱은 민감한 건강 정보를 외부 API로 전송하지 않고, Ollama를 통해 Gemma 3 모델을 로컬 환경에서 구동하여 개인 정보 보호와 오프라인 사용성을 극대화했습니다.
핵심 포인트
- 개인 식단 제약 조건을 고려하는 레시피 도우미 개발.
- Ollama를 활용해 Gemma 3 모델을 로컬 PC에서 실행 가능.
- 민감한 건강 정보를 외부 클라우드 API로 전송하지 않아 개인 정보 보호에 강점.
이것은 제가 참여한 Hacktoberfest 주말 챌린지 '친구를 위한 제작(Build for a Friend)'에 대한 제출물입니다.
데모
실제 앱을 제 노트북에 직접 타이핑하여 시작부터 끝까지 어떻게 보이는지 보여드리겠습니다. 저는 냉장고에 무엇이 있고 제가 유당불내증(lactose intolerant)이라는 것만 입력하고 전송 버튼을 누릅니다. Gemma 3가 잠시 생각한 후 (GPU 없이 CPU로 실행되므로 2분도 채 걸리지 않습니다), 결과가 돌아오는데 실제로 치즈와 버터가 포함되어 있어 올바르게 플래그가 지정됩니다.
챌린지는 말하기는 간단하지만 잘 수행하기는 어렵습니다. 아는 사람이 실제로 겪고 있는 문제를 선택하세요. 이를 해결하는 데 오픈 소스 AI를 사용하는 작은 무언가를 만드세요. 가짜 사용 사례나 지어낸 사용자 이야기는 안 됩니다.
문제점
많은 사람들이 냉장고에 남은 재료로 요리하며, 또한 알레르기나 절대 어길 수 없는 식단 규칙을 가진 사람들도 많습니다. 유당불내증, 견과류 알레르기, 할랄(halal), 비건(vegan) 등 무엇이든 상관없습니다. 일반적인 레시피 앱은 사용자의 제약 조건을 모릅니다. 여전히 모든 레시피를 직접 읽고 안전한지 확인해야 합니다.
그래서 저는 Fridge Oracle을 만들었습니다. 사용자님이 냉장고에 있는 재료와 먹을 수 없는 것을 입력하면, 이 두 가지 조건에 맞는 하나의 레시피를 제공합니다.
로컬에서 작동해야 하는 이유
이 부분이 '오픈 소스 AI' 챌린지 측면에서 가장 중요합니다.
알레르기 및 건강 정보는 개인적인 문제입니다. 저는 낯선 사람의 식단 제한 정보를 단순히 레시피를 받기 위해 회사 API로 보내고 싶지 않았습니다. 그래서 Fridge Oracle은 클라우드 AI를 전혀 호출하지 않습니다. Ollama라는 무료 도구를 통해 Google의 Gemma 3 모델을 사용자님의 컴퓨터에서 완전히 실행합니다.
이것이 제공하는 이점:
- 개인 정보 보호: 입력한 내용이 기기를 벗어나지 않습니다.
- 무료: API 키도, 청구서도, 사용량 제한도 없습니다.
- 오프라인 작동: 모델을 한 번 다운로드하면 인터넷 연결이 필요하지 않습니다.

Fridge Oracle을 내 노트북에서 실행해봤다. 이 모델은 치즈와 버터 레시피가 유당불내증(lactose intolerant)인 사람을 위한 것이라고 했는데, 실제로는 그렇지 않았다. 계속 읽어봐라. 그 버그가 다음 섹션 전체를 차지한다.
구축 과정과 중요한 버그
이 경험에 대해 솔직하게 말하고 싶다. 왜냐하면 솔직한 부분이 바로 실제로 흥미로운 부분이기 때문이다.
나는 Ollama를 통해 Gemma 3 (4B)라는 로컬 모델을 설정했고, 시스템 프롬프트(system prompt)를 작성하여 사용자 제한 사항을 위반하는 음식은 절대 제안하지 않도록 지시했으며, JSON 형식으로 답변하도록 요청했다. 첫 시도에는 작동했다. 나는 키친 박스에
두 번째로 작은 버그를 고치면서: 모델이 때때로 필드에 문자 그대로의 'empty string' 또는 'empty array'라는 단어를 작성했습니다. 이는 제가 프롬프트에서 빈 필드가 어떻게 보여야 하는지 설명하기 위해 사용한 자리 표시자 텍스트였기 때문입니다. 모델이 비어 있어야 할 필드를 공백으로 두는 대신, 제 지침을 그대로 인용하고 있었던 것입니다. 이 문제를 해결하기 위해 해당 정확한 구문을 빈 값으로 처리하는 작은 필터를 추가했습니다.
제가 이 경험에서 모든 미래 AI 프로젝트에 적용할 교훈은 다음과 같습니다: 모델이 스스로 주장하는 안전성 검증을 마지막 점검 단계로 절대 두지 마십시오. 만약 잘못된 답변이 누군가에게 해를 끼칠 수 있다면, 모델이 말을 마친 후 읽고 신뢰할 수 있는 일반 코드로 이를 검증해야 합니다.
작동 방식
app/page.tsx: 폼입니다. 냉장고 내용물, 제한 사항, 분위기 등을 입력합니다.app/api/suggest/route.ts: 이 내용을 Gemma 3에 전송하여localhost:11434에서 Ollama의 API를 통해 로컬로 실행하고, JSON 형식으로 레시피 하나를 요청합니다.lib/safety.ts: 위에서 설명한 일반 키워드 안전장치입니다. 이 코드는 모델이 작동할 때마다 예외 없이 항상 실행됩니다.
공개 URL에 없는 이유
이는 의도적인 것이지, 제가 시간을 부족해서 고치지 못한 제한 사항은 아닙니다. 이 앱의 가치는 사용자의 알레르기 정보가 컴퓨터 내에 남아 있다는 점입니다. 이를 공유되는 공용 서버에 올린다는 것은 두 가지를 의미합니다. 첫째, 모델을 다른 사람의 클라우드 공간에서 실행해야 하므로(
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기