

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

# Step Functions의 활동에 대해 알아보기
<a name="concepts-activities"></a>

Step Functions 활동을 사용하면 Step Functions 외부에서 실행되는 *작업자*가 실제 작업을 수행하는 상태 시스템에서 작업을 설정할 수 있습니다. 예를 들어 Amazon Elastic Compute Cloud(Amazon EC2), Amazon Elastic Container Service(Amazon ECS) 또는 모바일 디바이스에서도 작업자 프로그램을 실행할 수 있습니다.

## 개요
<a name="activities-overview"></a>

에서 AWS Step Functions활동은 어딘가에서 실행되는 코드(*활동 작업자*라고 함)를 상태 시스템의 특정 작업과 연결하는 방법입니다. Step Functions 콘솔을 사용하거나 `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`를 직접적으로 호출하여 활동을 만들 수 있습니다. 이렇게 하면 작업 상태에 대한 Amazon 리소스 이름(ARN)이 제공됩니다. 이 ARN을 사용하여 활동 작업자의 작업에 대한 작업 상태를 폴링하십시오.

**참고**  
활동은 버전 관리되지 않으며 이전 버전과 호환이 가능합니다. 이전 버전과 호환되지 않는 방식으로 활동을 변경해야 하는 경우 Step Functions에서 고유한 이름을 사용하여 *새* 활동을 만드세요.

활동 작업자는 Amazon EC2 인스턴스, AWS Lambda 함수, 모바일 디바이스에서 실행하는 애플리케이션이 될 수 있습니다. HTTP를 연결할 수 있는 모든 애플리케이션이라면 위치와 무관하게 호스팅됩니다. Step Functions에서 활동 작업 상태에 이르면 워크플로는 활동 작업자가 작업을 폴링할 때까지 기다립니다. 활동 작업자는 `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`를 사용하고 관련된 활동의 ARN을 전송하여 Step Functions를 폴링합니다. `GetActivityTask`는 `input`(작업에 대한 JSON 입력 문자열) 및 [https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken)(고유한 작업 식별자)을 포함하여 응답을 반환합니다. 활동 작업자는 업무를 완료 후 `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` 또는 `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`를 사용하여 성공 또는 실패 보고서를 작성할 수 있습니다. 이 두 개의 호출에서는 이 작업의 결과를 연결하기 위해 `GetActivityTask`에서 제공한 `taskToken`을 사용합니다.

### 활동 작업 관련 API
<a name="activities-api"></a>

Step Functions를 통해 API는 활동을 생성 및 열거하고 작업을 요청하며 작업자 결과를 기반으로 상태 시스템 흐름을 관리합니다.

다음은 활동과 관련된 Step Functions API입니다.
+ `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`
+ `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`
+ `[ListActivities](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListActivities.html)`
+ `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`
+ `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`
+ `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)`

