Dishire 프로토타입에서 구현한 기능
이 페이지에서는 Dishire 프로토타입에서 실제로 구현한 기능과 특징을 정리했습니다. 복합 상황 기반 추천, 다단계 레시피 생성 구조, 사용자 프로필 반영, UI 흐름 등 프로토타입이 갖춘 핵심 기능들을 중심으로 설명합니다.
1. 구현된 핵심 기능 요약
- 복합 상황 기반 추천 유형 정의 및 정적 프롬프트 기반 레시피 생성
- 다단계 LLM 레시피 생성 구조 구현 (제목 → 재료 → 도구 → 단계별 조리 과정)
- 사용자 프로필(식단 제한, 알레르기, 종교 등)을 LLM 입력으로 반영
- FastAPI 백엔드 + React UI를 활용한 프로토타입 구현
2. 다단계 LLM 레시피 생성 구조
레시피를 한 번에 모두 생성하는 방식은 응답 시간이 길어지고, 프롬프트 길이가 크게 증가하는 문제가 있었습니다. 또한 여러 유형의 GPT 모델을 조합해 비용을 낮출 수 있는지 실험하기도 어려웠습니다. 이런 이유로 Dishire 프로토타입에서는 레시피 생성 흐름을 기능별로 나누어 여러 단계로 요청하는 방식을 실험했습니다. 이 접근이 성능적으로 더 우수하다고 단정할 수는 없지만, 단계별 요청 구조가 실제로 어떤 차이를 만들어내는지 확인하기 위한 시도였습니다.
특히 1단계에서는 제목과 간단한 설명을 먼저 생성해, 사용자가 레시피 방향이 마음에 드는지 빠르게 확인할 수 있도록 했습니다. 취향에 맞지 않을 경우 초기 단계에서 다시 요청할 수 있어, 전체 생성 비용을 줄이는 데 도움이 될 수 있습니다.
이후 단계에서는 재료와 조리 도구, 단계별 조리 과정 등 세부 정보를 나누어 생성하는 흐름을 실험했습니다. 프로토타입에서는 재료 대체 추천까지 구현하지는 않았지만, 향후에는 사용자 히스토리와 취향 분석을 기반으로 자동으로 대체 재료를 제안하는 구조로 확장할 수 있다고 보았습니다.
- 1차: 요리 제목, 간단 설명, 난이도, 소요 시간
- 2차: 재료 목록, 필요한 조리 도구
- 3차: 단계별 조리 방법
- 4차: How to eat, 요리 팁, 보관 방법, 생성형 이미지
생성 흐름은 FastAPI 기반 백엔드에서 API 엔드포인트로 구성되었으며, React UI에서 단계별 요청을 보내어 최종 레시피를 조합하는 방식으로 구현했습니다.
3. 복합 상황 기반 추천 흐름
프로토타입에서는 사용자가 직접 “정석 추천”, “재료 기반 추천” 등 원하는 추천 방식을 선택하면 그에 대응하는 프롬프트 템플릿이 실행되는 구조로 설계했습니다. 이는 상황 기반 추천이 실제로 얼마나 유용하게 작동하는지 검증하기 위한 초기 구조였습니다.
장기적으로는 사용자가 메뉴를 선택하는 방식이 아니라, 입력된 텍스트와 프로필 정보를 분석해 시스템이 자동으로 적합한 프롬프트 템플릿을 결정하는 구조를 목표로 했습니다. 예를 들어 “냉장고에 버섯만 있어”라는 입력은 재료 기반 추천으로, “시간 없고 빨리 먹고 싶어”는 난이도·시간 기반 추천으로 자동 분류되는 방식입니다. 프로토타입에서는 이 자동 분류 기능까지는 구현하지 않았지만, 추천 유형별 템플릿의 설계와 흐름 검증을 우선적으로 진행했습니다.
프로토타입에서 구현된 추천 유형
- 정석 추천 — 가장 기본적인 전체 추천 템플릿을 사용해 상황과 관계없이 안정적인 레시피를 반환하는 방식.
- 재료 기반 추천 — 사용자가 입력한 재료를 중심으로 가능한 요리를 생성하도록 설계한 템플릿.
- 상황 기반 추천 — 시간, 난이도 등 간단한 조건을 반영한 템플릿. (예: “10분 안에 만들 수 있는 요리”)
이러한 분리된 추천 구조는 향후 자동 분류 시스템을 구축하기 위한 초석으로, 사용자의 의도 → 추천 유형 → 프롬프트 선택 → 레시피 생성이라는 전체 파이프라인을 실험적으로 정의한 과정이었습니다.
4. 사용자 프로필 정보 반영
Dishire는 단순한 상황 정보 외에도 사용자 프로필을 활용하여 더 맞춤화된 레시피를 생성하는 구조를 실험했습니다.
- 식단 제한(비건, 저탄수, 저염 등)
- 알레르기(예: 견과류 알레르기)
- 종교적 식습관(예: 할랄, 코셔)
이러한 정보들은 정적 프롬프트 템플릿에 포함되어 LLM이 레시피 생성 시 고려할 수 있도록 구성했습니다.
5. UI 프로토타입
React를 사용해 사용자가 상황을 선택하고 레시피를 요청하고 결과를 확인할 수 있는 기본 플로우를 구현했습니다.