90  레시피 생성기 (Recipe Generator)

웹에서 레시피를 가져오거나 새로운 요리법을 추천해 주는 앱(또는 서비스)을 만들어 봅시다. 사용자가 요리를 만든 후 평점을 매기면, 그에 맞는 더 좋은 레시피를 제안하는 똑똑한 요리 도우미를 목표로 합니다.

이 프로젝트는 웹 스크래핑과 데이터 분류, 그리고 개인화된 추천 엔진을 구축하는 방법을 익히기에 아주 좋습니다. 특히 냉장고에 있는 재료만으로 가능한 요리를 추천하는 독창적인 시스템을 설계해 보세요.

90.1 주요 개발 포인트

  • 레시피 데이터 수집 (Web Scraping): 만개의레시피, AllRecipes 등 요리 사이트에서 데이터를 가져옵니다.
  • 재료 기반 검색 (Ingredient-based Search): 사용자가 입력한 재료로 만들 수 있는 최적의 레시피를 찾아줍니다.
  • 사용자 취향 모델링: 평점이 높은 레시피의 특징(매운 정도, 조리 시간, 칼로리 등)을 분석하여 추천합니다.
  • 조리 단계 및 이미지 표시: 텍스트와 이미지를 활용하여 단계별 조리 과정을 상세히 보여줍니다.
  • 사용자 인터페이스 (GUI): 즐겨찾기 기능과 나만의 레시피 노트를 포함한 깔끔한 UI를 구축합니다.

90.2 Python 구현 예시 (간단한 재료 기반 레시피 추천 시나리오)

import random

class RecipeGenerator:
    """
    보유한 재료와 사용자의 취향을 분석하여 최적의 레시피를 제안합니다.
    """
    def __init__(self):
        self.recipes = [
            {"name": "김치볶음밥", "ingredients": ["김치", "밥", "계란"], "time": "15분"},
            {"name": "된장찌개", "ingredients": ["된장", "두부", "호박", "양파"], "time": "20분"},
            {"name": "계란말이", "ingredients": ["계란", "파", "소금"], "time": "10분"},
            {"name": "불고기", "ingredients": ["소고기", "간장", "양파", "설탕"], "time": "30분"}
        ]

    def recommend_by_ingredients(self, my_ingredients):
        """
        보유한 재료와 가장 많이 겹치는 레시피를 찾아 추천합니다.
        """
        print(f"보유 중인 재료: {', '.join(my_ingredients)}")
        
        best_match = None
        max_overlap = 0
        
        for r in self.recipes:
            overlap = len(set(my_ingredients) & set(r['ingredients']))
            if overlap > max_overlap:
                max_overlap = overlap
                best_match = r
        
        if best_match:
            print(f"추천 레시피: {best_match['name']} (조리 시간: {best_match['time']})")
            print(f"필요한 재료: {', '.join(best_match['ingredients'])}")
        else:
            print("보유한 재료로 만들 수 있는 레시피를 찾을 수 없습니다.")
        return best_match

if __name__ == "__main__":
    generator = RecipeGenerator()
    
    # 재료 기반 추천 테스트
    my_stuff = ["김치", "계란", "치즈", "라면"]
    generator.recommend_by_ingredients(my_stuff)
    
    # 팁: 이미지 인식을 통해 냉장고 안의 재료를 자동으로 파악하는 기능을 추가해 보세요.
    print("\n[팁] OpenAI API의 비전 기능을 활용하면 훨씬 정교한 레시피 생성이 가능합니다.")