9P by GN⁺ 1일전 | ★ favorite | 댓글 1개
  • 창업자 출신 투자자가 20시간 바이브코딩 작업으로 개발한 요리 앱
  • 핵심 기능은 요리 중 손을 사용하지 않고도 조작할 수 있는 음성 비서
  • Rails 8 API 백엔드 + React 프론트엔드 + OpenAI의 실시간 음성 API
  • OpenAI의 함수-호출 기능을 활용하여 사이트 내 실시간 탐색 가능
  • Claude CodeGemini 2.5 Pro를 사용해 복잡한 기능 보완
  • 전체 코드 규모는 약 35,000줄
  • 음성 명령을 통해 사용자가 직접 손을 대지 않고 다양한 레시피 탐색 가능
  • 자연스러운 대화형 인터페이스 제공
  • 취미 프로젝트로 시작했지만, 실제로 유용한 기능과 사용자 경험을 갖춘 수준 높은 결과물이 나옴

Vibecoding으로 요리 앱 완성하기

  • 단 20시간 만에 직접 기획하고 만든 요리 앱 recipeninja.ai
  • 작성자는 스타트업 창업자 출신으로 현재 Y Combinator 소속 투자자이며, 2015년 이후 Ruby를 거의 사용하지 않은 '녹슨 개발자'
  • 평소 요리를 즐기며 “핸즈프리 요리 앱” 아이디어를 오랫동안 보관해왔음
  • 기존 요리 웹사이트는 SEO 중심, 앱들도 UX가 오래되었고, Paprika 같은 앱은 2009년 느낌 그대로라는 불만

도구 선택과 프로젝트 시작

  • 초반에는 Lovable을 이용해 단어 게임 앱을 시도했으나 한계에 부딪힘
  • 이후 Windsurf를 사용해 Rails 8 API 백엔드 + React 프론트엔드 구성
  • Homebrew, npm, Ruby 버전 설정, SSH 키, Heroku 설정까지 자동화
  • Rails 마이그레이션도 표준 규칙에 맞게 자동 처리됨

기본 기능 개발

  • “Lasagne”처럼 간단한 입력으로 전체 레시피 생성
  • OpenAI를 통한 레시피 텍스트 생성, ElevenLabs를 통한 음성 생성
  • 단계별 음성 가이드와 이미지 출력 기능 탑재
  • 보안 위험을 감지한 Windsurf가 API 키 노출 방지를 강하게 요구하는 모습도 인상적이었음

기능 확장 및 반복적인 개발 흐름

  • 사진 기반 “고급 레시피 가져오기” 기능을 수분 내 구현
  • 콘솔 로그나 에러 메시지를 복붙하면 Windsurf가 자동으로 수정
  • Google OAuth 연동 시 설정 스크린샷을 붙여넣자 잘못된 부분을 바로 캐치해줌
  • 사용자별 레시피 저장, 공개/비공개 설정 등 기능 추가도 거의 자동으로 이루어짐

배포 및 DNS 설정

  • Heroku 배포 자동화, 일부 구버전 API 사용 문제는 문서 링크로 해결
  • GoDaddy 도메인 연결도 버튼 누를 위치와 값까지 알려줘 손쉽게 설정 완료

AI 도구로서의 Windsurf 사용 경험

  • 일부 기능은 직접 curl 요청이나 웹 미리보기를 실행해 테스트함
  • Git 커밋과 Heroku 배포도 내장 터미널에서 자동 처리
  • 다만 과도한 변경이나 확인 없는 커밋은 사용자 개입 필요
  • 분석 기능 추가 요청 시 100개 이상의 이벤트를 추가해버리는 등 과잉 반응

