Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/redis-command-admission/case/case-five-copies-of-noscript-recovery.md
T
DongHyeonkaandClaude Fable 5.1 b25357c48a docs(clean-architecture-backend-template): fold analysis into final and re-select one topic
- analysis/·source-index·state.json 을 final/document.md 제2부·제3부로 접었다. SSOT 는 하나다
- 파일럿 — commit-ambiguity-as-a-result 를 새 기준으로 재선별. 후보 14 → 글감 5
  (PROMOTE 5 · MERGE_INTO 3 · KEEP_IN_SSOT 4 · 보류 2). 기록 5건을 다시 썼고 그림 1개를
  techviz 로 만들었다
- 재선별이 잡은 것: 제1부 §6.2·§11.1 이 자기 §13.2 와 어긋나 있었다(레인을 안 돌렸다 vs
  돌렸다) — 정정. 이미 답이 나와 있던 Question 을 HEAD 재실행 질문으로 다시 세웠다.
  Concept 이 인용한 코드가 SSOT 에 없어 뺐다
- candidateScope·sourceRepository 기록. 나머지 43개 주제는 재선별 대기(PENDING 905)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 12:39:20 +09:00

4.0 KiB

kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, evidenceCapturedOn, assets, evidence, source
kind slug title topic project status sourceRevision rootTreeNode evidenceCapturedOn assets evidence source
CASE five-copies-of-noscript-recovery NOSCRIPT 복구가 다섯 벌이고 넷은 스크립트 레지스트리를 지나지 않는다 redis-command-admission clean-architecture-backend-template 게시 전 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 case:five-copies-of-noscript-recovery 2026-09-01
key file
five-copies-of-noscript-recovery ../../../final/evidence/rendered/five-copies-of-noscript-recovery.svg
../../../final/evidence/raw/five-copies-of-noscript-recovery.txt
원본 분석 절은 final/document.md#4-4 · final/document.md#a10 §56 이다.

NOSCRIPT 복구가 다섯 벌이고 넷은 스크립트 레지스트리를 지나지 않는다

서버가 스크립트를 모른다고 답할 때의 복구 경로가 다섯 곳에 있다. 그중 넷은 스크립트 레지스트리를 거치지 않고 자기 자리에서 다시 적재한다.

관계

  • 같은 개념의 두 어휘가 공존하면 하나를 죽은 것으로 표시한다 같은 계열의 중복 문제다.
  • 단일 admission point는 우회 경로를 세어야 성립한다 같은 리프에서 반복되는 형태다.
  • 중복 장치를 찾으면 어느 쪽이 조립됐는지 먼저 확인한다 다섯 벌 중 어느 것이 도는지 확인해야 하는 이유다.

문제

Redis 는 스크립트를 해시로 실행한다. 서버가 그 해시를 모르면 특정 오류로 답하고, 클라이언트는 스크립트를 다시 적재한 뒤 재시도해야 한다.

이 복구는 흔한 경로다. 서버 재시작이나 스크립트 캐시 정리 후에 반드시 일어난다.

결론

복구 경로가 다섯 벌이다.

그중 하나만 스크립트 레지스트리를 지난다. 나머지 넷은 자기 자리에서 스크립트를 다시 적재한다.

이 상태의 비용은 셋이다.

레지스트리가 어떤 스크립트가 적재되어 있는지에 대한 정본이 아니게 된다. 넷이 그것을 우회해 적재하기 때문이다.

스크립트 내용이 바뀔 때 다섯 곳을 함께 고쳐야 한다. 하나를 놓치면 그 경로만 옛 스크립트를 다시 적재한다.

복구 정책을 바꾸기 어렵다. 재시도 횟수나 백오프를 조정하려면 다섯 곳을 봐야 한다.

증상이 드러나지 않는 것이 이 계열의 특징이다. 다섯 벌이 각각 동작하므로 기능은 정상이다. 비용은 전부 다음에 고치는 사람에게 간다.

검증 환경

OpenJDK : 21.0.12 Redis 클라이언트 : Lettuce 확인 방식 : 복구 경로 전수 확인 소스 수정 : x

재현 조건

  1. 스크립트 없음 오류를 처리하는 코드를 리프 전체에서 찾는다.
  2. 각각이 스크립트를 어떻게 다시 적재하는지 확인한다.
  3. 스크립트 레지스트리를 지나는 것과 그렇지 않은 것을 구분한다.

본문

Redis가 NOSCRIPT를 반환했을 때의 복구(스크립트 재등록 후 재시도)가 다섯 벌로 구현돼 있고 그중 넷이 스크립트 레지스트리를 지나지 않는다.

NOSCRIPT 복구가 구현된 다섯 곳

:::evidence key="five-copies-of-noscript-recovery" alt="분석 문서 final/document.md 에서 이 기록의 근거 절을 그대로 잘라낸 18줄. 코드베이스를 측정한 것이 아니라 원본 판정이 무엇을 적었는지를 보여 준다." caption="final/document.md 발췌 — 18줄" zoom="true" :::

레지스트리를 지나는 한 벌만 대응을 유지한다

레지스트리가 스크립트 SHA와 소스의 대응을 유지하므로, 나머지 넷은 재등록하는 스크립트가 레지스트리가 아는 것과 같다는 보장이 없다.

확인하지 못한 것

서버 재시작 후 다섯 경로가 각각 어떻게 동작하는지 실행으로 확인하지 않았다. 이 기록은 코드 경로 전수 확인에 근거한다.

실제 SCRIPT FLUSH 이후 다섯 경로의 동작 차이를 관측하지 않았다