Skip to main content

드라이런이란?

**드라이런(Dry Run)**은 단일 입력 팩트가 특정 정책 버전의 규칙에 대해 어떻게 평가되는지 테스트합니다 — 부작용 없이. 실행 로그가 기록되지 않고, 연동도 호출되지 않으며, 할당량도 차감되지 않습니다. 규칙에 대한 단위 테스트라고 보면 됩니다.
드라이런 vs 변경 영향 시뮬레이션 vs 의사결정 재실행: 드라이런은 빠른 검증을 위해 직접 입력한 하나의 값을 테스트합니다. 변경 영향 시뮬레이션수백~수천 개의 과거 입력에 대해 버전을 테스트하고 베이스라인과 비교합니다. 의사결정 재실행(Decision Replay)실제 과거 결정 하나를 후보 버전으로 재평가해 결과를 diff합니다. 개발 중에는 드라이런을, 배포 전 회귀 검증에는 시뮬레이션을, “바로 이 프로덕션 결정은 어떻게 됐을까”라는 질문에는 재실행을 사용하세요.

언제 사용하나요

  • 규칙을 만들거나 수정한 직후 — 의도한 입력에 매칭되는지 확인
  • DRAFT 버전을 발행하기 전 — 안전망
  • 예상과 다른 실행 결과를 디버깅할 때 — 시나리오 재현
  • 두 버전을 동일 입력으로 비교하고 싶을 때 (Dry Run Compare)

드라이런 실행

콘솔

정책 버전 페이지 → Dry Run 탭 → 입력 팩트 입력 → Run 클릭.

CLI

API

응답

상태 3 층위 (State Layers)

data 객체는 상태를 세 층위로 명시적으로 분리해 노출합니다 — 한 덩어리로 합쳐서 돌려주지 않습니다.
  • inputFacts — 요청에서 받은 입력 팩트 (정규화 후).
  • mutatedFacts — 규칙 액션에 의해 값이 변경된 팩트만.
  • generatedVariables — 규칙 액션이 새로 생성한 변수 (입력에 없었던 것). 액션별 변화 키도 포함됩니다 — {refVar}__delta(MUTATE_FACT의 부호 포함 변화량)와 {targetVar}__delta(INCREMENT_FACT의 0 이상 증분량).
합본이 필요하면 언제든 { ...inputFacts, ...mutatedFacts, ...generatedVariables }로 재구성할 수 있습니다. 분리해서 돌려주는 이유는 감사·재현·디버그가 결정적이어야 하기 때문입니다 — 어떤 값이 어디서 왔는지가 항상 명확합니다.

실행 트레이스 (Execution Traces)

엔진이 평가한 모든 규칙은 실행 트레이스 하나를 남깁니다. 트레이스는 어떤 매칭 표현식이 검증됐는지, 규칙이 본 입력 팩트가 무엇이었는지, 어떤 액션이 생성됐는지를 기록합니다:
4개의 식별자(tenantId, policyGroupId, policyVersionId, ruleId)가 모든 트레이스를 자급 식별 가능하게 만듭니다 — 외부 조회 없이도 어느 tenant·그룹·버전·규칙에서 나온 트레이스인지 알 수 있습니다.

의사결정 트레이스 (Decision Traces)

실행 트레이스가 무엇을 평가했는가를 기록한다면, 의사결정 트레이스는 무엇이 선택됐는가를 기록합니다. 모든 규칙은 decisionTraces에 최종 status와 그 사유 코드와 함께 등장합니다:
reasonDetail은 nullable입니다 — 엔진이 추가로 노출할 컨텍스트가 있을 때 사람이 읽을 수 있는 메시지가 들어갑니다 (예: 도달한 구체적 한도 값).
status × reasonCode 전체 매핑은 정책 룰의 Decision Trace 섹션을 참조하세요.

요구사항 확인

드라이런 전에 버전이 기대하는 팩트를 확인하세요:

드라이런 비교

두 버전이 동일한 입력에 대해 어떻게 평가하는지 나란히 비교:

다음 단계

변경 영향 시뮬레이션

수백 개의 과거 입력에 대해 한 번에 테스트합니다.

배포

검증된 버전을 프로덕션에 배포합니다.