워크숍은 SQLite와 Rails 결합 시 발생하는 주요 성능 문제와 해결책을 제시합니다. 첫째, SQLite의 선형 쓰기(linear writes) 특성으로 인한 동시성 오류(SQLite3::BusyException
)는 deferred transaction
대신 immediate transaction
사용을 권장합니다. 이는 트랜잭션 시작 시 즉시 쓰기 잠금을 획득하여 오류 대신 대기를 유도함으로써 안정성을 높입니다. 둘째, Ruby의 Global VM Lock(GVL)과 SQLite의 임베디드 특성으로 인한 장기 지연(long-tail latency)은 busy_timeout
을 Ruby의 sleep
명령어로 재구현하여 GVL을 해제하고 병렬 처리를 가능하게 함으로써 개선됩니다. 이러한 최적화는 Rails 8
의 핵심 개선 사항이며, Ruby 3.3으로의 업그레이드 또한 성능 향상에 기여합니다.
데이터 복원력 확보를 위해 Lightstream
젬이 소개됩니다. Lightstream은 SQLite 데이터베이스 변경 사항을 S3 등 클라우드 스토리지로 실시간 스트리밍하여 시점 복구(point-in-time backups)를 지원하며, Puma 플러그인 통합 및 백업 유효성 검증 기능을 제공합니다.
Rails의 전체 기능을 SQLite와 함께 활용하기 위한 핵심 전략은 각 영속성 데이터 구성 요소에 별도의 SQLite 데이터베이스 파일을 사용하는 것입니다. 이는 SQLite의 선형 쓰기 한계를 극복하고 병렬 처리 성능을 높입니다. SolidQueue
(백그라운드 작업), SolidCache
(캐싱), SolidCable
(웹소켓) 등은 전용 SQLite DB를 통해 독립적이고 효율적으로 운영될 수 있습니다. SolidQueue
는 Rails 8
의 기본 잡 백엔드로 예정되어 있으며, 내장된 반복 작업 기능으로 백업 검증 같은 관리 작업을 자동화합니다. 또한, SolidErrors
와 같은 커스텀 엔진을 통해 에러 모니터링, 성능 계측, 구조화된 로깅 등 다양한 관리 도구를 SQLite 기반으로 구축하는 가능성도 제시됩니다.
추가적으로, Git 브랜치와 연동한 독립적 개발 DB, 데이터 이동, SQLite 컴파일 플래그 미세 조정, 그리고 벡터 검색을 포함한 다양한 SQLite 확장 활용 등 SQLite의 고유한 아키텍처를 활용한 고급 사용 사례들이 언급됩니다.