아쉬운 점 및 보완점

  • 자동 테스트 기능이 없어 코드 변경 후 직접 테스트 필요
  • 로그 tail 기능이 없어 로그를 수동 복사해 넣어야 N+1 쿼리 등을 감지함
  • 중복 코드 리팩토링은 제대로 작동하지 않음 — 기능 유지하면서 코드만 모듈화하려면 구체적인 지시 필요
  • API 응답 형식이 자주 변경되어 프론트엔드가 깨지는 문제 발생
  • Posthog 분석 도입 실패, 음성 명령이 기존 음성과 충돌하는 문제도 발생

성능 최적화 및 비용 절감

  • 고해상도 이미지 문제 → 썸네일 및 중간 해상도 버전 자동 생성
  • N+1 문제 자동 수정
  • ElevenLabs API 키 백엔드로 이전 및 음성 캐싱 기능 추가로 비용 절감

폭발적인 생산성 향상

  • 매 세션마다 10~15개 기능 아이디어를 리스트업하고 30분 안에 모두 구현
  • 기존이라면 몇 시간 걸릴 작업이 1~2분 안에 구현
  • 디자인 개선도 스크린샷으로 지시만 하면 시각적으로 완성도 높은 UI 생성
  • DoorDash 앱의 캐러셀을 참고해 유사 디자인 구현 — 오히려 더 보기 좋다는 평가도 받음

마무리 작업과 보안 이슈

  • Favicon 설정도 Bash 스크립트로 자동화
  • Twitter 게시 후 수백 명의 사용자 방문, 약 1,000개 레시피 생성
  • 하지만 abuse 사용자에 의해 OpenAI 요금 $700 발생
  • Windsurf가 15개의 방어 전략을 제시해, 10분 만에 대부분 적용하고 문제 해결

향후 계획과 기술적 전망

  • WebSocket 기반 스트리밍 레시피 생성 기능 도입 예정
    • 예: “견과류 추가해줘”, “8인분으로 바꿔줘”, “미터법으로 변환해줘” 같은 지시를 실시간 반영
  • 음성 에이전트 인터페이스도 구축 예정 — 화면 터치 없이 요리 중 질문 가능
    • 예: “고수 없는데 대체할 재료 있어?”, “30분 타이머 설정해줘”
  • 기술적 배경이 있는 사용자에게는 AI 도구가 슈퍼파워가 되어줌
  • 비개발자도 활용 가능한 방향으로 발전 중: 로그 tailing, 자동 테스트, 버전 관리 통합 예정
  • 가까운 미래에는 코드 작성 95%가 AI에 의해 이뤄지는 시대 도래 가능성 언급

RecipeNinja 주요 기능 요약

  • 핵심 개념: 이 앱은 단계별 음성 안내를 제공하는 요리 보조 애플리케이션으로, 사용자가 손을 사용하지 않고도 요리를 진행할 수 있도록 지원함

백엔드 기능 (Rails API 기반)

  • 사용자 인증 및 권한 관리

    • Google OAuth 연동을 통한 로그인 기능
    • 보안이 강화된 사용자 계정 관리
    • 사용자는 자신의 비공개 레시피에만 접근 가능하며, 공개된 레시피만 타인과 공유 가능
  • 레시피 관리 기능

    • 레시피 모델 구성
      • 보안성을 위한 고유 공개 ID 부여 (형식: r_ + 14자리 난수 문자열)
      • 사용자 소유권 명확화 (user_id 필드, NOT NULL 제약)
      • 레시피 공개/비공개 전환 가능 (기본값: 비공개)
      • 제목, 재료, 요리 단계, 조리 시간 등 다양한 정보 저장
      • Active Storage와 S3를 활용한 이미지 업로드 기능 포함
    • 태그 시스템
      • 레시피와 태그 간 다대다(M:N) 관계 구성
      • 태그는 고유 이름을 갖는 별도 모델로 구현
      • 레시피-태그 간 연결을 위한 중간 모델(RecipeTag) 사용
      • 태그 추가 및 제거를 위한 헬퍼 메서드 제공
    • 레시피 API 엔드포인트
      • CRUD 작업 지원
      • 페이지네이션 기능 및 메타데이터 제공 (current_page, per_page 등)
      • 기본 정렬은 생성일 기준 최신순 (created_at DESC)
      • 태그 필터링 기능 지원
      • 목록과 상세 정보를 각각 다른 시리얼라이저로 출력 (RecipeSummarySerializer, RecipeSerializer)
  • 음성 생성 기능

    • 음성 녹음 시스템
      • 각 레시피 단계에 대한 음성 안내 생성
      • Eleven Labs API 연동으로 텍스트를 음성으로 변환
      • 음성 파일은 S3에 캐싱되어 반복 호출 시 API 비용 절감
      • 레시피 ID, 단계 ID, 음성 ID를 조합한 고유 식별자 생성
      • 음성 파일 강제 재생성 기능 제공
    • 오디오 처리
      • streamio-ffmpeg gem을 이용해 오디오 분석 수행
      • Active Storage로 오디오 파일 관리
      • 운영 환경에서는 S3를 활용한 저장 방식 적용
  • 레시피 가져오기 및 생성

    • RecipeImporter 서비스
      • OpenAI 연동을 통한 자동 레시피 생성
      • 텍스트 기반 레시피를 구조화된 형식으로 변환
      • 재료 및 단계를 정규화 및 파싱 처리
      • 사진을 통한 레시피 가져오기 기능 포함

