"테스트는 전부 켜졌을 때 되냐가 아냐. 화려한 부분이 사라졌을 때 뭐가 여전히 되냐야."
새벽 3시 테스트
임베딩-과-rerank 서버가 꺼졌다고 상상해 — 리부팅, 메모리 부족, 플러그 뽑힘, 뭐든 상관없어. 새벽 3시고 2년 전에 쓴 한 줄을 찾아야 해. 모델-경로-안 시스템에선 막혀: 모델 없음, 검색 없음. Lantern 에선 쿼리를 치면 코퍼스가 답해, 네가 가장 의존하는 경로가 모델을 아예 안 만지게 지어졌으니까. 운이나 튀어나온 fallback 이 아냐 — 엔진의 모양이야.
모델을 안 만지는 경로 둘
Lantern 검색 경로 둘은 로컬 인덱스와 네 쿼리의 순수 함수야:
- 키워드 검색(전문 검색) 은 네 단어를 바로 디스크에 사는 역색인에 매칭해. 네트워크 없음, 모델 없음, 그냥 단어 매칭과 순위 매기기.
- Phrase 자동완성은 네가 친 것의 연속을 코퍼스에서 캐, 역시 로컬 인덱스에서, 키스트로크 속도로.
둘 다 모델 서버로의 전선이 없어. 모델 서버를 존재에서 지워도 둘은 동일한 결과를 돌려줘.
뭐가, 어떻게 degrade 하는가
모델 서버가 필요한 경로 — dense 벡터 검색, 하이브리드의 벡터 절반, rerank — 는 척하는 대신 정직하게 degrade 해. 순수 벡터 쿼리는 모델이 안 닿으면 명확한 service unavailable 을 돌려줘. 하이브리드 쿼리는 키워드 절반을 내주고 벡터 절반이 건너뛰어졌다고 응답에 표시해. 아무것도 나쁜 결과를 좋은 것처럼 꾸며서 조용히 안 돌려줘. degradation 은 보이고, 이름 붙고, 결정론적 경로엔 절대 전염 안 돼.
보장은 희망이 아니라 구조야
두 번 말할 가치가 있어: 항상-됨 속성은 캐싱도, 재시도 루프도, 넉넉한 타임아웃도 아냐. 그건 실패 확률을 줄이는 패치야. Lantern 의 결정론적 경로는 모델에 연결된 적이 없어서 모델 outage 로 실패할 수 없어. 구조적 보장이 희망적 보장을 이겨 — 안 가진 의존성의 모든 실패 모드를 테스트할 필요가 없어.