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>
63 lines
2.3 KiB
Markdown
63 lines
2.3 KiB
Markdown
---
|
|
kind: QUESTION
|
|
slug: analysis-finding-a02-f003
|
|
title: bounded operational record identifiers
|
|
topic: multitenancy-isolation
|
|
project: clean-architecture-backend-template
|
|
status: 게시 전
|
|
sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
|
|
rootTreeNode: open-question:analysis-finding-a02-f003
|
|
questionStatus: OPEN
|
|
verifiedOn: # 이 기록은 이번 회차에 실행 확인을 하지 않았다
|
|
---
|
|
|
|
# bounded operational record identifiers
|
|
|
|
운영 레코드의 네임스페이스와 키가 경계가 있다고 문서에 적혀 있는데, 생성자는 공백 여부만 확인한다. 그 경계를 공유 계약이 소유할지 어댑터가 소유할지 정해지지 않았다.
|
|
|
|
## 사실
|
|
|
|
운영 레코드 문서가 네임스페이스와 키를 경계가 있는 값으로 설명한다.
|
|
|
|
생성자는 공백 여부만 확인한다.
|
|
|
|
## 가정
|
|
|
|
각 어댑터가 자기 제공자의 제한을 알아서 지킬 것이라고 전제하고 있다. 그 전제를 확인하지 않았다.
|
|
|
|
## 미지수
|
|
|
|
제공자별 키 크기와 문자 집합 제한을 공유 계약이 소유해야 하는가 어댑터가 소유해야 하는가.
|
|
|
|
여러 제공자가 공통으로 요구하는 최소 경계가 있는가.
|
|
|
|
## 제약
|
|
|
|
공유 계약이 특정 제공자의 제한을 담으면 그 계약이 제공자에 묶인다.
|
|
|
|
어댑터가 각자 검증하면 같은 검사가 여러 곳에 생긴다.
|
|
|
|
## 선택지
|
|
|
|
공유 값 객체에서 공통 최소 경계를 강제한다
|
|
여러 제공자가 공통 최소 경계를 요구하면 이쪽이 맞다.
|
|
|
|
공유 문서를 좁히고 어댑터 경계에서 검증한다
|
|
제한이 제공자별이면 공유 계약은 경계를 주장하지 않는 편이 정확하다.
|
|
|
|
## 다음 검증
|
|
|
|
실제 제공자와 어댑터의 식별자 제한을 조사하고 프로덕션 생성 지점과 대조한다. 경계값 픽스처를 추가한다.
|
|
|
|
여러 제공자가 공통 최소 경계를 요구하면 공유 값 객체에서 강제한다.
|
|
|
|
제공자별이면 공유 문서의 표현을 좁히고 어댑터 경계에서 검증한다.
|
|
|
|
## 관계
|
|
|
|
- **카디널리티 경계를 타입으로 표현하기**
|
|
경계를 타입으로 표현하는 같은 계열의 개념이다.
|
|
- **위험한 조합은 정책이 아니라 생성자가 거부하게 만든다**
|
|
값 타입에서 강제하는 방향의 규칙이다.
|
|
|