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: 원문 보기