**참고**  
`GetActivityTask`를 사용하여 활동 작업에 대해 폴링하면 일부 구현에서 지연 시간이 발생할 수 있습니다. [활동 작업을 폴링할 때 지연 시간 방지](sfn-best-practices.md#bp-activity-pollers)을(를) 참조하세요.

## 활동 작업이 완료할 때까지 대기
<a name="activities-wait"></a>

작업 정의에서 `TimeoutSeconds`를 설정하여 상태 대기 시간을 설정하십시오. 작업 활성화 및 대기 상태를 유지하려면 `TimeoutSeconds`에 설정된 시간 내에서 `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`를 사용하여 활동 작업자의 하트비트를 정기적으로 전송하십시오. 긴 제한 시간을 구성하고 하트비트를 능동적으로 전송하면 Step Functions의 활동은 실행이 완료될 때까지 최대 1년을 대기할 수 있습니다.

예를 들어, 시간이 오래 걸리는 프로세스의 결과를 대기하는 워크플로우가 필요한 경우 다음과 같이 하십시오.

1. 콘솔을 사용하거나 `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`를 사용하여 활동을 생성합니다. 활동 ARN을 메모하십시오.

1. 상태 시스템 정의에서 이 ARN의 활동 작업 상태를 참조하여 `TimeoutSeconds`를 설정하십시오.

1. 이 활동 ARN을 참조하여 `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`를 통해 작업에 대해 폴링하는 활동 작업자를 구현하십시오.

1. 작업이 시간 초과되지 않도록 하려면 상태 시스템 작업 정의에서 `HeartbeatSeconds`에 설정한 시간 내에서 `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`를 정기적으로 사용하십시오.

1. 상태 시스템의 실행을 시작하십시오.

1. 활동 작업자의 프로세스를 시작하십시오.

이 활동 작업 상태에 이르면 실행이 일시 정지하고 활동 작업자가 작업에 대해 폴링할 때까지 대기합니다. 활동 작업자에게 `taskToken`이 제공되면 워크플로우는 `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` 또는 `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`이 상태를 제공할 때까지 대기합니다. 이 실행에서 `TimeoutSeconds`에 구성된 시간보다 먼저 이 가운데 하나 또는 `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 호출을 수신하지 않으면 실행이 실패하고 실행 기록에 `ExecutionTimedOut` 이벤트가 포함됩니다.

## 예제: Ruby 활동 작업자
<a name="example-ruby-activity-worker"></a>

다음 예제 활동 작업자 코드는 폴러 및 활동 작업자용 스레드 수를 구성할 수 있는 소비자-생산자 패턴을 구현합니다. 폴러 스레드는 지속적으로 Step Functions의 활동 작업을 폴링합니다. 검색된 활동 작업은 활동 스레드가 픽업할 수 있도록 경계가 있는 차단 대기열을 통해 전달됩니다.
+ 자세한 내용은 [AWS SDK for Ruby API 참조](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)를 참조하세요.
+ 이 코드 및 관련 리소스를 다운로드하려면 GitHub에서 [step-functions-ruby-activity-worker](https://github.com/aws-samples/step-functions-ruby-activity-worker) 리포지토리를 참조하십시오.

아래 코드는 이 Ruby 활동 작업자 예제에 대한 주 진입점입니다.

```
require_relative '../lib/step_functions/activity'
    credentials = Aws::SharedCredentials.new
    region = 'us-west-2'
    activity_arn = 'ACTIVITY_ARN'

    activity = StepFunctions::Activity.new(
      credentials: credentials,
      region: region,
      activity_arn: activity_arn,
      workers_count: 1,
      pollers_count: 1,
      heartbeat_delay: 30
    )

    # Start method block contains your custom implementation to process the input 
    activity.start do |input|
      { result: :SUCCESS, echo: input['value'] }                    
    end
```

활동 ARN 및 리전을 지정해야 합니다. 코드에는 스레드 수 및 하트비트 지연과 같이 설정할 수 있는 기본값이 포함되어 있습니다.


| 항목 | 설명 | 
| --- | --- | 
|  `require_relative`  |  다음 활동 작업자 코드 예제의 상대 경로입니다.  | 
|  `region`  |  AWS활동의 리전입니다.  | 
|  `workers_count`  |  활동 작업자용 스레드 수입니다. 대부분의 구현에서는 10\$120개 스레드면 충분할 것입니다. 활동 처리 시간이 길수록 더 많은 스레드가 필요할 수 있습니다. 초당 프로세스 활동 수에 활동 처리 지연 시간(초)의 99 백분위를 곱하면 추정치를 구할 수 있습니다.  | 
|  `pollers_count`  |  폴러용 스레드 수입니다. 대부분의 구현에서는 10\$120개 스레드면 충분할 것입니다.  | 
|  `heartbeat_delay`  |  하트비트 간 지연 시간(초)입니다.  | 
| input | 활동의 구현 로직입니다. | 

## 다음 단계
<a name="activities-nextsteps"></a>

활동 작업자를 사용하는 상태 머신을 생성하는 방법에 대한 자세한 내용은 다음을 참조하십시오.
+ [Step Functions를 사용하여 Activity 상태 머신 만들기](tutorial-creating-activity-state-machine.md)