Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/non-atomic-check-then-act/reference/reference-beginning-a-transition-and-the-set-it-covers-are-one-operation.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

2.6 KiB

kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, verifiedOn
kind slug title topic project status sourceRevision rootTreeNode verifiedOn
REFERENCE beginning-a-transition-and-the-set-it-covers-are-one-operation 전이를 시작하는 쓰기와 그 전이가 덮는 집합은 한 연산이어야 한다 non-atomic-check-then-act clean-architecture-backend-template 게시 전 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 reference:beginning-a-transition-and-the-set-it-covers-are-one-operation

전이를 시작하는 쓰기와 그 전이가 덮는 집합은 한 연산이어야 한다

목적

이제부터 다르게 동작한다고 선언하는 전이에서, 선언과 그 선언이 지배하는 대상의 갱신 사이에 끼어드는 쓰기를 막는다.

규칙

  1. 전이를 두 단계로 나눴는지 본다 플래그를 세우는 쓰기와 그 플래그가 덮는 대상을 갱신하는 쓰기가 따로 있으면 해당한다.

  2. 그 플래그를 읽는 가드를 전부 찾는다 가드를 통과한 뒤 쓰는 코드가 문제의 후보다.

  3. 가드 통과와 쓰기 사이에 다른 스레드가 낄 수 있는지 본다 낄 수 있으면 두 단계를 하나로 합치거나 그 구간을 락으로 닫는다.

  4. 전이 이후의 쓰기가 무해한지 확인한다 무해하면 두 단계로 나눠도 된다. 다만 무해함은 전이가 덮는 대상 전체에 대해 성립해야 한다.

적용 조건

배수, 종료, 회전, 차단처럼 상태 전이로 동작 규칙이 바뀌는 모든 자리.

예외

전이 이후에 도착한 쓰기가 결과를 바꾸지 않는 경우. 집합에 다시 넣어도 결과가 같은 종류의 갱신이 그렇다. 대상이 늘어나면 그 무해함을 다시 확인해야 한다.

예시

헬스 레지스트리의 배수 시작이 플래그를 쓰고 상태 맵을 바꾸는 두 단계다. 그 사이에 서빙 갱신이 끼면 전역 상태가 서빙으로 되돌아간다.

자격증명 회전에서 배수 완료가 자기가 읽은 값으로 상태를 다시 써서 진행 중인 회전을 되돌린다.

채널 세대 교체가 읽고 판단한 뒤 조건 없이 쓴다.

관계

  • 원자 타입 위의 검사 후 실행과 비교 후 교체 루프 이 규칙이 나온 구조다.
  • 배수를 시작한 뒤에도 한 서비스가 다시 SERVING 이 될 수 있다 이 규칙을 만든 사례다.
  • 배수 완료가 자기가 읽은 값으로 상태를 다시 써서 진행 중인 자격증명 회전을 되돌린다 같은 규칙을 어긴 다른 리프의 사례다.