> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 정책 테스트

> 이미 보유한 트래픽을 기반으로 초안을 백테스트하고, 어떤 기계도 실행하기 전에 차단해야 할 것은 차단하고 허용해야 할 것은 허용함을 증명하세요.

모든 정책을 두 가지 방법으로 테스트하세요. 에이전트가 이미 생성한 트래픽을 대상으로 테스트하고, 반드시 허용해야 하는 합법적인 작업을 대상으로 테스트하세요. 안전하지 않은 케이스만 테스트한 정책은 제대로 테스트된 것이 아닙니다.

## 초안 백테스트

<Tabs>
  <Tab title="대시보드">
    정책 편집기는 게시하기 전에 이미 발생한 호출에 대해 초안을 재실행합니다.

    1. **Admin → policy editor**에서 초안을 여세요. 편집기가 JavaScript로 파싱되는지 확인합니다.
    2. **backtest**에서 재실행할 에이전트와 시간 범위를 선택하세요. 기본값은 **every agent**와 **30d**이며, 범위를 좁히려는 경우가 아니면 마지막 필터는 **everything**으로 두세요.
    3. **run backtest**를 선택하세요.

           <img src="https://mintcdn.com/exosphere/k_s8fY_jSxA_m1d_/images/dashboard/policy-backtest.png?fit=max&auto=format&n=k_s8fY_jSxA_m1d_&q=85&s=4231c5aa520d82131f70d1b9226e0114" alt="세 가지 필터와 run backtest 액션이 있는 초안 아래의 백테스트 패널, publish version 위에 표시됨." width="2284" height="522" data-path="images/dashboard/policy-backtest.png" />

    결과는 해당 호출에 초안이 적용되었을 경우의 동작을 보여줍니다. **working** 호출 중 몇 개가 중단되었을지도 포함됩니다. 이것이 에이전트를 만나기 전에 발견된 거짓 양성입니다. 그 수가 수용 가능한 수준이 될 때까지 초안을 수정하고 다시 실행하세요.
  </Tab>

  <Tab title="CLI">
    백테스팅은 대시보드 기능입니다. 터미널에서는 아래와 같이 직접 작성한 이벤트에 대해 정책을 실행하세요.
  </Tab>
</Tabs>

## 직접 작성한 이벤트로 실행하기

`fp policies test`는 정책 파일을 로컬 머신에서 합성 이벤트에 대해 실행하고 결정을 확인합니다. 아무것도 게시되지 않으며 Cloud에도 전달되지 않습니다.

```bash theme={null}
fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny
fp policies test ./checkout.policy.mjs --command "git push" --expect allow
```

`--event`, `--tool`, `--command`, `--file`로 이벤트의 형태를 지정하세요. 정책 자체의 `match` 필터가 여전히 적용되므로, 작성한 이벤트를 커버하지 않는 정책은 결정 대신 `skipped`를 반환합니다. 이는 보통 `match` 범위가 의도보다 좁다는 신호입니다.

## 한 대의 머신에서 실행하기

다음으로, 자신의 머신에서 자신의 에이전트를 대상으로 실제로 적용해 보세요.

```bash theme={null}
failproofai policies --install --custom ./checkout.policy.mjs --scope project
failproofai policies
```

첫 번째 명령은 파일을 검증하고 설치합니다. 두 번째 명령은 이곳에서 적용되는 모든 항목과 함께 로드되었음을 확인합니다. 에이전트에게 정책이 차단하는 작업을 요청하여 거부되는지 확인하고, 합법적인 작업을 요청하여 통과되는지 확인하세요. 다른 사람에게는 영향이 없습니다.

Cloud에 연결된 머신에서는 **Observe → policy**에서 두 결정을 모두 확인하세요. 정책 이름으로 필터링한 후, 연결된 각 세션을 열어 매칭된 도구 입력과 반환된 이유를 확인하세요.

## 오류 케이스 테스트

설치 시 누락된 파일, 구문 오류, 해결되지 않은 import, 최상위 예외, 또는 로딩 중 타임아웃되는 모듈이 있으면 거부됩니다. 따라서 파일이나 import하는 항목을 변경할 때마다 다시 실행하세요. 실행 시 동일하게 손상된 파일은 로그에 기록되고 **skipped** 처리되어 다른 모든 정책은 계속 실행됩니다. 프로덕션 로그에서 로드 경고를 발견하면 실행되지 않는 정책이 있다는 의미로 처리하세요. Convention 파일은 install 명령 없이 로드되므로 CI에 `failproofai policies --install --custom <file>` 단계를 명시적으로 추가하세요. 이것이 손상된 정책으로 인해 빌드를 실패시키는 방법입니다.

그런 다음 예상하는 입력뿐만 아니라 에이전트가 실제로 전송하는 내용을 입력으로 사용하세요. 누락된 필드, `Write`와 `Edit` 같은 대체 도구 이름, Windows 경로, 잘못된 형식의 입력 등을 시도해보세요. 모든 경로에서 의도적인 `allow`, `instruct` 또는 `deny`를 반환하고, 함수를 결정적으로 유지하며, 외부 호출에는 짧은 타임아웃을 적용하세요.

## 게시 후 관찰

백테스트는 보유한 트래픽에 정책이 어떻게 동작했을지 보여줍니다. 아직 보지 못한 트래픽이 어떻게 동작할지는 보여줄 수 없습니다. 편집기에서 **publish version**을 선택하거나 `fp policies publish`를 실행한 후, 먼저 **observe** 모드로 [배포하세요](/ko/policies/deploy). 이 모드에서는 판정이 기록되지만 아무것도 차단되지 않습니다. 매칭 결과가 안전하지 않은 작업과 유효한 작업을 명확히 구분하면 그때 적용하세요.
