본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

조용한 기능 저하는 금지야

~10 min · no-silent-fallback, honesty, degradation, api-design

Level 0꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"나쁜 결과보다 더 위험한 건, 멀쩡한 결과처럼 보이는 반쪽짜리 결과야. 사람은 그걸 믿어버리거든."

조용한 기능 저하는 거짓말이 돼

키워드와 벡터를 합치고 rerank까지 하는 검색을 요청했는데 벡터 서버가 멈췄다고 해보자. 오류를 숨긴 채 키워드 결과만 완전한 검색과 같은 모양으로 돌려주면 호출자는 무엇이 빠졌는지 몰라. 반쪽 검색을 전체라고 믿고 판단하게 되지. 프로그램은 멈추지 않았지만 사실을 누락한 채 성공한 척했고, 눈에 보이는 오류보다 추적하기 어려운 실패가 생겼어.

못 하는 일과 덜 한 일을 따로 알려

  • 지원하지 않는 모드라면 명시적인 오류를 내. 가짜 결과 대신 501 응답으로 할 수 없는 요청임을 밝혀.
  • 일부만 수행했다면 빠진 부분을 응답에 적어. 하이브리드 검색에서 벡터를 쓰지 못했다면 키워드 결과와 함께 degraded 필드에 그 사실을 남겨.

그러면 호출자는 받은 결과의 범위를 정확히 알고 재시도하거나 경고를 보여줄 수 있어.

보이는 실패는 선택권을 줘

오류가 드러나면 기다리거나 다른 모드를 고르거나, 부족한 결과를 감수하고 진행할 수 있어. 반대로 기능 저하를 숨기면 그 선택권을 빼앗아. 문제는 한참 뒤 잘못된 판단으로 나타나고, 당시 응답은 정상처럼 보였으니 원인을 되짚기도 어려워.

기능이 줄었다면 소리 내어 말하고, 말할 수 없다면 결과를 내지 마. 대체 경로 자체가 나쁜 것은 아니야. 무엇을 생략했는지 호출자가 알 때만 정직한 선택이 돼.

응답 메타데이터가 실행 기록을 함께 나른다

그래서 Lantern은 결과 목록만 던지지 않고 작은 응답 메타데이터와 함께 보내. 실제로 실행한 모드와 생략된 기능, 기능 저하 여부를 결과 옆에 기록하지. 평소에는 빈 목록 하나라 눈에 띄지 않아. 하지만 벡터 서버가 멈춘 날에는 그 기록이 반쪽짜리 답을 믿어버리는 호출자와 '이번 검색은 키워드만 사용했다'고 경고할 수 있는 호출자를 갈라.

Code

응답 메타데이터는 실제로 실행한 기능을 숨김없이 알려줘·json
// A healthy hybrid search — nothing degraded.
{
  "mode": "hybrid",
  "results": [ /* fused keyword + vector hits, reranked */ ],
  "degraded": []
}

// The SAME endpoint, vector server down. Note it does not pretend.
{
  "mode": "hybrid",
  "results": [ /* keyword-only hits */ ],
  "degraded": ["vectors_unavailable"]   // <-- the caller knows it's partial
}

// An unsupported mode does not fake it — it errors, loudly:
// HTTP 501  { "error": "mode 'semantic-graph' is not implemented" }

External links

Exercise

쓰는 도구나 API 가운데 실패했는데도 조용히 더 나쁜 결과를 내놓을 수 있는 것을 찾아 — 대체 경로만 쓰는 검색, 일부만 끝난 동기화, 낡은 데이터를 조용히 쓰는 자동완성처럼. 그런 일이 생겼는지 어떻게 알 수 있을까? 기능 저하를 드러낼 필드 하나를 설계하고, 호출자가 그 필드를 봤을 때 어떻게 다르게 반응할지 설명해.
Hint
조용한 대체 경로를 드러내는 질문은 늘 '내가 그 사실을 어떻게 알지?'야. 알 방법이 없다면 시스템이 아무 말 없이 기능을 줄이고 있는 거야. 해결책은 무엇이 빠졌는지 응답에 정직하게 적어 주는 필드 하나야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.