AI를 활용한 Rails 앱 개발: 동적 OG 이미지 구현과 배포 문제 해결 분투기

Vibe coding my Rails travel app -- UX improvements & adding country notes

작성자
Ruby AI News
발행일
2025년 12월 28일

핵심 요약

  • 1 AI (Claude Opus 4.5)를 활용하여 Rails 여행 히트맵 앱에 동적 OG 이미지 기능을 추가하려 했으나 배포 과정에서 난항을 겪었습니다.
  • 2 Render 무료 티어의 Docker 런타임 환경에서 Puppeteer 및 RSVG convert를 이용한 이미지 생성 시 메모리 및 시간 초과, 대용량 SVG 파일 문제에 직면했습니다.
  • 3 2시간 동안 지속된 디버깅과 반복적인 배포 시도에도 불구하고, 최종적으로 OG 이미지 기능 구현에 실패하며 AI 기반 개발의 복잡성과 한계를 경험했습니다.

도입

스트리머 브리아나는 자신의 첫 Rails 애플리케이션인 '여행 히트맵' 앱 개발을 '바이브 코딩' 방식으로 이어갑니다. GitHub Codespaces와 Claude Opus 4.5를 활용하는 이번 세션의 주요 목표는 앱의 소셜 공유 기능을 개선하는 것입니다. 특히, 사용자의 개인화된 여행 지도를 소셜 미디어에 공유할 때 링크 미리보기(OG 이미지)로 동적인 지도가 표시되도록 구현하는 데 중점을 둡니다. 이는 앱의 사용자 경험과 개인화를 강화하기 위한 중요한 단계였습니다.

브리아나가 개발 중인 Rails 여행 앱은 사용자가 방문한 국가와 각 국가의 방문 횟수를 히트맵 형태로 시각화하는 도구입니다. 사용자는 국가를 추가/삭제하고, 방문 횟수를 기록하며, 거주 국가를 설정하고, 자신의 지도를 친구들과 공유할 수 있습니다. 현재 앱은 기본적인 지도 표시 및 공유 기능은 갖추고 있으나, 소셜 미디어 공유 시 더욱 매력적인 미리보기 이미지를 제공하고자 합니다.

OG 이미지 구현 시도 및 기술적 난관

  1. 초기 접근 방식 (Grover Gem & Puppeteer)
    • 브리아나는 처음에 Grover Gem(Puppeteer의 Ruby 래퍼)을 사용하여 동적으로 지도를 정적 이미지(JPEG)로 렌더링하는 방식을 시도했습니다.
    • Image Proxy Gem의 사용 가능성을 AI에 문의했으나, 기존 이미지 변환용이므로 동적 지도 렌더링에는 부적합하다는 답변을 받았습니다.
  2. 배포 환경 전환 및 문제 발생 (Render & Docker)
    • Grover Gem을 사용하기 위해 Render 배포 환경을 기존 Ruby 런타임에서 Docker 런타임으로 전환해야 했습니다. 이 과정에서 Dockerfile에 Chrome, Node.js, Puppeteer 설치 스크립트를 추가하고, render.yaml 파일을 업데이트하는 복잡한 작업을 진행했습니다.
    • 그러나 Render의 무료 티어는 제한된 메모리와 리소스를 제공하여, Docker 이미지 빌드 및 Puppeteer 실행 시 메모리 부족 및 시간 초과 문제가 발생했습니다. 배포 시간 또한 예상보다 훨씬 길어져 개발 흐름을 방해했습니다.
  3. SVG 기반 대체 시도 (RSVG convert)
    • Puppeteer 방식이 지속적인 500 에러와 Chrome 실행 문제로 실패하자, AI는 SVG를 직접 OG 이미지로 제공하는 RSVG convert 기반의 접근 방식을 제안했습니다. SVG는 대부분의 소셜 미디어 플랫폼에서 OG 이미지로 지원됩니다.
    • 하지만 초기 RSVG convert 시도에서도 문제가 발생했습니다. GeoJSON 데이터의 복잡성으로 인해 생성되는 SVG 파일의 크기가 7MB에 달하여 Render의 무료 티어에서 처리하기에 너무 컸습니다. 이로 인해 RSVG convert 역시 타임아웃되거나 메모리 부족으로 실패했습니다.

지속적인 디버깅과 좌절

  • 브리아나는 수많은 커밋과 배포, 에러 로깅 추가, 라우팅 및 컨트롤러 액션 검토를 반복했습니다. 특히 allow_browser_versions 메서드 오버라이드 문제, 컨트롤러 내 예외 처리 로직 오류 등 다양한 코드 레벨의 버그를 해결하려 노력했습니다.

  • Render의 느린 배포 속도와 캐싱 문제로 인해 변경 사항을 즉시 확인하기 어려웠으며, 이는 디버깅 과정을 더욱 어렵게 만들었습니다. 로컬에서는 작동하는 코드가 프로덕션 환경에서만 오류를 일으키는 상황이 반복되었습니다.

  • 2시간에 걸친 노력에도 불구하고, OG 이미지 기능은 최종적으로 성공적으로 배포되지 못했습니다. 대용량 SVG 문제, RSVG convert의 타임아웃/메모리 부족, 그리고 컨트롤러 로직 내의 예외 처리 및 라우팅 문제가 복합적으로 작용하며 해결되지 않은 채 세션이 종료되었습니다.

결론

2시간에 걸친 '바이브 코딩' 세션 동안, 브리아나는 Rails 앱의 OG 이미지 기능을 구현하기 위해 끈질기게 디버깅하고 배포를 시도했습니다. 그러나 Render의 무료 티어 환경 제약, Puppeteer 및 RSVG convert 사용 시 발생하는 대용량 이미지 처리 문제, 그리고 AI가 제시하는 솔루션의 한계 등으로 인해 결국 목표를 달성하지 못했습니다. 이번 경험은 AI 기반 개발이 프로토타이핑에는 유용할 수 있으나, 복잡한 배포 환경 및 성능 최적화가 필요한 실제 프로덕션 수준의 기능을 구현할 때는 여전히 많은 수동 디버깅과 깊이 있는 기술 이해가 필요함을 보여줍니다. 또한, 때로는 진행하던 작업을 중단하고 초기 단계부터 다시 시작하는 것이 더 효율적일 수 있다는 교훈을 얻으며 세션을 마무리했습니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!