

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Step Functions 워크플로를 위한 Amazon States Language의 상태 머신 구조
<a name="statemachine-structure"></a>

**상태 관리 및 데이터 트랜스포밍**  
[변수를 사용하여 상태 간 데이터 전달](workflow-variables.md)과 [JSONata를 사용하여 데이터 트랜스포밍](transforming-data.md)에 대해 알아봅니다.

다음 필드가 들어 있는 구조를 나타내는 JSON 텍스트를 사용하여 정의된 상태 머신입니다.

** `Comment`(선택 사항)**  
육안으로 읽을 수 있는 머신 상태 설명입니다.

** `QueryLanguage`(선택 사항, 생략할 경우 기본값은 `JSONPath`)**  
+ 상태 머신에서 사용하는 쿼리 언어의 이름입니다. 허용되는 값은 `JSONPath` 및 `JSONata`입니다.
+ 상태 머신에 제공되지 않은 경우 각 상태의 기본값은 JSONPath입니다.
+ 최상위 상태 머신 쿼리 언어가 `JSONPath`인 경우 개별 상태는 QueryLanguage를 `JSONata`로 설정하여 쿼리 언어를 재정의할 수 있습니다. 이 접근 방식을 사용하면 상태 머신을 JSONPath에서 JSONata로 한 번에 한 상태로 점진적으로 변환할 수 있습니다.
+ **참고:** 최상위 JSONata 기반 상태 머신을 JSONata 및 JSONPath 상태 혼합으로 되돌릴 수 없습니다.

** `StartAt`(필수)**  
상태 객체 중 하나의 이름과 대/소문자를 포함하여 정확하게 일치해야 하는 문자열입니다.

