Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/operator-approval-and-destructive-operations/concept/concept-approval-verification-execution.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

5.3 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
CONCEPT approval-verification-execution 승인·검증·실행의 분리와 그것을 타입으로 표현하기 operator-approval-and-destructive-operations clean-architecture-backend-template 게시 전 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 concept:approval-verification-execution 2026-09-01
key file
approval-verification-execution ../../../final/evidence/rendered/approval-verification-execution.svg
key file
approval-verification-execution-diagram ../../../final/assets/diagrams/approval-verification-execution.svg
../../../final/evidence/raw/approval-verification-execution.txt
원본 분석 절은 final/document.md#a19-messaging-admin-api §4 · §17 이다.

승인·검증·실행의 분리와 그것을 타입으로 표현하기

운영자 도구가 파괴적 작업을 부를 때 세 능력이 분리되어야 한다. 승인을 발급하는 능력, 그 승인이 진짜인지 검증하는 능력, 작업을 실행하는 능력.

관계

  • 위조 가능한 승인이 하필 되돌릴 수 없는 작업 쪽에만 남았다 이 분리가 절반만 적용된 사례다.
  • 서명 능력과 검증 능력은 같은 객체에 두지 않는다 세 능력 중 앞의 둘에 대한 규칙이다.
  • 권한이 센 절반이 설정 한 줄로 켜지면 안 된다 같은 계열의 기존 규칙이다.

본문

운영자 도구가 파괴적 작업을 부를 때 세 가지가 분리되어야 한다. 승인을 발급하는 능력, 그 승인이 진짜인지 검증하는 능력, 그리고 작업을 실행하는 능력.

승인이 실행에 닿기까지

:::evidence key="approval-verification-execution-diagram" alt="승인 발급에서 가드 검증으로 승인 문서가 건너가고 가드 검증에서 파괴적 실행으로 VerifiedApproval 이 건너간다" caption="승인이 실행에 닿기까지" zoom="false" :::

호출자가 자기에 대해 하던 주장

이 리프가 그 분리를 타입으로 표현한 이력이 javadoc 에 남아 있다 — 예전에는 승인된 계획 타입이 public 생성자를 가진 평범한 record 라서 "이 계획은 승인됐다" 가 호출자가 자기에 대해 한 주장이었고, 실행 메서드에 닿을 수 있는 코드는 무엇이든 승인을 지어낼 수 있었다. 그 수정이 VerifiedApproval 이다 — 검증을 통과했다는 사실 자체를 타입으로 만들어 생성자를 막았다.

VerifiedApproval 참조 위치

:::evidence key="approval-verification-execution" alt="코드베이스에서 VerifiedApproval 를 검색한 출력 12줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="VerifiedApproval 코드베이스 검색 — 12줄 · exit 0" zoom="true" :::

javadoc 목록에 빠진 두 조건

가드는 네 조건이 아니라 여섯을 본다 — 작업 종류 일치와 출처 일치가 javadoc 목록에 빠져 있다. 그중 다섯 번째의 인라인 주석이 이 개념의 요점을 말한다 — "A guard that only checks presence and window lets a verified redrive approval authorise a destination deletion."

:::note

이 표면 전체에 production 소비자가 없어 실행으로 확인한 것이 없다

:::

왜 셋인가

파괴적 작업은 되돌릴 수 없다. 목적지를 지우거나 오프셋을 되돌리면 그 전 상태는 없다.

그러므로 실행하는 쪽이 스스로 승인할 수 없어야 한다. 승인이 별도의 사람이나 시스템에서 오고, 실행 직전에 그것이 진짜인지 확인해야 한다.

승인을 타입으로 만든 이력

이 리프의 javadoc 이 이전 형태와 그 결함을 적는다.

The approved-plan types used to hold a plain AdminApproval record with a public constructor, so "this plan was approved" was a claim the caller made about itself. Any code that could reach the execute method could write new AdminApproval("TICKET-1", "someone", now, later) and the platform believed it.

승인된 계획이 public 생성자를 가진 평범한 record 였으므로, 승인됐다는 것은 호출자가 자기에 대해 한 주장이었다는 뜻이다.

수정은 검증을 통과했다는 사실 자체를 타입으로 만드는 것이었다. 그 타입은 검증기만 만들 수 있고, 실행 메서드는 그 타입을 요구한다. 그러면 승인을 지어내려면 검증기를 통과해야 한다.

가드가 보는 것

가드의 클래스 javadoc 은 네 조건을 든다. 실제 본문은 여섯을 본다. 작업 종류 일치와 출처 일치가 목록에서 빠져 있다.

그 둘이 사소하지 않다는 것을 다섯 번째 분기의 인라인 주석이 말한다.

A guard that only checks presence and window lets a verified redrive approval authorise a destination deletion.

승인이 있고 유효 기간 안이라는 것만 보면, 검증된 리드라이브 승인으로 목적지 삭제를 인가할 수 있다는 뜻이다. 승인의 존재와 그 승인이 이 작업을 인가한다는 것은 다른 사실이다.

이 표면의 현재 상태

이 리프 전체에 production 소비자가 없다. 운영자 도구가 아직 없기 때문이다. 그래서 여기 기록된 것들은 전부 그 도구가 생기는 순간의 모양에 대한 것이다.