Files
KArtSell.Aegis/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/configuration-governance-v22.md
T
kjh2064 3f293d8aa8
deploy / deploy (push) Successful in 1m52s
deploy / notify (push) Successful in 1s
V13-FE-006: consolidate approved UI and contract hardening
2026-08-13 02:41:00 +09:00

1.5 KiB

KBX Configuration Governance v22

목적

설정도 코드와 동일한 계약으로 취급한다. 개발자의 로컬 설정이 운영 의미를 결정하거나, 운영 Secret이 Repository에 들어가거나, 동일 Release가 환경별로 다른 방식으로 빌드되는 상태를 방지한다.

경계

  • Static configuration: DB 연결, Hangfire/SignalR 사용여부, Provider credential reference, Observability endpoint, 업로드 한도처럼 배포/프로세스 생명주기에 속하는 값.
  • Dynamic runtime state: Experiment rollout/kill switch, Runtime incident/read-only 상태처럼 이미 DB 기반 관리 계약이 있는 값. 이 값을 다시 appsettings로 복제하지 않는다.
  • Domain rule: 재고부족, 출고 가능 상태, 가격/수량 규칙. Configuration으로 우회하지 않는다.

Source precedence

defaults → appsettings → environment-specific appsettings → environment → secret-store → command-line

Secret은 환경변수/User Secrets/Secret Store 경로만 허용한다. Repository 예제에는 실제 값을 넣지 않는다.

Fail fast

KbxConfigurationStartupValidator는 첫 업무 요청 전에 Required/Conditional Required/Enum/Integer Range/URI/Production Safety를 검증한다. 오류 메시지에는 Secret 값을 출력하지 않는다.

Configuration fingerprint

운영 재현용 fingerprint는 non-secret 설정만 canonical order로 SHA-256 한다. 이 값은 배포/로그에 남길 수 있지만 Secret fingerprint나 Secret value를 포함하지 않는다.