Lovable와 Supabase로 16개의 제품을 운영하며 겪은 기술적 실수들

Inithouse에서는 16개의 제품을 운영하고 있습니다. 모든 제품에 Lovable과 Supabase를 사용하며, 한 팀이 모든 것을 관리합니다. 언뜻 듣기에는 좋아 보이지만, 16개의 커스텀 도메인, 16개의 Supabase 프로젝트, 그리고 16세트의 edge functions를 마주하게 되면 이야기가 달라집니다.

저희는 시간을 허비하게 만든 실수들을 저질렀습니다. 가장 컸던 다섯 가지 기술적 실수와 그 해결책을 소개합니다.

  1. 일관성 없는 데이터베이스 스키마

초기 세 제품은 동일한 데이터에 대해 서로 다른 테이블 이름을 사용했습니다. 어떤 프로젝트는 분석을 위해 page_views를 사용했고, 다른 프로젝트는 analytics_events를 사용했습니다. 이로 인해 코드를 공유하는 것이 불가능해졌습니다. 오후 한나절이면 끝날 작업이 2주나 걸리기도 했습니다.

해결책: 공유 마이그레이션 템플릿을 구축했습니다. 모든 신규 제품은 분석, 블로그 포스트, 인증(auth)을 위한 동일한 기본 테이블을 갖게 됩니다. 여유로운 주간을 이용해 기존 프로젝트들도 소급 적용했습니다. 이제 모니터링 엔드포인트를 추가하는 데 하루가 아닌 20분이면 충분합니다.

  1. 깨진 커스텀 도메인

Lovable을 사용하면 커스텀 도메인을 연결할 수 있습니다. 때때로 배포는 성공하지만 DNS 검증이 실패하는 경우가 있습니다. 프리뷰 URL은 작동하지만, 라이브 도메인은 빈 페이지를 보여줍니다. 라이브 URL을 확인하지 않아 3일 동안 트래픽을 놓친 적도 있습니다.

해결책: 게시 후 체크리스트를 사용합니다. 모든 라이브 도메인을 시크릿 창(incognito window)에서 열어 확인합니다. 또한 도메인 연결에 실패할 경우 Slack으로 알림을 보내는 업타임(uptime) 체크 기능을 추가했습니다.

  1. 파편화된 데이터 가시성

제품마다 별도의 대시보드를 열지 않고서는 전체 포트폴리오의 성과를 파악할 수 없었습니다. 마치 눈을 가리고 비행하는 것과 같았습니다.

해결책: 모든 Supabase 프로젝트에 통계 API 엔드포인트를 배포했습니다. 각 제품은 사용자 수, 가입자 수와 같은 주요 지표를 표준화된 형식으로 전송합니다. 단 하나의 스크립트가 이 데이터를 수집하여 하나의 대시보드에 보여줍니다.

  1. 컴포넌트 복사 붙여넣기

예전에는 한 프로젝트의 React 컴포넌트를 다른 프로젝트로 복사해서 사용하곤 했습니다. 하지만 이 컴포넌트들은 과거의 가정을 그대로 품고 있었습니다. 예를 들어, 한 제품의 가격 카드(pricing card)가 다른 제품에서 결제 흐름이 달라 작동하지 않는 식이었죠. 이런 유령 버그(phantom bugs)를 디버깅하느라 며칠을 허비했습니다.

해결책: 복사 붙여넣기를 중단했습니다. 대신 컴포넌트 패턴 문서를 유지 관리합니다. Lovable에게 이 패턴을 기반으로 새로운 컴포넌트를 만들도록 요청합니다. 설정하는 데 시간은 더 걸리지만 유지 관리는 훨씬 쉬워졌습니다.

  1. 채팅 기록을 문서로 사용하기

기술적 의사결정을 기억하기 위해 Lovable의 채팅 기록에 의존했습니다. 하지만 채팅 로그는 매우 지저분합니다. 성공적인 변경 사항과 실패한 시도가 뒤섞여 있기 때문입니다. 긴 스레드 속에서 특정 변경의 이유를 찾아내는 것은 매우 어렵습니다.

해결책: 의사결정 기록을 Linear로 옮겼습니다. Linear에 무엇이 왜 바뀌었는지 한 줄로 기록합니다. Lovable 채팅은 실행을 위한 것이고, Linear는 의사결정을 위한 것입니다.

교훈은 간단합니다. 16개의 제품을 16개의 개별 프로젝트로 취급하지 마세요. 하나의 포트폴리오로 취급하세요. 템플릿을 표준화하고 모든 것을 한 곳에서 모니터링하세요.

Source: https://dev.to/jakub_inithouse/technical-mistakes-of-running-16-products-on-lovable-supabase-59fh

Optional learning community: https://t.me/GyaanSetuAi