"git 히스토리 속 1기가바이트 모델 가중치는 딱 한 번 저지르는 실수야."
가중치는 git 밖에 살아
온디바이스 STT 모델은 수백 메가에서 기가바이트야. 소스가 아니라 데이터고, repo 에 살면 안 돼 — 한 번 커밋하면 모든 클론, 모든 백업, 모든 히스토리 순회가 그 무게를 영원히 끌어. Firekeeper 는 모델 가중치를 프로젝트 밖 캐시 디렉터리(~/cwk-models/whisper/ 트리 아래)에 두고, 첫 사용 때 다운로드하고, git 이 절대 추적 안 해. repo 는 모델을 관리하는 코드를 담고; 모델 자체는 런타임 에셋이야.
첫 실행 세금
Core ML Whisper 모델이 처음 도는 순간, 그 특정 기계에 맞춰 컴파일해 — 안 다루면 정확히 멈춤처럼 보이는 몇 초의 일회성 비용이야. 습관 둘이 이걸 고쳐. 첫째, 프리웜: 첫 단축키가 아니라 앱 실행 때 모델 로드/컴파일을 시작해, 유저가 실제 받아쓸 즈음엔 모델이 데워지게. 둘째, 진행 표시: 모델 다운로드와 첫 실행 컴파일 둘 다 보이고 솔직한 진행(정수-퍼센트 다운로드, '모델 준비 중' 상태)이 필요해, 앱이 멈춘 것처럼 절대 안 보이게.
실행 -> prewarm(): 백그라운드에서 모델 로드/컴파일 시작
첫 받아쓰기 -> 모델 이미 데워짐 -> 낮은 지연
모델 없음 -> 오버레이에 정수-퍼센트 진행으로 다운로드
첫 컴파일 -> '모델 준비 중...' 상태, 얼어붙은 UI 아님
나쁜 기본값 마이그레이션
진짜 디테일 하나 더: Firekeeper 는 한때 tiny 모델을 기본으로 했어, 빠르지만 약한. 기본이 large-v3-turbo 로 바뀌었을 때, 기존 유저는 옛 선택이 설정에 저장돼 있었어. 마이그레이션은 외과적이야: 옛 기본값을 한 번 올리되, 유저가 일부러 고른 모델은 유지. '낡은 기본값은 업그레이드, 명시적 선택은 존중' 이 규칙 — 싹쓸이 덮어쓰기는 파워 유저의 의도적 선택을 짓밟아.