프론트엔드 기능 (React 기반)

  • 사용자 인터페이스 구성 요소

    • 레시피 선택 및 탐색
      • 페이지네이션이 적용된 레시피 목록 조회
      • 10초 간격의 실시간 업데이트 기능
      • 태그 기반 필터링 기능 제공
      • 이미지 없이 요약 정보가 표시되는 레시피 카드 제공
      • 각 레시피에 대해 “상세 보기” 및 “요리 시작” 버튼 제공
  • 레시피 상세 보기

    • 전체 레시피 정보 출력
    • 레시피 이미지 표시
    • 클릭 가능한 태그 목록 제공
    • 해당 페이지에서 직접 요리 시작 가능
  • 요리 중 인터페이스

    • 단계별 요리 가이드 제공
    • 각 단계에 대해 음성 안내 지원
    • 핸즈프리 조작을 위한 키보드 단축키 지원:
      • 방향키(←/→): 단계 이동
      • Space 키: 음성 재생/일시정지
      • ESC 키: 레시피 목록으로 돌아가기
    • URL 경로를 통한 단계 추적 가능 (예: /recipe/r_xlxG4bcTLs9jbM/classic-lasagna/steps/1)

상태 관리 및 데이터 흐름

  • Recipe Service

    • API를 통해 레시피 데이터 불러오기
    • 페이지네이션 파라미터 지원
    • 태그 기반 필터링 기능
    • 레시피 데이터 캐싱 메커니즘 적용
    • 상세 보기에서 사용할 이미지 URL 처리 기능
  • 인증 흐름

    • 환경변수를 활용한 Google OAuth 연동
    • 사용자 세션 관리
    • API 요청 시 인증 헤더 자동 처리

PWA(Progressive Web App) 기능

  • 다양한 기기에서 설치 가능한 PWA 형태 제공
  • 모든 화면 크기에 대응하는 반응형 디자인 적용
  • Favicon 및 앱 아이콘 지원

배포 아키텍처

  • 이중 앱 구조

    • cook-voice-api: Heroku에 배포된 Rails 백엔드
    • cook-voice-wizard: Heroku에 배포된 React 프론트엔드 및 PWA
  • 백엔드 인프라

    • Ruby 3.2.2 버전 사용
    • Heroku PostgreSQL 애드온을 통한 데이터베이스 구성
    • Amazon S3를 활용한 파일 저장
    • 환경변수를 이용한 설정 관리
  • 프론트엔드 인프라

    • React 기반 애플리케이션
    • 환경변수 설정으로 API 키 등 민감 정보 관리
    • Heroku의 정적 빌드팩 사용
    • SPA(Single Page Application) 라우팅 구성
  • 보안 조치

    • HTTPS 강제 적용
    • Rails Credentials 시스템 사용
    • 민감 정보는 환경변수로 분리
    • DB ID 대신 공개용 Public ID 사용으로 내부 구조 보호
