cwkPippa 가 SQLite 쓰는 이유
한 user. 한 Mac. 수만 개 메시지, 천천히 자람. Postgres 는 overkill. 전체 DB 가 의 단일 파일, Time Machine 이 다른 파일처럼 백업. 0 admin.
aiosqlite 가 SQLite 를 async API 로 감쌈. 같은 SQL, async/await 친화. FastAPI 에 자연스럽게 fit.
스키마는 plain SQL, ORM 없음
cwkPippa 는 SQLAlchemy 안 써. 스키마는 backend/store/conversations.py 의 몇 개 CREATE TABLE. 마이그레이션은 init_db 라는 idempotent 함수의 ALTER TABLE — 컬럼 추가? PRAGMA table_info 로 먼저 체크, missing 일 때만 추가.
mirror 원칙
SQLite 는 JSONL ground truth 의 convenience mirror. drift 시 (corruption, schema 변경 잘못, partial write) 복구는 *그 conversation 의 row 비우고 JSONL replay*. SQLite 직접 패치 절대 X. Truth track 에서 어렵게 배움.
parameterized query 항상: 이 머신엔 나만 있어도, 모든 query 가
? placeholder 거쳐. SQL injection 만이 이유 아냐 — 적절한 SQLite type coercion 받는 방법이기도. SQLite 에서 string 과 bytes 가 기대대로 자동 변환 안 됨.