

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

# 병렬 워크플로 상태
<a name="state-parallel"></a>

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

`Parallel` 상태(`"Type": "Parallel"`)를 사용하여 별도의 실행 브랜치를 상태 머신에 추가할 수 있습니다.

`Parallel` 상태에는 [일반 상태 필드](statemachine-structure.md#amazon-states-language-common-fields) 외에도 다음 추가 필드가 포함됩니다.

** `Branches`(필수)**  
병렬로 실행할 상태 머신을 지정하는 객체 어레이. 이러한 각 상태 머신 객체에는 `States` 및 `StartAt`이라는 필드가 들어 있습니다. 이러한 필드의 의미는 상태 머신의 최상위에 있는 필드와 동일합니다.

**`Parameters`(선택 사항, JSONPath만 해당)**  
`Branches` 배열에 정의된 상태 머신에 정보를 전달하는 데 사용됩니다.

**`Arguments`(선택 사항, JSONata만 해당)**  
연결된 리소스의 API 작업으로 정보를 전달합니다. 값에는 JSONata 표현식이 포함될 수 있습니다. 자세한 내용은 [Step Functions에서 JSONata로 데이터 트랜스포밍](transforming-data.md) 단원을 참조하십시오.

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

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

** `ResultPath`(선택 사항, JSONPath만 해당)**  
브랜치의 출력을 배치할 위치(입력에서)를 지정합니다. 그러면 `OutputPath` 필드(있는 경우)에 지정된 대로 입력이 필터링된 후 상태의 출력으로 사용됩니다. 자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.

** `ResultSelector`(선택 사항, JSONPath만 해당)**  
키 값 페어 컬렉션을 전달합니다. 여기서 값은 정적이거나 결과에서 선택됩니다. 자세한 내용은 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 단원을 참조하십시오.

** `Retry` (선택 사항)**  
상태에 런타임 오류가 발생하는 경우 사용될 재시도 정책을 정의하는 Retriers라는 객체 어레이. 자세한 내용은 [Retry 및 Catch를 사용하는 상태 머신 예](concepts-error-handling.md#error-handling-examples) 단원을 참조하십시오.

** `Catch` (선택 사항)**  
상태에 런타임 오류가 발생하고 해당 재시도 정책이 소진되었거나 정의되지 않은 경우 실행되는 폴백 상태를 정의하는 Catcher라는 객체 배열. 자세한 내용은 [폴백 상태](concepts-error-handling.md#error-handling-fallback-states)를 참조하십시오.

`Parallel` 상태는 AWS Step Functions 가 브랜치의 `StartAt` 필드에 라는 상태로 시작하여 각 브랜치를 최대한 동시에 실행하고 모든 브랜치가 종료(터미널 상태에 도달)될 때까지 기다린 후 `Parallel` 상태 `Next` 필드를 처리합니다.

## Parallel 상태 예제
<a name="parallel-example"></a>

```
{
  "Comment": "Parallel Example.",
  "StartAt": "LookupCustomerInfo",
  "States": {
    "LookupCustomerInfo": {
      "Type": "Parallel",
      "End": true,
      "Branches": [
        {
         "StartAt": "LookupAddress",
         "States": {
           "LookupAddress": {
             "Type": "Task",
             "Resource": "arn:aws:lambda:region:account-id:function:AddressFinder",
             "End": true
           }
         }
       },
       {
         "StartAt": "LookupPhone",
         "States": {
           "LookupPhone": {
             "Type": "Task",
             "Resource": "arn:aws:lambda:region:account-id:function:PhoneFinder",
             "End": true
           }
         }
       }
      ]
    }
  }
}
```

이 예제에서는 `LookupAddress` 및 `LookupPhone` 브랜치가 병렬로 실행됩니다. 다음은 워크플로가 Step Functions 콘솔에서 어떻게 표시되는지를 보여줍니다.

![\[예제 병렬 워크플로의 시각적 그래프입니다.\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/parallel-state.png)


각 브랜치는 독립적이어야 합니다. `Parallel` 상태의 한 브랜치에 있는 상태에는 해당 브랜치의 외부 필드를 대상으로 하는 `Next` 필드가 있을 수 없으며 해당 브랜치로의 브랜치 전환 외부의 다른 상태도 있을 수 없습니다.

## Parallel 상태의 입/출력 처리
<a name="state-parallel-output"></a>

`Parallel` 상태는 각 브랜치에 자체 입력 데이터의 사본을 제공합니다(`InputPath` 필드의 수정 작업에 따라 달라질 수 있음). 이 상태는 해당 브랜치의 출력을 포함하는 각 브랜치의 요소 하나가 있는 배열인 출력을 생성합니다. 모든 요소의 형식이 동일해야 하지는 않습니다. 일반적인 방법으로 `ResultPath` 필드를 사용하여 출력 배열을 입력 데이터에 삽입할 수 있습니다(전체는 `Parallel` 상태 출력으로 전송됨, [입/출력 처리](concepts-input-output-filtering.md) 참조).

```
{
  "Comment": "Parallel Example.",
  "StartAt": "FunWithMath",
  "States": {
    "FunWithMath": {
      "Type": "Parallel",
      "End": true,
      "Branches": [
        {
          "StartAt": "Add",
          "States": {
            "Add": {
              "Type": "Task",
              "Resource": "arn:aws:states:region:123456789012:activity:Add",
              "End": true
            }
          }
        },
        {
          "StartAt": "Subtract",
          "States": {
            "Subtract": {
              "Type": "Task",
              "Resource": "arn:aws:states:region:123456789012:activity:Subtract",
              "End": true
            }
          }
        }
      ]
    }
  }
}
```

`FunWithMath` 상태에서 어레이 `[3, 2]`를 입력으로 제공한 경우, `Add` 및 `Subtract` 상태는 모두 입력으로 해당 어레이를 받습니다. `Add` 및 `Subtract` 작업의 출력은 배열 요소 3과 2의 합계와 차이(즉, `5` 및 `1`)인 반면 `Parallel` 상태 출력은 배열입니다.

```
[ 5, 1 ]
```

**작은 정보**  
상태 머신에서 사용하는 Parallel 또는 Map 상태가 배열을 반환하는 경우 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 필드를 사용하여 배열을 평면 배열로 변환할 수 있습니다. 자세한 내용은 [배열의 배열 평면화](input-output-inputpath-params.md#flatten-array-of-arrays-result-selector) 단원을 참조하십시오.

## 오류 처리
<a name="error-handling"></a>

오류가 처리되지 않거나 `Fail` 상태로 전환되는 등의 이유로 브랜치에 오류가 발생하면 전체 `Parallel` 상태가 오류 발생으로 간주되고 모든 브랜치가 중지됩니다. `Parallel` 상태 자체에서 오류를 처리하지 않으면 Step Functions가 실행을 중지하고 오류를 표시합니다.

**참고**  
병렬 상태가 무너지면 간접적으로 호출된 Lambda 함수가 계속 실행되며 작업 토큰을 실행하는 활동 작업자는 중지되지 않습니다.  
장시간 실행되는 활동을 중지하려면 하트비트를 사용하여 Step Functions에서 브랜치를 중지했는지 확인하고 작업을 실행하고 있는 작업자를 중지하세요. 상태가 실패한 경우 [https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html), [https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html) 또는 [https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)을 직접 호출하면 오류가 뱔생합니다. [하트비트 오류](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html#API_SendTaskHeartbeat_Errors)를 참조하십시오.
실행 중인 Lambda 함수를 중지할 수 없습니다. 대비책을 구현했으면 Lambda 함수가 완료된 후 정리 작업이 실행되도록 `Wait` 상태를 사용하세요.