Hacker News 의견
  • 인상적임. 35 kLOC는 상당한 양임. 이 앱이 얼마나 직관적이고 유지보수 가능한지 궁금함. 소스를 살펴봐야 할 것임. 좋은 Rails 코드는 간결하지만, 프론트엔드는 상당히 방대할 수 있음

    • 자동화된 테스트와 네이티브 버전 관리가 구현되면 몇 달 내에 가능할 것이라는 의견은 다소 낙관적임. 그러나 결국에는 모두 가능할 것임
    • 비기술적인 사람들이 프로덕션 품질의 앱을 작성할 수 있는 강력한 도구라는 의견에 대해, 비기술적인 사람들이 로그 테일링이나 버전 관리를 생각할 이유가 없다고 봄. AI가 유능한 코더가 되는 것뿐만 아니라, 제품 관리 언어를 소프트웨어 개발 언어로 번역할 수 있는 유능한 아키텍트와 시니어 SWE가 되어야 함. 이는 인간 팀과 비슷한 신뢰성을 갖추기 위해 상당한 도전이 될 것임
  • Diarrhea Walnuts 레시피를 만들었는데 호두 알레르기가 있어서 문제가 생겼다는 의견. 법적 조치를 취할 것임

  • Claude Code가 유용하다는 의견. 그러나 o1 Pro가 디버깅에 더 뛰어나다고 봄

    • Claude Code는 시간이 지나면 문제를 해결하지만, o1 Pro를 더 자주 사용하게 됨
    • o1 Pro와 Claude Code를 비교했을 때, o1 Pro가 더 빠르게 문제를 해결했음. 그러나 Claude Code의 변경 사항을 커밋했으며, o1의 피드백을 사용해 Claude가 잡지 못한 문제를 해결함
  • Jian Yang과 Big Head가 새로운 앱을 만드는 것 같다는 의견

  • 레시피 간소화 웹사이트를 작성한 경험이 있어, 이 프로젝트가 재미있다고 봄. 유지보수 프로젝트에서 엔지니어의 주요 가치는 맥락이라고 생각함. 맥락을 기계에 완전히 넘기면 어떻게 될지 궁금함

    • 작업 요청을 받았는데, 다른 엔지니어가 이미 대부분의 코드를 작성해 하루 만에 완료할 수 있었음
    • 대규모 실험에 동의하며 감사함. Cursor 같은 시스템이 대량의 코드가 거의 사용되지 않는 상황을 어떻게 처리할지 궁금함. 3k LOC가 실수로 중복되면 자동화 시스템이 이를 이해하고 수정할 수 있을지 의문임
  • OpenAI의 실시간 API를 사용한 음성 응답에 대해, 앱이 인기를 끌면 비용 문제로 파산할 수 있다는 우려가 있음. OpenAI 오디오 API를 다른 경우에 사용할 계획이 있어, 이와 관련된 전략이 궁금함

  • 웹사이트에서 재료를 어디서 구할 수 있는지 알려주는 'vibecode'를 만들 수 있는지에 대한 질문. 특정 재료를 찾기 어려움

  • 레시피가 재미있지만, AI가 생성한 것임을 알게 되면 그 창의성이 사라진다는 의견. Comprehensive JavaScript Tutorial이 가장 마음에 듦

  • 주요 기능이 음성 제어인지에 대한 질문. 다른 인기 있는 레시피 웹사이트와 비교했을 때 이 앱을 선택할 이유가 궁금함. 주로 엔지니어링/AI 테스트를 위한 연습인지에 대한 의문

  • 제목에 NSFW를 추가해야 한다는 의견. 첫 페이지에 NSFW 레시피가 50% 이상임