파일 하나로 끝나고, 포맷은 2004년부터 그대로야
SQLite DB는 잘 정의돼 있고 오래 안 변하고 플랫폼을 안 가리는 binary 포맷의 파일 하나야. 이 포맷은 3.0.0이 나온 2004년 이후로 그대로고, SQLite 팀은 최소 2050년까지 호환을 지키겠다고 약속했어. macOS에서 만든 파일이 Windows에서도 Linux에서도 Raspberry Pi에서도 Android 폰에서도 byte 하나 안 틀리고 열려.
확장자는 보통 .db나 .sqlite, .sqlite3를 쓰는데 사실 아무거나 붙여도 돼. SQLite는 파일 이름을 안 봐. 파일 헤더를 읽고 자기 자신을 알아봐.
WAL(Write-Ahead Logging) 모드를 켜면 — 동시에 여러 곳에서 건드리는 워크로드면 거의 항상 켜야 해 — DB 옆에 파일이 두 개 더 생겨.
myapp.db-wal— Write-Ahead Log야. 아직 main 파일로 checkpoint되지 않은 최근 변경이 여기 쌓여.myapp.db-shm— 동시에 읽는 reader들을 맞춰주는 shared memory 파일이야.
이 둘은 SQLite가 알아서 관리해. 마지막 connection이 깔끔하게 닫히면 대개 사라지고. WAL 모드 DB를 백업할 때는 세 파일을 같이 복사하거나, 앞뒤 맞는 snapshot을 만들어주는 공식 .backup 명령을 써.
Warning: WAL 모드 DB를 writer가 도는 중에 그냥
cp로 뜨면 깨진 사본이 나올 수 있어. sqlite3 source.db ".backup target.db"나 C-level sqlite3_backup API를 써. cron에 cp 걸어두는 건 '내 백업이 2년 동안 조용히 망가져 있었다' 류 사고의 단골 원인이야.