

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

# Step Functions 워크플로의 인라인 모드에서 맵 상태 사용
<a name="state-map-inline"></a>

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

기본적으로 `Map` 상태는 **인라인** 모드에서 실행됩니다. 인라인 모드에서 Map 상태는 입력으로 JSON 배열만 수락합니다. 워크플로의 이전 단계에서 이 배열을 수신합니다. 이 모드에서는 각 `Map` 상태 반복이 `Map` 상태가 포함된 워크플로의 컨텍스트에서 실행됩니다. Step Functions는 이러한 반복 실행 내역을 상위 워크플로 실행 내역에 추가합니다.

이 모드에서 `Map` 상태는 동시 반복을 최대 40개까지 지원합니다.

**인라인**으로 설정된 `Map` 상태를 *Inline Map 상태*라고 합니다. 워크플로 실행 내역 항목이 25,000개를 초과하지 않거나 동시 반복이 40회 넘게 필요하지 않은 경우에 인라인 모드에서 `Map` 상태를 사용합니다.

*Inline Map 상태* 사용에 대한 소개는 자습서 [Inline Map으로 작업 반복](tutorial-map-inline.md) 섹션을 참조하세요.

**Topics**
+ [이 주제의 주요 개념](#key-concepts-inline-map)
+ [Inline Map 상태 필드](#map-state-inline-additional-fields)
+ [사용되지 않는 필드](#map-state-inline-deprecated-fields)
+ [인라인 Map 상태 예제(JSONPath)](#inline-map-state-examples)
+ [`ItemSelector`가 있는 Inline Map 상태 예제](#inline-map-state-example-params)
+ [Inline `Map` 상태 입력 및 출력 처리](#inline-map-state-output)

## 이 주제의 주요 개념
<a name="key-concepts-inline-map"></a>

**인라인 모드**  
`Map` 상태의 제한된 동시성 모드입니다. 이 모드에서는 각 `Map` 상태 반복이 `Map` 상태가 포함된 워크플로의 컨텍스트에서 실행됩니다. Step Functions는 이러한 반복의 실행 내역을 상위 워크플로 실행 내역에 추가합니다. `Map` 상태는 기본적으로 인라인 모드에서 실행됩니다.  
이 모드는 입력으로 JSON 배열만 수락하고 동시 반복을 최대 40회까지 지원합니다.

**Inline Map 상태**  
**인라인** 모드로 설정된 `Map` 상태입니다.

**맵 워크플로**  
`Map` 상태가 반복마다 실행되는 단계 세트입니다.

**Map 상태 반복**  
`Map` 상태 내에서 정의된 워크플로 반복입니다.

## Inline Map 상태 필드
<a name="map-state-inline-additional-fields"></a>

워크플로에서 *Inline Map 상태*를 사용하려면 다음 필드를 하나 이상을 지정합니다. [일반 상태 필드](statemachine-structure.md#amazon-states-language-common-fields) 외에 다음 필드를 지정합니다.

**`Type`(필수)**  
상태 유형을 설정합니다(예: `Map`).

**`ItemProcessor`(필수)**  
`Map` 상태 처리 모드와 정의를 지정하는 다음 JSON 객체를 포함합니다.  
정의에는 각 배열 항목을 처리하기 위해 반복하는 단계 세트가 포함되어 있습니다.  
+ `ProcessorConfig` - `Map` 상태의 처리 모드를 지정하는 선택적 JSON 객체입니다. 이 객체에는 `Mode` 하위 필드가 포함되어 있습니다. 이 필드의 기본값은 인라인 모드의 `Map` 상태를 사용하는 `INLINE`입니다.

  이 모드에서 반복이 실패하면 `Map` 상태가 실패합니다. `Map` 상태가 실패하면 모든 반복이 중지합니다.
+ `StartAt` - 워크플로의 첫 번째 상태를 나타내는 문자열을 지정합니다. 이 문자열은 대소문자를 구분하며 상태 객체 중 하나의 이름과 일치해야 합니다. 이 상태는 데이터세트의 항목마다 가장 먼저 실행됩니다. `Map` 상태에 제공하는 모든 실행 입력은 먼저 `StartAt` 상태에 전달됩니다.
+ `States` - 쉼표로 구분된 [상태](workflow-states.md) 집합이 포함된 JSON 객체입니다. 이 객체에서 [Map workflow](#mapwflow)를 정의합니다.
**참고**  
`ItemProcessor` 필드 내의 상태는 서로 전환될 수만 있습니다. `ItemProcessor` 필드 외부의 상태는 필드 내의 상태로 전환될 수 없습니다.
`ItemProcessor` 필드는 현재 지원 중단된 `Iterator` 필드를 대체합니다. `Iterator` 필드를 사용하는 `Map` 상태를 계속 포함할 수 있지만 이 필드를 `ItemProcessor`로 바꾸는 것이 좋습니다.  
[Step Functions Local](sfn-local.md)은 현재 이 `ItemProcessor` 필드를 지원하지 않습니다. Step Functions Local에서 `Iterator` 필드를 사용하는 것이 좋습니다.

**`Items`(선택 사항, JSONata만 해당)**  
배열로 평가되어야 하는 JSON 배열 또는 JSONata 표현식입니다.

**`ItemsPath`(선택 사항, JSONPath만 해당)**  
[JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/) 구문을 사용하여 [참조 경로](amazon-states-language-paths.md#amazon-states-language-reference-paths)를 지정합니다. 이 경로에서 상태 입력 내의 항목 배열을 포함하는 JSON 노드를 선택합니다. 자세한 내용은 [ItemsPath(Map, JSONPath만 해당)](input-output-itemspath.md) 단원을 참조하십시오.

**`ItemSelector` (선택 사항)**  
입력 배열 항목 값을 각 `Map` 상태 반복으로 전달하기 전에 재정의합니다.  
이 필드에서 키-값 페어 컬렉션이 포함된 유효한 JSON을 지정합니다. 이러한 페어에는 다음 중 하나가 포함할 수 있습니다.  
+ 상태 머신 정의에서 정의하는 정적 값
+ [경로](amazon-states-language-paths.md)를 사용하여 상태 입력에서 선택한 값
+ [컨텍스트 객체](input-output-contextobject.md)에서 액세스한 값
 자세한 내용은 [ItemSelector(맵)](input-output-itemselector.md) 단원을 참조하십시오.  
`ItemSelector` 필드는 현재 지원 중단된 `Parameters` 필드를 대체합니다. `Parameters` 필드를 사용하는 `Map` 상태를 계속 포함할 수 있지만 이 필드를 `ItemSelector`로 바꾸는 것이 좋습니다.

**`MaxConcurrency` (선택 사항)**  
동시에 실행할 수 있는 `Map` 상태 반복 횟수의 상한을 제공하는 정수 값을 지정합니다. 예를 들어 `MaxConcurrency` 값이 10이면 한 번에 실행되는 `Map` 상태 동시 반복 횟수는 10회로 제한됩니다.  
 JSONata 상태에서 정수로 평가되는 JSONata 표현식을 지정할 수 있습니다.  
동시 반복은 제한될 수 있습니다. 이 경우 일부 반복은 이전 반복이 완료될 때까지 시작되지 않습니다. 입력 배열에 항목이 40개 넘게 있으면 이러한 경우가 발생할 가능성이 높아집니다.  
동시성을 높이려면 [분산 모드](state-map-distributed.md)을 고려하세요.
기본값은 `0`이며 이 값은 동시성을 제한하지 않습니다. Step Functions는 반복을 가능한 한 동시에 간접적으로 호출합니다.  
`MaxConcurrency` 값이 `1`이면 `ItemProcessor` 배열 요소마다 한 번 간접적으로 호출됩니다. 배열의 항목은 입력에 나타나는 순서대로 처리됩니다. Step Functions는 이전 반복이 완료될 때까지 새 반복을 시작하지 않습니다.

**`MaxConcurrencyPath`(선택 사항, JSONPath만 해당)**  
참조 경로를 사용하여 상태 입력에서 동적으로 최대 동시성 값을 제공하려면 `MaxConcurrencyPath`를 사용합니다. 확인되면 참조 경로에서 값이 음수가 아닌 정수인 필드를 선택해야 합니다.  
`Map` 상태에는 `MaxConcurrency` 및 `MaxConcurrencyPath` 모두 포함될 수 없습니다.

**`ResultPath`(선택 사항, JSONPath만 해당)**  
`Map` 상태 반복 출력을 저장할 위치를 입력에서 지정합니다. 그러면 Map 상태에서 [`OutputPath`](input-output-example.md#input-output-outputpath) 필드(지정된 경우)에 지정된 대로 입력을 필터링합니다. 그런 다음 필터링된 입력을 상태 출력으로 사용합니다. 자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.

**`ResultSelector`(선택 사항, JSONPath만 해당)**  
키 값 페어 컬렉션을 전달합니다. 여기서 값은 정적이거나 결과에서 선택된 값입니다. 자세한 내용은 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 단원을 참조하십시오.  
상태 머신에서 사용하는 Parallel 또는 Map 상태가 배열을 반환하는 경우 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 필드를 사용하여 배열을 평면 배열로 변환할 수 있습니다. 자세한 내용은 [배열의 배열 평면화](input-output-inputpath-params.md#flatten-array-of-arrays-result-selector) 단원을 참조하십시오.

**`Retry` (선택 사항)**  
Retrier라고 하는 객체 배열로, 재시도 정책을 정의합니다. 런타임 오류가 발생하면 상태에서 재시도 정책을 사용합니다. 자세한 내용은 [Retry 및 Catch를 사용하는 상태 머신 예](concepts-error-handling.md#error-handling-examples) 단원을 참조하십시오.  
*Inline Map 상태*에 Retriers를 정의하면 재시도 정책이 실패한 반복이 아닌 모든 `Map` 상태 반복에 적용됩니다. 예를 들어 `Map` 상태에 2회 성공한 반복과 한 번 실패한 반복이 있다고 가정해보겠습니다. `Map` 상태의 `Retry` 필드를 정의한 경우 재시도 정책이 실패한 반복에만 아닌 `Map` 상태 반복 3회 모두에 적용됩니다.

**`Catch` (선택 사항)**  
폴백(fallback) 상태를 정의하는 객체 배열(Catcher). 런타임 오류가 발생하고 재시도 정책이 없거나 삭제되면 상태에서 Catcher를 실행합니다. 자세한 내용은 [폴백 상태](concepts-error-handling.md#error-handling-fallback-states)를 참조하십시오.

**`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) 단원을 참조하십시오.

## 사용되지 않는 필드
<a name="map-state-inline-deprecated-fields"></a>

**참고**  
다음 필드를 사용하는 `Map` 상태를 계속 포함할 수 있지만 `Iterator`를 `ItemProcessor` 및 `ItemSelector`가 있는 `Parameters`로 바꾸는 것이 좋습니다.

** `Iterator`**  
각 배열 요소를 처리하는 일련의 단계를 정의하는 JSON 객체를 지정합니다.

**`Parameters`**  
키-값 페어 컬렉션을 지정합니다. 여기서 값에는 다음 중 하나가 포함될 수 있습니다.  
+ 상태 머신 정의에서 정의하는 정적 값
+ [경로](amazon-states-language-paths.md)를 사용하여 입력에서 선택한 값

## 인라인 Map 상태 예제(JSONPath)
<a name="inline-map-state-examples"></a>

**인라인** 모드에서 실행되는 `Map` 상태에 대한 다음 입력 데이터가 있다고 가정합니다.

```
{
  "ship-date": "2016-03-14T01:59:00Z",
  "detail": {
    "delivery-partner": "UQS",
    "shipped": [
      { "prod": "R31", "dest-code": 9511, "quantity": 1344 },
      { "prod": "S39", "dest-code": 9511, "quantity": 40 },
      { "prod": "R31", "dest-code": 9833, "quantity": 12 },
      { "prod": "R40", "dest-code": 9860, "quantity": 887 },
      { "prod": "R40", "dest-code": 9511, "quantity": 1220 }
    ]
  }
}
```

이전 입력이 주어지면 다음 예제의 `Map` 상태는 `shipped` 필드에 있는 배열의 각 항목에 대해 라는 AWS Lambda 함수를 한 `ship-val` 번 호출합니다.

```
"Validate All": {
    "Type": "Map",
    "InputPath": "$.detail",
    "ItemProcessor": {
        "ProcessorConfig": {
            "Mode": "INLINE"
        },
        "StartAt": "Validate",
        "States": {
            "Validate": {
                "Type": "Task",
                "Resource": "arn:aws:states:::lambda:invoke",
                "OutputPath": "$.Payload",
                "Parameters": {
                    "FunctionName": "arn:aws:lambda:us-east-2:account-id:function:ship-val:$LATEST"
                },
                "End": true
            }
        }
    },
    "End": true,
    "ResultPath": "$.detail.shipped",
    "ItemsPath": "$.shipped"
}
```

`Map` 상태를 반복할 때마다 [`ItemsPath`](input-output-itemspath.md) 필드로 선택한 배열의 항목이 입력으로 `ship-val` Lambda 함수에 전송됩니다. 다음 값은 `Map` 상태에서 Lambda 함수 간접 호출에 보내는 입력의 예제입니다.

```
{
  "prod": "R31",
  "dest-code": 9511,
  "quantity": 1344
}
```

완료되고 나면 `Map` 상태 출력은 JSON 배열이 되며, 여기서 각 항목은 반복에 대한 출력입니다. 이 경우 이 배열에는 `ship-val` Lambda 함수의 출력이 포함됩니다.

## `ItemSelector`가 있는 Inline Map 상태 예제
<a name="inline-map-state-example-params"></a>

앞의 예제의 `ship-val` Lambda 함수에 전송 주체에 대한 정보가 필요하다고 가정해보겠습니다. 이 정보는 각 반복의 배열에 있는 항목에 추가됩니다. 입력의 정보를 `Map` 상태의 현재 반복에 지정된 정보와 함께 포함할 수 있습니다. 다음 예제에서 `ItemSelector` 필드를 확인하세요.

```
"Validate-All": {
  "Type": "Map",
  "InputPath": "$.detail",
  "ItemsPath": "$.shipped",
  "MaxConcurrency": 0,
  "ResultPath": "$.detail.shipped",
  "ItemSelector": {
    "parcel.$": "$$.Map.Item.Value",
    "courier.$": "$.delivery-partner"
  },
  "ItemProcessor": {
    "StartAt": "Validate",
    "States": {
      "Validate": {
        "Type": "Task",
	"Resource": "arn:aws:lambda:region:account-id:function:ship-val",
        "End": true
      }
    }
  },
  "End": true
}
```

`ItemSelector` 블록은 반복에 대한 입력을 JSON 노드로 대체합니다. 이 노드에는 [컨텍스트 객체](input-output-contextobject.md#contextobject-map)의 현재 항목 데이터와 `Map` 상태 입력 `delivery-partner` 필드의 주체 정보가 모두 포함됩니다. 다음은 단일 반복에 대한 입력의 예제입니다. `Map` 상태는 이 입력을 `ship-val` Lambda 함수 간접 호출에 전달합니다.

```
{
  "parcel": {
    "prod": "R31",
    "dest-code": 9511,
    "quantity": 1344
   },
   "courier": "UQS"
}
```

이전 *Inline Map 상태* 예제에서 `ResultPath` 필드는 출력을 입력과 같은 형식으로 생성합니다. 하지만 각 요소가 각 반복의 `ship-val` Lambda 간접 호출의 출력인 배열로 `detail.shipped` 필드를 덮어씁니다.

*Inline Map 상태* 및 해당 필드 사용 방법에 대한 자세한 내용은 다음을 참조하세요.
+ [Inline Map으로 작업 반복](tutorial-map-inline.md)
+ [Step Functions에서 입력 및 출력 처리](concepts-input-output-filtering.md)
+ [ItemsPath(Map, JSONPath만 해당)](input-output-itemspath.md)
+ [Map 상태의 컨텍스트 객체 데이터](input-output-contextobject.md#contextobject-map)

## Inline `Map` 상태 입력 및 출력 처리
<a name="inline-map-state-output"></a>

지정된 `Map` 상태의 경우 [`InputPath`](input-output-inputpath-params.md#input-output-inputpath)에서 상태 입력의 하위 집합을 선택합니다.

`Map` 상태 입력에는 JSON 배열이 포함되어야 합니다. `Map` 상태는 배열의 항목마다 `ItemProcessor` 섹션을 한 번 실행합니다. [`ItemsPath`](input-output-itemspath.md) 필드를 지정하면 `Map` 상태는 입력 위치를 선택하여 반복할 배열을 찾습니다. 지정하지 않으면 `ItemsPath` 값은 `$`가 되고, `ItemProcessor` 섹션에서는 배열이 유일한 입력일 것으로 예상합니다. `ItemsPath` 필드를 지정하는 경우 해당 값은 [참조 경로](amazon-states-language-paths.md#amazon-states-language-reference-paths)여야 합니다. `Map` 상태는 `InputPath`를 적용한 후 이 경로를 유효 입력에 적용합니다. `ItemsPath`는 값이 JSON 배열인 필드를 식별해야 합니다.

각 반복에 대한 입력은 기본적으로 `ItemsPath` 값으로 식별되는 배열 필드의 단일 요소입니다. `ItemSelector(맵)` 필드를 사용하여 이 값을 재정의할 수 있습니다.

완료되고 나면 `Map` 상태 출력은 JSON 배열이 되며, 여기서 각 항목은 반복에 대한 출력입니다.

 Inline Map 상태 입력 및 출력에 대한 자세한 내용은 다음을 참조하세요.
+ [Inline Map으로 작업 반복](tutorial-map-inline.md)
+ [`ItemSelector`가 있는 Inline Map 상태 예제](#inline-map-state-example-params)
+ [Step Functions에서 입력 및 출력 처리](concepts-input-output-filtering.md)
+ [Map 상태의 컨텍스트 객체 데이터](input-output-contextobject.md#contextobject-map)
+ [Step Functions에서 Map 상태를 사용하여 대기열의 데이터 처리](sample-map-state.md)