** `TimeoutSeconds`(선택 사항)**  
상태 머신이 시작할 수 있는 실행의 최대 시간(초)입니다. 지정된 시간보다 오래 실행될 경우 실행이 실패하고 `States.Timeout` [오류 이름](concepts-error-handling.md#error-handling-error-representation)이 표시됩니다.

** `Version`(선택 사항)**  
상태 머신에 사용되는 Amazon States Language의 버전입니다(기본값: "1.0").

** `States`(필수)**  
쉼표로 구분된 상태 집합을 포함하는 객체입니다.

`States` 필드에는 다음과 같은 [상태](workflow-states.md)가 포함됩니다.

```
{
    "State1" : {
    },

    "State2" : {
    },
    ...
}
```

상태 머신은 상태 머신에 들어 있는 상태 및 상태 간 관계에 의해 정의됩니다.

다음은 예입니다.

```
{
  "Comment": "A Hello World example of the Amazon States Language using a Pass state",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Pass",
      "Result": "Hello World!",
      "End": true
    }
  }
}
```

상태 머신 실행이 시작되면 `StartAt` 필드(`"HelloWorld"`)에서 참조하는 상태로 시스템이 시작됩니다. 이 상태에 `"End": true` 필드가 있으면 실행이 중지되고 결과가 반환됩니다. 그렇지 않으면 시스템에서 `"Next":` 필드를 찾고 해당 상태로 다음 작업을 계속합니다. 터미널 상태(`"Type": "Succeed"`, `"Type": "Fail"` 또는 `"End": true`인 상태)에 도달하거나 런타임 오류가 발생할 때까지 이 프로세스가 반복됩니다.

상태 머신 내 상태에는 다음 규칙이 적용됩니다.
+ 상태는 닫힌 블록 내에서 어느 순서로든 발생할 수 있지만 상태가 나열된 순서가 실행 순서에 영향을 미치지 않습니다. 상태의 내용에 따라 이 순서가 결정됩니다.
+ 하나의 상태 머신 내에서 하나의 상태만 `start` 상태로 지정되어 있을 수 있습니다. 이 상태는 최상위 구조의 `StartAt` 필드 값에 따라 지정됩니다. 이 상태는 실행이 시작될 때 제일 먼저 실행되는 상태입니다.
+ `End` 필드가 `true`인 상태는 `end`(또는 `terminal`) 상태로 간주됩니다. 상태 머신 논리에 따라(예: 상태 머신에 실행 브랜치가 여러 개 있는 경우) `end` 상태가 하나 이상 있을 수도 있습니다.
+ 상태 머신이 하나의 상태로만 구성되어 있는 경우 `start` 상태 및 `end` 상태가 모두 될 수 있습니다.

## 워크플로의 일반 상태 필드
<a name="amazon-states-language-common-fields"></a>

다음 필드는 모든 상태 요소에 공통입니다.

** `Type`(필수)**  
상태 유형: Task, Choice, Parallel, Map, Pass, Wait, Succeed, Fail.

**`QueryLanguage`(선택 사항, 생략할 경우 기본값은 `JSONPath`)**  
+ 상태에서 사용하는 쿼리 언어의 이름입니다. 허용되는 값은 `JSONPath` 및 `JSONata`입니다.
+ 최상위 상태 머신 쿼리 언어가 `JSONPath`인 경우 개별 상태는 QueryLanguage를 `JSONata`로 설정하여 쿼리 언어를 재정의할 수 있습니다. 이 접근 방식을 사용하면 상태 머신을 JSONPath에서 JSONata로 한 번에 한 상태로 점진적으로 변환할 수 있습니다.

** `Next` **  
현재 상태가 종료될 때 실행되는 다음 상태의 이름입니다. `Choice`와 같은 일부 상태 유형에서는 여러 개의 전환 상태를 허용합니다.  
현재 상태가 워크플로의 마지막 상태이거나 [Succeed 워크플로 상태](state-succeed.md) 또는 [Fail 워크플로 상태](state-fail.md)과 같은 터미널 상태인 경우 `Next` 필드를 지정할 필요가 없습니다.

** `End` **  
`true`로 설정하면 이 상태가 터미널 상태(실행을 끝냄)로 지정됩니다. 상태 머신마다 터미널 상태의 수에는 제한이 없습니다. 한 상태에서는 `Next` 또는 `End` 중 하나만 사용될 수 있습니다. 일부 상태 유형(예: `Choice`) 또는 터미널 상태(예: [Succeed 워크플로 상태](state-succeed.md) 및[Fail 워크플로 상태](state-fail.md))는 `End` 필드를 지원하거나 사용하지 않습니다.

** `Comment`(선택 사항)**  
육안으로 읽을 수 있는 상태 설명이 들어 있습니다.

** `Assign`(선택 사항)**  
변수를 저장하는 데 사용됩니다. `Assign` 필드는 변수 이름과 할당된 값을 정의하는 키/값 페어가 있는 JSON 객체를 허용합니다. 객체 또는 배열 내부의 문자열 값을 포함한 모든 문자열 값은 `{% %}` 문자로 묶일 때 JSONata로 평가됩니다.  
자세한 내용은 [변수를 사용하여 상태 간에 데이터 전달](workflow-variables.md) 섹션을 참조하세요.

** `Output`(선택 사항, JSONata만 해당)**  
상태에서 출력을 지정하고 트랜스포밍하는 데 사용됩니다. 지정하면 값이 상태 출력 기본값을 재정의합니다.  
출력 필드는 모든 JSON 값(객체, 배열, 문자열, 숫자, 부울, null)을 허용합니다. 객체 또는 배열 내부의 문자열 값을 포함한 모든 문자열 값은 {% %} 문자로 묶여 있는 경우 JSONata로 평가됩니다.  
 출력은 "Output": "{% jsonata expression %}"와 같은 JSONata 표현식도 직접 수락합니다.  
자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.

** `InputPath`(선택 사항, JSONPath만 해당)**  
처리를 위해 상태 작업에 전달되도록 상태의 입력 부분을 선택하는 [경로](concepts-input-output-filtering.md)입니다. 생략하는 경우, 전체 입력을 지정하는 `$` 값이 지정됩니다. 자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.

** `OutputPath`(선택 사항, JSONPath만 해당)**  
다음 상태에 전달할 상태 출력 부분을 선택하는 [경로](concepts-input-output-filtering.md)입니다. 생략하면 전체 출력을 지정하는 `$` 값이 지정됩니다. 자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.