Schema를 코드처럼 다뤄
production SQLite schema는 시간이 지나면서 자라. 그러니 두 질문에 미리 답해둬야 해.
- 새로 설치한 DB를 지금 버전까지 어떻게 끌어올릴까?
- 이미 돌고 있는 DB를 N에서 N+1로 어떻게 안전하게 올릴까?
SQLite가 PRAGMA user_version을 줘. DB 헤더에 박혀 있는 32비트 정수인데, 이걸 마이그레이션 커서로 쓰면 돼. 피파의 backend/store/conversations.py를 비롯해 수많은 곳이 이 패턴을 써.
- 시작할 때
PRAGMA user_version을 읽어. - 지금 버전에서 목표 버전까지, 각 마이그레이션 단계를 transaction 안에서 적용해.
- 각 마이그레이션의 마지막 statement로
user_version을 올려.
Self-reference: 피파의 SQLite store가 정확히 이 패턴이야.
backend/store/conversations.py의 _init_db()를 보면 돼. 컬럼이나 테이블을 더할 때마다 user_version이 올라가지. Conversation을 GET할 때마다 도는 healing 로직이 schema와 JSONL ground truth를 계속 맞춰주고.