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>
2.7 KiB
2.7 KiB
kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, verifiedOn
| kind | slug | title | topic | project | status | sourceRevision | rootTreeNode | verifiedOn |
|---|---|---|---|---|---|---|---|---|
| REFERENCE | an-applied-checksum-is-a-promise | 적용된 마이그레이션의 checksum은 그것을 돌린 모든 배포에 대한 약속이다 | schema-ownership-and-capability-streams | clean-architecture-backend-template | 게시 전 | 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 | reference:an-applied-checksum-is-a-promise |
적용된 마이그레이션의 checksum은 그것을 돌린 모든 배포에 대한 약속이다
목적
이미 적용된 마이그레이션 파일을 수정해, 그것을 적용한 배포와 앞으로 적용할 배포가 서로 다른 스키마를 갖게 되는 것을 막는다.
규칙
-
적용된 파일은 수정하지 않는다 체크섬이 바뀌면 그 파일을 이미 적용한 배포에서 검증이 실패한다.
-
고쳐야 할 것은 새 마이그레이션으로 고친다 앞의 것을 되돌리거나 보정하는 마이그레이션을 새로 만든다.
-
새 마이그레이션은 순서에 무관하게 동작하도록 가드한다 여러 스트림이 같은 대상을 만들 수 있으면, 어느 쪽이 먼저 돌든 올바르게 끝나야 한다.
-
반복 비용을 두 번 내지 않는다 이미 처리된 대상은 건너뛴다. 테이블 재작성 같은 비싼 작업일수록 중요하다.
-
수정 이력을 헤더에 남긴다 왜 새 번호가 필요했는지가 그 파일에 있어야 다음 사람이 앞의 것을 고치려 하지 않는다.
적용 조건
버전 기반 마이그레이션을 쓰는 모든 스키마 관리
여러 배포가 서로 다른 시점에 마이그레이션을 적용하는 환경
예외
아직 어떤 환경에도 적용되지 않은 마이그레이션은 수정할 수 있다. 그 판단에는 모든 환경을 확인했다는 근거가 필요하다.
예시
컬럼 타입을 바꾸는 마이그레이션이 앞의 마이그레이션을 고치는 대신 새 번호로 추가되었고, 두 스트림의 순서가 고정되어 있지 않아 아직 옛 타입인 컬럼만 변환하도록 가드했다.
컬럼을 넓히는 마이그레이션이 두 위치 모두에 필요했다. 한쪽만 적용한 배포는 옛 제약을 유지한다.
관계
- char(64)와 varchar(64) 불일치를 H2가 가리고 있었다 이 규칙을 따른 수정의 사례다.
- 레지스트리 컬럼이 38자 경로에서 짧아 더 짧은 경로를 적는 우회를 유혹했다 다섯 번째 규칙의 사례다.
- Repair는 모드가 아니라 운영자가 호출하는 작업이다 체크섬 불일치를 다루는 결정이다.