Files
llm-wiki/raw/blog-topics/identifier-governance-rule-scoping-by-id-kind-2026-06-01.md
T

5.0 KiB

title, source_type, status, related_branches, related_projects, tags, created, status_label, target_audience, inspiration_url, archive_url
title source_type status related_branches related_projects tags created status_label target_audience inspiration_url archive_url
blog-topic / identifier-governance-rule-scoping-by-id-kind-2026-06-01 blog-topic raw
feature-resource-identifier-contract
feature-boundary-validation-mapping-contract
ca-tmpl
blog-topic
ca-tmpl
archunit
identifier
architecture
ddd
clean-architecture
2026-06-01 ready-for-canonical backend-engineer

blog-topic: identifier-governance-rule-scoping-by-id-kind-2026-06-01

Layer: raw/blog-topics/ — 채용공고가 아닌 작업·학습·트러블슈팅에서 나온 블로그 글감 원석.

Parent / 부모

트리거 / Trigger

글감 / Topic seed

  • 한 문장 요지: 한 시스템에는 ID가 여러 종류(resource / trace / session / idempotency-key / api-key)가 공존하고, 각각 생성 주체·형식·수명·책임 branch가 다르다. "모든 UUID.randomUUID()를 금지"하는 ArchUnit rule은 합법적인 trace-id 생성을 잡는 false positive를 낳는다 — 거버넌스 규칙은 ID 종류별로 scope해야 한다.
  • 떠오른 계기: resource-id 전용 no_uuid_random_in_controllerRequestLoggingFilter의 correlation-id 생성을 잡음.
  • 예상 제목 후보:
    • "ID 종류별 거버넌스": 한 규칙으로 모든 식별자를 다스리려다 생긴 false positive
    • Clean Architecture에서 도메인 식별자를 인프라 결합 없이 생성하기 (port + application orchestration)
    • ArchUnit fitness function의 scope 설계: 결정 텍스트 vs reference 코드

핵심 주장 후보 / Claim candidates

  • DDD factory pattern은 "entity가 자기 ID를 minting"하라고 요구하지 않는다 — factory는 도메인 service/port이고, 생성 호출 시점은 use case orchestration이다. 도메인 순수성(인프라 라이브러리 미결합)과 server-assigned id를 동시에 만족.
  • 식별자 거버넌스 ArchUnit rule은 대상 ID의 종류를 명시해야 한다: resource id는 controller/use case에서 직접 생성 금지(factory 강제), trace id는 filter에서 생성 정상(distributed-tracing 책임), idempotency-key는 client 생성(rate-limit 책임).
  • rule selector는 spec의 "결정 텍스트(좁은 의도)"와 "reference 코드(넓은 예시)"가 어긋날 때 결정 텍스트를 따른다.
  • 사람이 만든 sealed 계층 enumeration이 모듈 경계로 불가능할 때, ArchUnit rule(no_long_id_pk)이 compile-time sealed permits의 빌드타임 대체가 된다.

Outline seed

  1. ID는 하나의 범주가 아니라 resource/trace/session/idempotency/api key처럼 책임이 나뉜다.
  2. 너무 넓은 ArchUnit rule은 합법적인 trace-id 생성까지 잡는 false positive를 만든다.
  3. governance rule은 결정 텍스트의 좁은 의도와 ID kind별 owner를 기준으로 scope한다.

Canonical 전환 후보 / Canonical extraction candidates

  • wiki/projects/ca-tmpl/resource-identifier-format.md 후보:
    • ca-tmpl identifier governance rule scoping 결정과 false-positive boundary.
  • wiki/concepts/resource-identifier-format.md 후보:
    • ID kind별 governance 일반 개념.

Sources / 근거 후보

미해결 / Unknown

  • 아직 확인해야 할 사실: resource-id rule과 tracing/correlation-id rule의 owner 경계를 concept 문서에 어느 수준까지 일반화할지.
  • 과장하면 안 되는 부분: 모든 UUID.randomUUID() 호출을 금지하는 것이 정답이라고 쓰지 않는다.
  • 블로그로 쓰기 전에 필요한 canonical 정제: 이미 wiki/projects/ca-tmpl/resource-identifier-format.md에 연결됨. ID kind별 일반 개념은 blogify 전 확인한다.

Decision / 처리 결정

  • 액션: promote-to-canonical
  • 이유: wiki/projects/ca-tmpl/resource-identifier-format.md 에 identifier kind별 governance scoping 글감으로 반영했다.
  • 다음 단계: source canonical이 verified 상태이므로 이후 blogify 대상으로 삼을 수 있다. 단 모든 UUID.randomUUID() 금지가 정답이라고 쓰지 않는다.