Rails on SQLite: 새로운 배포 방식의 장점과 도전 과제

Rails on SQLite: exciting new ways to cause outages / André Arko - Kaigi on Rails 2025

작성자
Kaigi on Rails
발행일
2025년 11월 25일

핵심 요약

  • 1 SQLite는 웹 서버 프로세스 내부에 내장되어 단일 파일로 데이터를 관리하며, 이는 배포 간소화와 비용 절감에 큰 이점을 제공합니다.
  • 2 SQLite 사용 시 데이터 유실 방지를 위한 영구 저장소 사용, 동시성 문제 해결을 위한 WAL 모드 활성화 및 다중 DB 파일 활용, 그리고 백그라운드 작업 처리 방식에 대한 고려가 필수적입니다.
  • 3 수직 스케일링, 단일 서버의 한계, 무중단 배포의 어려움 등 SQLite 기반 Rails 앱의 고유한 운영 및 배포 제약 사항을 이해하고 적절한 솔루션(LiteStream, LiteFS)을 적용해야 합니다.

도입

Andre Arco는 Rails 8의 Solid Cache, Solid Queue 등 새로운 Gem과 LightStack을 통해 데이터베이스 서버 없이도 Rails 앱을 쉽게 배포할 수 있게 된 배경을 설명합니다. 특히 SQLite를 활용한 개인 프로젝트 "Feed Your Email"의 사례를 들며, SQLite가 인프라 복잡성과 비용을 획기적으로 줄여 소규모 애플리케이션 운영을 가능하게 했음을 강조합니다. 하지만 이러한 변화가 기존 Rails 앱 배포 방식과 다른 점들을 야기하며, 자칫하면 서비스 중단이나 데이터 손실로 이어질 수 있는 위험 요소들을 다룰 것임을 예고합니다.

SQLite 기반 Rails 앱의 핵심 차이점 및 도전 과제

SQLite는 웹 서버 프로세스 내부에 내장되어 별도의 데이터베이스 서버 없이 단일 파일로 데이터를 관리합니다. 이는 인프라를 단순화하고 연결 오류를 없애는 장점이 있으나, 동시에 몇 가지 중요한 운영 및 배포 고려 사항을 발생시킵니다.

  • 데이터 영속성 확보:
    • 컨테이너 환경에서 재시작 시 데이터가 유실될 수 있으므로, SQLite 데이터베이스 파일은 반드시 AWS EBS나 Fly.io 볼륨과 같은 영구 저장소에 보관하고 자동 스냅샷을 활용해야 합니다.
  • 동시성 및 스케일링:
    • Rails 모델, 캐시, Active Job 큐 등 모든 데이터가 기본적으로 하나의 SQLite 파일에 저장되어 동시 접근 시 파일 시스템 락으로 인한 병목 현상이 발생하기 쉽습니다.
    • 수평 스케일링(VM 추가)이 불가능하며, CPU와 RAM을 증설하는 수직 스케일링에 의존해야 합니다.
    • 백그라운드 작업은 웹 프로세스와 동일한 VM 내에서 별도 프로세스나 스레드로 실행하여 데이터 파일에 접근해야 합니다.
  • 동시성 문제 해결 전략:
    • WAL(Write-Ahead Log) 모드: 쓰기 작업은 로그 파일에 기록하고 읽기 작업은 동시에 처리하여 동시성을 향상시킵니다. 단, 백업 시 주 파일과 WAL 파일을 함께 관리해야 합니다.
    • 다중 DB 파일: Active Record, 캐시, 백그라운드 작업 등 기능별로 별도의 SQLite 파일을 사용하여 서로 다른 접근 패턴 간의 경쟁을 줄일 수 있습니다.
  • 단일 서버 아키텍처의 제약:
    • 단일 서버는 다운 시 전체 서비스 중단으로 이어지며, 컨테이너 환경에서 무중단 배포가 어렵습니다.
    • 로드 밸런싱이나 지리적 분산(read replica)이 불가능한 한계가 있습니다. 다만, 디버깅은 단순해집니다.

결론

SQLite는 Rails 애플리케이션 배포의 복잡성과 비용을 크게 줄여주는 강력한 도구이지만, 기존 관계형 데이터베이스 서버와는 근본적으로 다른 아키텍처적 특성을 이해하고 접근해야 합니다. 영구 저장소, WAL 모드, 다중 DB 파일 전략, 그리고 LiteStream이나 LiteFS와 같은 백업 및 복제 솔루션을 통해 SQLite의 한계를 극복하고 안정적인 서비스를 구축할 수 있습니다. 궁극적으로 SQLite와 LiteFS의 조합은 완벽한 분산 다중 쓰기 데이터베이스의 꿈을 실현하여, Rails 개발자가 훨씬 더 쉽게 고가용성 애플리케이션을 구축할 수 있는 가능성을 제시합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!