"나쁜 결과보다 더 위험한 건, 멀쩡한 결과처럼 보이는 반쪽짜리 결과야. 사람은 그걸 믿어버리거든."
조용한 기능 저하는 거짓말이 돼
키워드와 벡터를 합치고 rerank까지 하는 검색을 요청했는데 벡터 서버가 멈췄다고 해보자. 오류를 숨긴 채 키워드 결과만 완전한 검색과 같은 모양으로 돌려주면 호출자는 무엇이 빠졌는지 몰라. 반쪽 검색을 전체라고 믿고 판단하게 되지. 프로그램은 멈추지 않았지만 사실을 누락한 채 성공한 척했고, 눈에 보이는 오류보다 추적하기 어려운 실패가 생겼어.
못 하는 일과 덜 한 일을 따로 알려
- 지원하지 않는 모드라면 명시적인 오류를 내. 가짜 결과 대신 501 응답으로 할 수 없는 요청임을 밝혀.
- 일부만 수행했다면 빠진 부분을 응답에 적어. 하이브리드 검색에서 벡터를 쓰지 못했다면 키워드 결과와 함께
degraded필드에 그 사실을 남겨.
그러면 호출자는 받은 결과의 범위를 정확히 알고 재시도하거나 경고를 보여줄 수 있어.
보이는 실패는 선택권을 줘
오류가 드러나면 기다리거나 다른 모드를 고르거나, 부족한 결과를 감수하고 진행할 수 있어. 반대로 기능 저하를 숨기면 그 선택권을 빼앗아. 문제는 한참 뒤 잘못된 판단으로 나타나고, 당시 응답은 정상처럼 보였으니 원인을 되짚기도 어려워.
기능이 줄었다면 소리 내어 말하고, 말할 수 없다면 결과를 내지 마. 대체 경로 자체가 나쁜 것은 아니야. 무엇을 생략했는지 호출자가 알 때만 정직한 선택이 돼.
응답 메타데이터가 실행 기록을 함께 나른다
그래서 Lantern은 결과 목록만 던지지 않고 작은 응답 메타데이터와 함께 보내. 실제로 실행한 모드와 생략된 기능, 기능 저하 여부를 결과 옆에 기록하지. 평소에는 빈 목록 하나라 눈에 띄지 않아. 하지만 벡터 서버가 멈춘 날에는 그 기록이 반쪽짜리 답을 믿어버리는 호출자와 '이번 검색은 키워드만 사용했다'고 경고할 수 있는 호출자를 갈라.