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

# 시뮬레이션 실행

> 앱이나 CLI에서 타겟과 데이터셋만 고르면 바로 시작합니다

시뮬레이션은 시작하기 싸고 돌려보기 빠릅니다. 흐름도 일부러 가볍게 만들었습니다.

## 앱에서

1. **Reliable → Simulation → New run**으로 들어갑니다.
2. **타겟**을 고릅니다.
   * 지금 Draft.
   * 특정 배포 버전.
   * 개선 후보.
3. **데이터셋**을 고릅니다. 태그로 걸러 일부만 쓸 수도 있습니다.
4. 비교할 **베이스라인**을 고릅니다. 안 고르면 지금 배포된 버전이 기본입니다.
5. **Preview**를 누르면 예시 수, 예상 비용, 예상 시간을 보여줍니다.
6. **Run**을 누릅니다.

진행 상황이 실시간으로 흐릅니다. 페이지를 떠났다 돌아와도 됩니다. 끝나면 워크스페이스 알림 바에 완료 알림이 뜹니다.

## CLI에서

```bash theme={null}
nora simulate \
  --flow support-agent \
  --target draft \
  --dataset support-golden-v3 \
  --baseline published
```

옵션은 앱과 같습니다. `--target`은 `draft`, `published`, `version:<id>`, `improvement:<id>`를 받습니다. `--baseline`은 같은 값이나 `none`을 받습니다.

`--tags customer-facing,hard`로 데이터셋을 거릅니다.

`--parallelism 20`으로 동시 실행 수를 조절합니다. 기본은 10입니다.

## CI에서

시뮬레이션으로 배포 파이프라인을 막거나 통과시킵니다. 표준 패턴은 이렇습니다.

```bash theme={null}
nora flows publish --dry-run --gate-simulation support-golden-v3 --min-pass-rate 0.9
```

`--dry-run --gate-simulation`을 함께 쓰면 타겟 Draft를 데이터셋에 돌립니다. 통과율이 최소치보다 낮으면 명령이 실패하고 CI가 멈춥니다.

흔한 방식은 모든 PR에서 게이트 시뮬레이션을 돌리고, 실패하면 머지를 막는 것입니다.

## 어디서 무엇이 도나

모든 시뮬레이션은 격리된 환경에서 돕니다.

* 자격증명이 필요한 도구는 **테스트 자격증명**을 씁니다. Flow마다 test-only로 표시된 별도 커넥터라, 도는 동안 실제 프로덕션에 영향이 가지 않습니다.
* "시뮬레이션에서 돌리면 안 됨" 으로 표시한 Action은 스텁으로 처리합니다. 출력은 `success`로 흉내 냅니다.
* 메모리 쓰기는 시뮬레이션마다 따로 두는 스크래치 공간으로 가고, 실행이 끝나면 버립니다.

환경을 덮어써서(**Run → Advanced → Environment**) 프로덕션 자격증명으로 돌릴 수도 있습니다. 드문 경우로, 처음부터 끝까지 실제로 확인하고 싶을 때만 씁니다. 이때는 안전장치를 꼭 더 두세요.

## 결과 보기

결과 테이블은 예시 하나마다 한 줄입니다.

* **Input** 데이터셋 예시의 입력.
* **Target output** 타겟이 내놓은 결과.
* **Baseline output** 베이스라인이 내놓은 결과(비교할 때).
* **Expected** 데이터셋의 기대 출력.
* **Verdict** pass / fail / regression / improvement.
* **Cost**와 **latency**.

정렬하고, 거르고, 줄을 누르면 그 예시의 전체 트레이스를 봅니다.

## 중단

오래 걸리는 시뮬레이션은 언제든 멈출 수 있습니다. 그때까지의 결과는 "partial" 로 표시해 남깁니다. 앞 20개만 봐도 변경이 안 먹힌다는 게 분명할 때 쓰면 좋습니다.

## 다시 돌리기

같은 시뮬레이션을 다시 돌릴 수는 있지만 대개 의미가 없습니다. 같은 타겟에 같은 데이터셋이면 결과도 같습니다(모델 무작위성에서 오는 잡음만 다릅니다). 보통 원하는 건 이런 쪽입니다.

* **새 데이터셋 버전으로 다시 돌리기** 새 예시를 집어옵니다.
* **새 타겟으로 다시 돌리기** 이번 결과에서 얻은 걸로 Draft를 손본 뒤에.

다시 돌릴 때마다 새 시뮬레이션 레코드가 생기므로 이력은 그대로 남습니다.
