

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

# Step Functions의 Workflow Studio를 사용하여 상태 입력 및 출력 구성
<a name="workflow-studio-process"></a>

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

각 상태는 수신한 입력을 기반으로 결정을 내리거나 작업을 수행합니다. 대부분의 경우 출력을 다른 상태로 전달합니다. Workflow Studio의 [Inspector 패널](workflow-studio.md#workflow-studio-components-formdefinition) 패널에 있는 **입력** 및 **출력** 탭에서 상태가 입력 및 출력 데이터를 필터링하고 조작하는 방법을 구성할 수 있습니다. 입력과 출력을 구성할 때 **정보** 링크를 사용하여 상황별 도움말에 액세스할 수 있습니다.

![\[상태 입력, 출력 및 정보 도움말 패널을 보여주는 예시 스크린샷\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/wfs_input_output_01.png)


Step Functions에서 입력과 출력을 처리하는 방법에 대한 자세한 내용은 [Step Functions에서 입력 및 출력 처리](concepts-input-output-filtering.md) 섹션을 참조하세요.

## 상태에 대한 입력 구성
<a name="workflow-studio-process-input"></a>

각 상태는 이전 상태의 입력을 JSON으로 수신합니다. 입력을 필터링하려면 [Inspector 패널](workflow-studio.md#workflow-studio-components-formdefinition) 패널의 **입력** 탭 아래에 있는 `InputPath` 필터를 사용하면 됩니다. `InputPath`는 `$`로 시작하는 문자열로, 특정 JSON 노드를 식별합니다. 이를 [참조 경로](amazon-states-language-paths.md)라고 하며 JsonPath 구문을 따릅니다.

입력 필터링하기
+ **InputPath로 입력 필터링**을 선택합니다.
+ `InputPath` 필터에 유효한 [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)를 입력합니다. 예를 들어 **\$1.data**입니다.

`InputPath` 필터가 워크플로에 추가됩니다.

**Example 예제 1: Workflow Studio에서 InputPath 필터 사용**  
상태에 대한 입력에 다음 JSON 데이터가 포함되어 있다고 가정해보겠습니다.  

```
{
  "comment": "Example for InputPath",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```
`InputPath` 필터를 적용하려면 **InputPath로 입력 필터링**를 선택한 다음 적절한 참조 경로를 입력합니다. **\$1.dataset2.val1**을 입력하면 다음 JSON이 상태에 대한 입력으로 전달됩니다.  

```
{"a"}
```
참조 경로에도 선택할 수 있는 값이 있습니다. 참조하는 데이터가 `{ "a": [1, 2, 3, 4] }`이고 참조 경로 `$.a[0:2]`를 `InputPath` 필터로 적용한 경우 결과는 다음과 같습니다.  

```
[ 1, 2 ]
```

[병렬 워크플로 상태](state-parallel.md), [Map 워크플로 상태](state-map.md) 및 [Pass 워크플로 상태](state-pass.md) 흐름 상태의 **입력** 탭 아래에는 `Parameters`라는 추가 입력 필터링 옵션이 있습니다. 이 필터는 InputPath 필터 이후에 적용되며 키-값 페어 하나 이상으로 구성된 사용자 지정 JSON 객체를 구성하는 데 사용될 수 있습니다. 각 페어의 값은 정적 값이거나 입력에서 선택되거나 경로가 있는 [Step Functions의 컨텍스트 객체에서 실행 데이터 액세스](input-output-contextobject.md)에서 선택될 수 있습니다.

**참고**  
파라미터에서 참조 경로를 사용하여 입력의 JSON 노드를 가리키도록 지정하려면 파라미터 이름이 `.$`로 끝나야 합니다.

**Example 예제 2: Parallel 상태를 위한 사용자 지정 JSON 입력 만들기**  
다음 JSON 데이터가 Parallel 상태에 대한 입력이라고 가정해보겠습니다.  

```
{
  "comment": "Example for Parameters",
  "product": {
    "details": {
      "color": "blue",
      "size": "small",
      "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

이 입력의 일부를 선택하고 정적 값이 있는 추가 키-값 페어를 전달하려면 **Parallel** 상태의 **입력** 탭 아래에 있는 **파라미터** 필드에 다음을 지정하면 됩니다.

```
{
 "comment": "Selecting what I care about.",
 "MyDetails": {
    "size.$": "$.product.details.size",
    "exists.$": "$.product.availability",
    "StaticValue": "foo"
    }
 }
```

결과는 다음과 같은 JSON 데이터가 됩니다.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
    "size": "small",
    "exists": "in stock",
    "StaticValue": "foo"
  }
}
```

## 상태 출력 구성
<a name="workflow-studio-process-output"></a>

각 상태는 다음 상태로 전달되기 전에 필터링될 수 있는 JSON 출력을 생성합니다. 여러 가지 필터를 사용할 수 있으며 각 필터는 서로 다른 방식으로 출력에 영향을 미칩니다. 각 상태에 사용할 수 있는 출력 필터는 **Inspector** 패널의 **출력** 탭 아래에 나열되어 있습니다. [Task 워크플로 상태](state-task.md) 상태의 경우 선택한 모든 출력 필터는 다음 순서로 처리됩니다.

1.  `ResultSelector`:상태 결과를 조작하려면 이 필터를 사용합니다. 결과 일부를 사용하여 새 JSON 객체를 구성할 수 있습니다.

1.  `Step Functions에서 ResultPath를 사용하여 상태 출력 지정`: 상태 입력과 작업 결과의 조합을 선택하여 출력에 전달하려면 이 필터를 사용합니다.

1.  `OutputPath를 사용하여 상태 출력 필터링`: JSON 출력을 필터링하여 결과에서 다음 상태로 전달될 정보를 선택하려면 이 필터를 사용합니다.

### ResultSelector 사용
<a name="workflow-studio-process-output-resultselector"></a>

`ResultSelector`는 다음 상태에 대한 선택적 출력 필터입니다.
+  [Task 워크플로 상태](state-task.md) 상태는 모든 상태가 [상태 브라우저](workflow-studio.md#workflow-studio-components-states)의 **작업** 탭에 나열되는 상태입니다.
+  [Map 워크플로 상태](state-map.md) 상태는 상태 브라우저의 **흐름** 탭에 있습니다.
+  [병렬 워크플로 상태](state-parallel.md) 상태는 상태 브라우저의 **흐름** 탭에 있습니다.

`ResultSelector`는 키-값 페어 하나 이상으로 구성된 사용자 지정 JSON 객체를 구성하는 데 사용될 수 있습니다. 각 페어의 값은 정적 값이거나 경로가 있는 상태 결과에서 선택될 수 있습니다.

**참고**  
파라미터에서 경로를 사용하여 결과에서 JSON 노드를 참조하도록 지정하려면 파라미터 이름이 `.$`로 끝나야 합니다.

**Example ResultSelector 필터 사용 예제**  
이 예시에서는 `ResultSelector`를 사용하여 Amazon EMR `CreateCluster` 상태에 대한 Amazon EMR CreateCluster API 직접 호출의 응답을 조작합니다. 다음은 Amazon EMR `CreateCluster` API 직접 호출의 결과입니다.  

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```
이 정보의 일부를 선택하고 정적 값이 있는 추가 키-값 페어를 전달하려면 상태의 **출력** 탭 아래에 있는 **ResultSelector** 필드에 다음을 지정합니다.  

```
{
 "result": "found",
 "ClusterId.$": "$.output.ClusterId", 
 "ResourceType.$": "$.resourceType"
 }
```
`ResultSelector`를 사용하면 다음 결과가 생성됩니다.  

```
{
 "result": "found",
 "ClusterId": "AKIAIOSFODNN7EXAMPLE",
 "ResourceType": "elasticmapreduce"
}
```

### ResultPath 사용
<a name="workflow-studio-process-output-resultpath"></a>

상태 출력은 해당 입력의 복사본, 생성된 결과 또는 해당 입력과 결과의 조합일 수 있습니다. `ResultPath`를 사용하여 상태 출력으로 이들의 어떤 조합을 전달할지 관리합니다. 더 많은 `ResultPath` 사용 사례는 [Step Functions에서 ResultPath를 사용하여 상태 출력 지정](input-output-resultpath.md) 섹션을 참조하세요.

`ResultPath`는 다음 상태에 대한 선택적 출력 필터입니다.
+  [Task 워크플로 상태](state-task.md) 상태는 모든 상태가 상태 브라우저의 **작업** 탭에 나열되는 상태입니다.
+  [Map 워크플로 상태](state-map.md) 상태는 상태 브라우저의 **흐름** 탭에 있습니다.
+  [병렬 워크플로 상태](state-parallel.md) 상태는 상태 브라우저의 **흐름** 탭에 있습니다.
+  [Pass 워크플로 상태](state-pass.md) 상태는 상태 브라우저의 **흐름** 탭에 있습니다.

`ResultPath`는 결과를 원래 상태 입력에 추가하는 데 사용될 수 있습니다. 지정된 경로는 결과를 추가할 위치를 나타냅니다.

**Example ResultPath 필터 사용 예제**  
Task 상태에 대한 입력이 다음과 같다고 가정해보겠습니다.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
Task 상태 결과는 다음과 같습니다.  

```
Hello, AWS Step Functions
```
`ResultPath`를 적용하고 결과를 추가하려는 위치를 나타내는 참조 [경로](amazon-states-language-paths.md)(예: `$.taskresult`)를 입력하여 이 결과를 상태 입력에 추가할 수 있습니다.  
이 `ResultPath`를 사용하여 상태 출력으로 전달되는 JSON은 다음과 같습니다.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions",
  "taskresult": "Hello, AWS Step Functions!"
}
```

### OutputPath 사용
<a name="workflow-studio-process-output-resultselector"></a>

`OutputPath` 필터를 사용하면 원치 않는 정보를 필터링하고 필요한 JSON 부분만 전달할 수 있습니다. `OutputPath`는 `$`로 시작하는 문자열로, JSON 텍스트 내의 노드를 식별합니다.

**Example OutputPath 필터 사용 예제**  
Lambda Invoke API 직접 호출은 Lambda 함수 결과와 함께 메타데이터를 반환한다고 가정해 보겠습니다.  

```
{
  "ExecutedVersion": "$LATEST",
  "Payload": {
     "foo": "bar",
     "colors": [
          "red",
          "blue",
          "green"    
     ],
     "car": {
          "year": 2008,
          "make": "Toyota",
          "model": "Matrix"
     }
   },
"SdkHttpMetadata": {
  "AllHttpHeaders": {
    "X-Amz-Executed-Version": ["$LATEST"]
...
```
`OutputPath`를 사용하여 추가 메타데이터를 필터링할 수 있습니다. 기본적으로 Workflow Studio를 통해 생성된 Lambda Invoke 상태에 대한 **OutputPath** 필터의 값은 `$.Payload`입니다. 이 기본값은 추가 메타데이터를 제거하고 Lambda 함수를 직접 실행하는 것과 동일한 출력을 반환합니다.  
Lambda Invoke 작업 결과 예제와 **출력** 필터의 `$.Payload` 값은 다음 JSON 데이터를 출력으로 전달합니다.  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
`OutputPath` 필터는 마지막으로 적용되는 출력 필터이므로 `ResultSelector` 또는 `ResultPath`와 같은 추가 출력 필터를 사용하는 경우 `OutputPath` 필터의 기본값 `$.Payload`를 적절하게 수정해야 합니다.