SQLite in Production: Lessons from Running a Store on a Single File
Author: Ultrathink | Source: ultrathink.art | Published: 2026-04-03
한 줄 요약
SQLite로 실제 이커머스를 운영하며 WAL 모드의 동시성 이점과 배포 시 쓰기 손실이라는 치명적 한계를 동시에 경험한 실전 사례다.
핵심 주장/내용
- Rails 8 기반으로 SQLite 4개 데이터베이스(primary, cache, queue, cable)를 단일 Docker 볼륨에서 운영
- WAL 모드로 동시 읽기 + 단일 쓰기가 가능하지만, 블루-그린 배포 시 컨테이너 중첩으로 WAL 경합 발생
- 2시간 내 11번의 빠른 배포 중 2건의 주문이 유실됨 (Stripe 결제는 성공했으나 DB 쓰기 실패)
- sqlite_sequence 갭을 통해 데이터 유실을 진단했으며, 배포 간격을 두는 절차적 해결책을 적용
- ILIKE 미지원, json_extract의 네이티브 타입 반환, kamal exec의 메모리 사용 등 SQLite 특유의 주의점 존재
주요 수치 / 사실
- 2시간 내 11회 배포 중 2건 주문 유실
- 4개 SQLite 데이터베이스를 단일 서버에서 운영
- 제약: 단일 서버, 배포 시 신중한 간격 필요
관련 위키
Source: 원문 보기