Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/drift-direction/case/case-the-readme-recipe-does-not-start.md
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.

Follows the import procedure in README.md.

  source/     the originating repository verbatim — 78 documents, 28 SVGs,
              8 manifests, plus .source-revision recording the commit
  final/      the SSOT
    document.md   729 lines written from the 29 experiment documents, not
                  concatenated: what was predicted, what was measured, and
                  where the measurement itself was wrong
    evidence/raw    125 outputs, flattened to <experiment>__<file> because
                    the originals collided (01-baseline.txt appeared three
                    times) and the audit only globs the top level
    evidence/meta   one per raw file; command and exitCode are null and the
                    README says why rather than inventing them
    evidence/browser  22 captures
    assets/       three diagrams through techviz
    .techviz/     their VizSpecs

A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.

Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.

verify-pipeline.py passes. audit-records.py reports no issues.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:51:59 +09:00

89 lines
4.0 KiB
Markdown

---
kind: CASE
slug: the-readme-recipe-does-not-start
title: README의 활성화 recipe를 그대로 따르면 애플리케이션이 시작되지 않는다
topic: drift-direction
project: clean-architecture-backend-template
status: 게시 전
sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
rootTreeNode: case:the-readme-recipe-does-not-start
evidenceCapturedOn: 2026-09-01
assets:
- key: the-readme-recipe-does-not-start
file: ../../../final/evidence/rendered/the-readme-recipe-does-not-start.svg
evidence:
- ../../../final/evidence/raw/the-readme-recipe-does-not-start.txt
source:
- 원본 분석 절은 final/document.md#7-4 · analysis/06 §4, §23 이다.
---
# README의 활성화 recipe를 그대로 따르면 애플리케이션이 시작되지 않는다
리프의 README 는 mongo 를 켜는 절차를 적는다. 그 절차만 따르면 타입 메타데이터가 하나도 등록되지 않고, 그 상태의 첫 쓰기는 예외로 끝난다.
## 관계
- **출하 default 조합이 첫 write에서 예외를 던진다**
같은 조합을 실행으로 확인한 사례다.
- **과대 진술 문서를 과소보다 먼저 고친다**
문서가 성립하지 않는 절차를 적었을 때의 우선순위다.
## 문제
README 는 이 리프를 활성화하는 절차를 안내한다. 마스터 스위치를 켜고 접속 설정을 주는 형태다.
그 절차에는 타입 메타데이터 등록이 없다.
## 결론
절차만 따르면 첫 쓰기가 예외로 끝난다.
기본 빈 정의가 정책 인식 타입 매퍼를 모든 매핑 변환기에 설치하고 레지스트리는 빈 것으로 만든다. 등록되지 않은 타입에 대한 쓰기 경로는 예외를 던진다.
실행으로 확인한 결과는 관련 Case 에 있다. 빈 레지스트리에서 루트 쓰기와 중첩 쓰기가 모두 IllegalStateException 이고, 같은 문서를 스프링 기본 매퍼로 쓰면 정상이다.
즉 README 의 절차는 문서 안에서는 완결되어 보이지만 실행하면 완결되지 않는다. 빠진 단계가 무엇인지도 문서에 없다.
드리프트의 방향이 나쁜 쪽이다. 문서가 실제보다 적게 요구한다. 읽는 사람은 절차를 다 따랐다고 믿고, 실패는 배포 후 첫 쓰기에서 나타난다.
## 검증 환경
OpenJDK : 21.0.12
Gradle : 9.0.0
확인 방식 : README 절차와 기본 빈 정의 대조, 그리고 별도 probe 의 실행 결과 참조
소스 수정 : x
## 재현 조건
1. 리프의 README 에서 활성화 절차를 읽는다.
2. 그 절차가 타입 메타데이터 등록을 요구하는지 확인한다.
3. 기본 빈 정의에서 레지스트리가 비어 있게 만들어지는지 확인한다.
4. 빈 레지스트리 조합의 쓰기 결과를 확인한다. 원문은 evidence/raw/129-mongo-empty-type-registry-write-probe.txt 다.
## 본문
<!-- body:start -->
README가 제시하는 활성화 절차를 그대로 따르면 시작은 하고 첫 write에서 예외가 난다.
## README 가 제시하는 절차
:::evidence key="the-readme-recipe-does-not-start" alt="분석 문서 final/document.md 에서 이 기록의 근거 절을 그대로 잘라낸 18줄. 코드베이스를 측정한 것이 아니라 원본 판정이 무엇을 적었는지를 보여 준다." caption="final/document.md 발췌 — 18줄" zoom="true"
:::
## 세 사실이 겹친다
빈 registry가 기본 bean이고, policy-aware mapper가 모든 converter에 무조건 설치되며, 미등록 타입 write가 `IllegalStateException`을 던진다.
## 실패의 출처를 probe 가 좁혔다
shipped default 조합을 실제로 구성해 확인했고, 같은 converter에 Spring 기본 mapper를 두면 같은 write가 성공한다 — 실패는 문서·엔티티 형태가 아니라 이 leaf가 설치한 mapper에서 온다.
## 확인하지 못한 것
README 절차를 처음부터 끝까지 실제로 수행해 애플리케이션을 기동하지 않았다. 확인한 것은 절차에 빠진 단계와 그 단계가 없을 때의 쓰기 결과다.
실제 MongoDB에 붙이지 않았다(probe는 converter 수준)
<!-- body:end -->