# 시나리오(Scenario)

시나리오 정의 화면에서는 시스템에서 운영될 시나리오를 (생성/수정/삭제/테스트) 관리한다.

## 속성(properties)

- 이름(name)
  - 시나리오의 이름을 지정
  - 이름은 유니크해야함
- 설명(description)
- 스케쥴 [schedule](./crontab-editor.md)
- 타임존(timezone)
  - 스케쥴이 운영될 기준 시간대를 설정한다.
- 필수 권한 (required privilege)
  - 시나리오를 실행할 수 있는 필수 권한을 설정한다.
- 활성화(active flag)
  - 어플리케이션 시작 시점에 자동으로 시작여부 지정
- 반복 실행 범위(Iteration Scope)
  - 여러 도메인에 걸쳐 순차적으로 시나리오를 실행할 도메인 범위를 지정한다.
  - **SELF**: 현재 도메인에서만 시나리오를 실행한다.
  - **CHILDREN**: 현재 도메인의 자식 도메인에서만 시나리오를 실행한다.
  - **SELF & CHILDREN**: 현재 도메인과 자식 도메인 모두에서 시나리오를 실행한다.
  - 이 기능은 StartScenario 작업에만 적용되며, RunScenario 작업에는 영향을 주지 않는다.
  - 지정된 도메인들에 대해 순차적으로 시나리오가 실행되어 적절한 순서와 의존성 관리가 보장된다.
- TTL(Time To Live)
  - 시나리오의 결과를 캐시에 저장하고 설정된 TTL seconds 동안 유지한다.
  - TTL이 0보다 크게 설정된다면, 시나리오는 실행될 때마다 그 결과를 캐시에 저장한다. (RunScenario, StartScenario)
  - 캐시의 key는 시나리오 ID" + "도메인" + "시나리오 호출 파라미터 오브젝트" 조합으로, 호출 파라미터 오브젝트로 해시키를 만들어서 기록된다.
  - RunScenario로 시나리오가 실행되는 경우에는 해당되는 유효한 캐시가 있는 지를 먼저 확인하고, 있다면 실제로 시나리오를 실행하지 않고 캐시에 저장된 결과가 리턴된다.
  - StartScenario로 시나리오가 실행되는 경우에는 캐시 여부와 무관하게 실제로 시나리오를 실행하고, 그 결과로 캐시를 업데이트 한다.
- progress (모니터링중에만 표시되는 정보임)
  - (현재 스텝 번호 / 시나리오의 전체 스텝수) %
  - 메인 시나리오 기준이며, 서버시나리오는 하나의 스텝으로 계산된다.
- round (모니터링중에만 표시되는 정보임)
  - 반복되는 경우 현재 몇번째 반복횟수인지를 표현
- message (모니터링중에만 표시되는 정보임)
  - 시나리오 인스턴스의 최종 상태와 관련한 메시지

## operations

- 모니터링 시작(start monitoring)
  - [인티그레이션 모니터링](./integration-monitor.md) 화면으로 이동한다.
- 복사(copy scenario)
  - 선택된 시나리오를 복사한다
- 저장(save scenario)
  - 시나리오 수정사항을 저장한다.
  - 실행중 시나리오는 수정할 수 없다.
- 삭제(delete scenario)
  - 선택된 시나리오를 삭제한다.
  - 실행중 시나리오는 삭제할 수 없다.
