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>
61 lines
2.3 KiB
Markdown
61 lines
2.3 KiB
Markdown
---
|
|
kind: QUESTION
|
|
slug: a02-f001-lro
|
|
title: response/LRO invariant enforcement boundary
|
|
topic: multitenancy-isolation
|
|
project: clean-architecture-backend-template
|
|
status: 게시 전
|
|
sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
|
|
rootTreeNode: open-question:a02-f001-lro
|
|
questionStatus: OPEN
|
|
verifiedOn: # 이 기록은 이번 회차에 실행 확인을 하지 않았다
|
|
---
|
|
|
|
# response/LRO invariant enforcement boundary
|
|
|
|
응답 봉투 계열 타입의 유효한 형태가 팩토리 테스트에는 고정되어 있고 공개 정규 생성자에서는 강제되지 않는다. 생성자를 확장 표면으로 둘 것인지 결정이 필요하다.
|
|
|
|
## 사실
|
|
|
|
봉투와 벌크 봉투와 연산과 페이지 메타의 유효한 형태가 팩토리 테스트에 고정되어 있다.
|
|
|
|
공개 정규 생성자는 그 불변식을 강제하지 않는다.
|
|
|
|
## 가정
|
|
|
|
정규 생성자가 외부에서 호출되지 않을 것이라고 암묵적으로 전제하고 있다. 그 전제가 확인되지 않았다.
|
|
|
|
## 미지수
|
|
|
|
원시 생성자가 의도된 확장 표면인가.
|
|
|
|
유효하지 않은 상태를 생성자에서 차단해야 하는가.
|
|
|
|
## 제약
|
|
|
|
이 타입들은 공유 계약 계층에 있으므로 변경이 여러 어댑터에 영향을 준다.
|
|
|
|
## 선택지
|
|
|
|
생성자에 불변식을 넣는다
|
|
팩토리와 같은 규칙이 적용되고 유효하지 않은 값이 존재할 수 없다. 확장 표면이 좁아진다.
|
|
|
|
확장 표면으로 유지하고 문서화한다
|
|
허용 범위와 실패 의미를 계약에 적는다. 유효하지 않은 값이 만들어질 수 있다는 것을 받아들인다.
|
|
|
|
## 다음 검증
|
|
|
|
프로덕션에서 원시 생성자를 호출하는 곳을 전수 확인한다. 그리고 유효하지 않은 형태의 생성자 테스트를 추가해 현재 허용 표면을 고정한다.
|
|
|
|
원시 생성자가 외부 확장 계약이면 허용 범위와 실패 의미를 문서화한다.
|
|
|
|
그렇지 않으면 생성자 수준 불변식을 추가하고 팩토리와 같은 규칙을 검증한다.
|
|
|
|
## 관계
|
|
|
|
- **위험한 조합은 정책이 아니라 생성자가 거부하게 만든다**
|
|
이 질문이 선택할 수 있는 한쪽 방향의 규칙이다.
|
|
- **모르는 것은 성공도 실패도 아닌 세 번째 결과여야 한다**
|
|
같은 계약 계층의 상태 어휘 원칙이다.
|
|
|