로컬 우선이라는 말의 범위를 묻는다
화면과 데이터베이스가 로컬에 있어도 모델 호출, 검색, 텔레메트리나 플러그인이 외부로 데이터를 보낼 수 있습니다. 네트워크를 끊은 상태에서 어떤 기능이 남는지, 어떤 데이터가 큐에 쌓였다가 나중에 전송되는지 확인해야 합니다. 암호화와 삭제 정책도 저장 위치만큼 중요합니다.
빈 test profile에서 DNS, HTTP 연결을 기록하고 document import, 질의, local model, cloud model 선택, crash reporting을 하나씩 실행합니다. endpoint, 전송 payload 범주와 기능 목적을 표로 남깁니다. proxy가 막혔을 때 반복 retry로 data가 queue에 쌓이는지, 재연결 후 자동 전송되는지도 확인합니다.
“민감하면 local model” 같은 router가 있다면 민감도 분류가 실패했을 때의 기본 경로가 local인지 확인합니다. cloud fallback이 편의를 위해 자동으로 켜지면 outage 때 local-only 정책을 어길 수 있습니다. route decision, model과 전송한 source ID를 audit event로 남기고 사용자가 확인할 수 있어야 합니다.
local database도 같은 OS 계정의 다른 process가 읽을 수 있고 backup, temporary file에 복제될 수 있습니다. database file 권한, encryption key 위치, WAL과 cache의 삭제를 점검합니다. 사용자 삭제가 원문 record뿐 아니라 embedding, search index와 backup 정책에 어떻게 반영되는지도 시험합니다.
여러 장치가 같은 데이터를 수정한다면 SQLite 자체보다 충돌 해결이 핵심입니다. 마지막 쓰기 우선인지, 항목별 병합인지, 사람이 선택하는지에 따라 데이터 손실 방식이 달라집니다. 오프라인에서 만든 변경을 서버와 합친 뒤 원래 상태로 되돌릴 수 있는지도 시험해야 합니다.
충돌 시험은 두 장치를 offline으로 둔 뒤 같은 note의 제목과 본문을 각각 바꾸고 다시 연결하는 방식으로 만들 수 있습니다. 한 변경이 조용히 사라지는지, conflict copy가 생기는지, 사용자에게 diff가 보이는지 기록합니다. attachment 삭제와 편집이 충돌하는 경우, clock이 다른 장치도 포함해야 합니다.
schema migration은 복사한 production 크기의 database에서 실행하고 중간 강제 종료 뒤 이전 version 또는 backup으로 복구되는지 봅니다. migration 완료 표시와 실제 index 상태가 어긋나면 검색 누락이 생길 수 있습니다. 자동 update 전에 backup 검증과 충분한 disk 공간 확인이 필요합니다.