SQLite 전환의 핵심 동기는 비용 절감과 운영 간소화입니다. SQLite는 애플리케이션 프로세스에 임베드되어 외부 DB 서버 관리가 불필요하며, 프로세스 내 통신으로 네트워크 지연이 거의 없어 N+1 쿼리 문제가 완화됩니다. 또한, 테스트 시 DB 복사를 통한 병렬 테스트가 용이하고, Docker 없이 bundle install
만으로 배포가 가능해 인프라 부담이 크게 줄었습니다. 이로 인해 월별 인프라 비용을 월 $650에서 $77로 대폭 절감했습니다.
마이그레이션은 점진적으로 진행되었습니다. PostgreSQL 스키마를 SQLite와 호환되도록 조정하기 위해 지원되지 않는 데이터 타입은 Active Record 커스텀 타입을 활용하여 직렬화했습니다. Redis 의존성을 제거하고자 Solid Stack gem으로 전환했습니다.
주요 도전 과제로는 ILIKE
처리, PostgreSQL 배열 쿼리 기능 부재, SQLite의 단일 쓰기 동시성 모델 문제, 불친절한 외래 키 오류 메시지, 단일 노드 제한 등이 있었습니다. 이 문제들은 확장 기능, JSON 활용, 작업 순서 변경, 수직 스케일링 등으로 해결되었습니다.