브리아나가 개발 중인 Rails 여행 앱은 사용자가 방문한 국가와 각 국가의 방문 횟수를 히트맵 형태로 시각화하는 도구입니다. 사용자는 국가를 추가/삭제하고, 방문 횟수를 기록하며, 거주 국가를 설정하고, 자신의 지도를 친구들과 공유할 수 있습니다. 현재 앱은 기본적인 지도 표시 및 공유 기능은 갖추고 있으나, 소셜 미디어 공유 시 더욱 매력적인 미리보기 이미지를 제공하고자 합니다.
OG 이미지 구현 시도 및 기술적 난관
- 초기 접근 방식 (Grover Gem & Puppeteer)
- 브리아나는 처음에
GroverGem(Puppeteer의 Ruby 래퍼)을 사용하여 동적으로 지도를 정적 이미지(JPEG)로 렌더링하는 방식을 시도했습니다. Image ProxyGem의 사용 가능성을 AI에 문의했으나, 기존 이미지 변환용이므로 동적 지도 렌더링에는 부적합하다는 답변을 받았습니다.
- 브리아나는 처음에
- 배포 환경 전환 및 문제 발생 (Render & Docker)
GroverGem을 사용하기 위해Render배포 환경을 기존 Ruby 런타임에서 Docker 런타임으로 전환해야 했습니다. 이 과정에서 Dockerfile에 Chrome, Node.js, Puppeteer 설치 스크립트를 추가하고,render.yaml파일을 업데이트하는 복잡한 작업을 진행했습니다.- 그러나
Render의 무료 티어는 제한된 메모리와 리소스를 제공하여, Docker 이미지 빌드 및 Puppeteer 실행 시 메모리 부족 및 시간 초과 문제가 발생했습니다. 배포 시간 또한 예상보다 훨씬 길어져 개발 흐름을 방해했습니다.
- SVG 기반 대체 시도 (RSVG convert)
- Puppeteer 방식이 지속적인 500 에러와 Chrome 실행 문제로 실패하자, AI는 SVG를 직접 OG 이미지로 제공하는
RSVG convert기반의 접근 방식을 제안했습니다. SVG는 대부분의 소셜 미디어 플랫폼에서 OG 이미지로 지원됩니다. - 하지만 초기
RSVG convert시도에서도 문제가 발생했습니다. GeoJSON 데이터의 복잡성으로 인해 생성되는 SVG 파일의 크기가 7MB에 달하여Render의 무료 티어에서 처리하기에 너무 컸습니다. 이로 인해RSVG convert역시 타임아웃되거나 메모리 부족으로 실패했습니다.
- Puppeteer 방식이 지속적인 500 에러와 Chrome 실행 문제로 실패하자, AI는 SVG를 직접 OG 이미지로 제공하는
지속적인 디버깅과 좌절
-
브리아나는 수많은 커밋과 배포, 에러 로깅 추가, 라우팅 및 컨트롤러 액션 검토를 반복했습니다. 특히
allow_browser_versions메서드 오버라이드 문제, 컨트롤러 내 예외 처리 로직 오류 등 다양한 코드 레벨의 버그를 해결하려 노력했습니다. -
Render의 느린 배포 속도와 캐싱 문제로 인해 변경 사항을 즉시 확인하기 어려웠으며, 이는 디버깅 과정을 더욱 어렵게 만들었습니다. 로컬에서는 작동하는 코드가 프로덕션 환경에서만 오류를 일으키는 상황이 반복되었습니다. -
2시간에 걸친 노력에도 불구하고, OG 이미지 기능은 최종적으로 성공적으로 배포되지 못했습니다. 대용량 SVG 문제,
RSVG convert의 타임아웃/메모리 부족, 그리고 컨트롤러 로직 내의 예외 처리 및 라우팅 문제가 복합적으로 작용하며 해결되지 않은 채 세션이 종료되었습니다.