마이그레이션의 주요 동기는 운영 비용 절감과 개발 프로세스 간소화였습니다. SQLite는 내장형 데이터베이스로 배포가 단순하고 Docker 의존성을 줄였으며, 낮은 지연 시간으로 N+1 쿼리 문제를 완화했습니다. 이는 인프라 비용을 대폭 절감하고 애플리케이션 성능을 향상시키는 결과를 가져왔습니다.
마이그레이션은 점진적으로 진행되었습니다. PostgreSQL 특화 데이터 타입은 ActiveRecord::Type을 활용해 SQLite 호환 형태로 변환했고, Solid Stack gem들을 도입하여 외부 시스템 의존성을 제거했습니다. 제약 조건 역시 SQLite 문법에 맞게 변환하여 다시 추가했습니다. 실제 데이터 마이그레이션은 약 1~2시간의 짧은 다운타임으로 완료되었습니다.
전환 과정에서 유니코드 LIKE 연산자 처리, 배열 쿼리 함수 전환, 다중 읽기-단일 쓰기 동시성 모델로 인한 긴 트랜잭션 문제, 그리고 덜 명확한 외래 키 오류 메시지 등 몇 가지 도전 과제가 있었습니다. 이러한 문제들은 확장 기능, 가상 컬럼, 작업 순서 변경 등의 전략으로 해결되었습니다. 확장성은 단일 노드 제한이 있으나 효율적인 수직 스케일링이 가능하며, DQLite 같은 복제 솔루션도 대안이 됩니다. 백업은 Lightstream을 통한 실시간 복제와 매일 전체 백업 스크립트로 안정성을 확보했습니다.