SQL을 말할 줄 아는 C 라이브러리
SQLite는 작고 빠르고 자기 완결적이고 믿을 만하면서 SQL을 빠짐없이 구현한 C 라이브러리야. 이 형용사들이 하나씩 다 자기 몫을 해.
- Serverless — 따로 도는 서버 프로세스가 없어. 라이브러리가 디스크 파일을 직접 읽고 써. 셋업할 것도, 관리할 것도, 띄워둘 데몬도 없지.
- Zero-configuration — 설치 단계도 config 파일도 포트도 유저 계정도 없어. 파일을 열면 그걸로 끝이야.
- Single-file — 테이블도 index도 trigger도 view도, DB 전체가 플랫폼 안 가리는 파일 하나에 들어가. 그 파일을 복사하면 그게 곧 백업이지.
- Transactional — 모든 statement가 transaction 안에서 돌아. 쓰는 도중에 크래시가 나도 DB는 안 깨져. ACID를 다 지켜.
- Self-contained — OS에 기대는 게 거의 없어. 컴파일하면 900 KB쯤 나오는데, 어지간한 JS 프레임워크 번들보다 작아.
이 다섯이 모이면 SQLite는 Postgres나 MySQL 같은 client-server DB와 결정적으로 갈라져. 서버도 네트워크 프로토콜도 포트도 없거든. SQLite는 네 앱 프로세스 안에서 돌아. 앱의 메모리와 file descriptor를 같이 쓰면서.
Principle: SQLite의 배포 단위는 파일이야. 백업은
cp고, 마이그레이션은 파일 교체고, 복제는 rsync야. 멘탈 모델이 통째로 파일 시스템 연산으로 내려앉는데, 그 단순함 자체가 기능이야.