3 가지 접근, 3 가지 트레이드오프
production SQLite는 진짜 데이터를 받기 전에 백업 전략부터 세워야 해. 쓸 만한 방법이 셋이야.
- Cold 백업 — writer를 멈추고 파일을 복사해. 가장 단순한 대신 서비스를 잠깐 멈춰야 해.
- Online 백업 —
sqlite3 source.db ".backup target.db"를 쓰거나 C-levelsqlite3_backupAPI를 불러. writer가 도는 중에도 되고, 앞뒤가 맞는 snapshot을 만들어줘. - Streaming 백업 — Litestream이나 LiteFS, Turso가 WAL을 S3나 다른 노드, 매니지드 서비스로 계속 흘려보내. 최근 어느 시점으로든 되돌릴 수 있어.
개인이 만든 제품이라면 — 피파나 사이드 프로젝트 같은 — NAS나 S3로 한 시간에 한 번 online 백업을 뜨는 것으로 재해의 99%를 감당해. 사용자가 여럿인 제품이라면 Litestream이 손실 폭을 시간 단위에서 분 단위로 줄여주면서 원하는 시점으로 복구하게 해줘.
Warning: 복구해본 적 없는 백업은 백업이 아니야. 어떤 백업 설정이든 믿기 전에 다른 머신에 통째로 복구해보는 훈련을 해봐. 진짜 사고가 터진 그 순간에야 백업이 깨져 있거나 반쪽이라는 걸 알게 되는 제품이 셀 수 없이 많아.