

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

# AWS Flow Framework 기본 개념: 작업 목록 및 작업 실행
<a name="awsflow-basics-task-lists"></a>

 Amazon SWF는 워크플로와 활동 작업을 이름이 지정된 목록에 게시하는 방법으로 관리합니다. Amazon SWF는 워크플로 작업자 및 활동 작업자 각각에 대해 하나씩, 최소 두 가지 작업 목록을 보관합니다.

**참고**  
사용자는 목록마다 다른 작업자를 할당하여 필요한 개수 만큼 작업 목록을 지정할 수 있습니다. 작업 목록의 개수에는 제한이 없습니다. 일반적으로 작업자 객체를 생성할 때 작업자 호스트 애플리케이션에 작업자의 작업을 지정합니다.

다음은 `HelloWorldWorkflow` 호스트 애플리케이션에서 발췌한 것으로서, 새 활동 작업자를 생성하여 이를 `HelloWorldList` 활동 작업 목록에 할당합니다.

```
public class GreeterWorker  {
    public static void main(String[] args) throws Exception {
    ...
    String domain = " helloWorldExamples";
    String taskListToPoll = "HelloWorldList";

    ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll);
    aw.addActivitiesImplementation(new GreeterActivitiesImpl());
    aw.start();
    ...
  }
}
```

기본적으로 Amazon SWF는 `HelloWorldList` 목록의 작업자 작업을 예약합니다. 그런 다음 작업자는 작업에 대해 이 목록을 폴링합니다. 작업 목록에는 어떤 이름도 지정할 수 있습니다. 심지어 워크플로 및 활동 목록에 같은 이름을 사용할 수도 있습니다. 내부적으로 Amazon SWF는 워크플로 및 활동 작업 목록 이름을 여러 가지 네임스페이스에 배치하므로 두 목록은 서로 구분됩니다.

작업 목록을 지정하지 않으면 작업자가 Amazon SWF에 유형을 등록할 때가 기본 목록을 AWS Flow Framework 지정합니다. 자세한 내용은 [워크플로 및 활동 유형 등록](features.registration.md) 단원을 참조하십시오.

특정 작업자 또는 작업자 그룹에서 특정 작업을 수행하도록 하는 것이 더 좋은 경우가 때로 있습니다. 예를 들면 이미지 처리 워크플로에서는 한 활동을 사용하여 이미지를 다운로드하고 다른 활동을 사용하여 이미지를 처리할 수 있습니다. 동일 시스템에서 두 가지 작업을 수행하여 네트워크를 통해 대규모 파일을 전송하는 오버헤드를 피하는 것이 더 효율적입니다.

그러한 상황을 지원하기 위해 `schedulingOptions` 파라미터가 포함된 오버로드를 사용하여 활동 클라이언트 메서드를 호출할 때 작업 목록을 명시적으로 지정할 수 있습니다. 메서드에 적절하게 구성된 `ActivitySchedulingOptions` 객체를 전달하여 작업 목록을 지정합니다.

예를 들어 `HelloWorldWorkflow` 애플리케이션의 `say` 활동을 `getName` 및 `getGreeting`과는 다른 활동 작업자가 호스팅한다고 가정합시다. 다음 예시에서는 `say`에서 `getName` 및 `getGreeting`이 처음부터 서로 다른 목록에 할당되었다 하더라도 이 둘과 동일한 작업 목록을 사용하도록 하는 방법을 보여줍니다.

```
public class GreeterWorkflowImpl implements GreeterWorkflow {
  private GreeterActivitiesClient operations1 = new GreeterActivitiesClientImpl1(); //getGreeting and getName
  private GreeterActivitiesClient operations2 = new GreeterActivitiesClientImpl2(); //say
  @Override
  public void greet() {
    Promise<String> name = operations1.getName();
    Promise<String> greeting = operations1.getGreeting(name);
    runSay(greeting);
  }
  @Asynchronous
  private void runSay(Promise<String> greeting){
    String taskList = operations1.getSchedulingOptions().getTaskList();
    ActivitySchedulingOptions schedulingOptions = new ActivitySchedulingOptions();
    schedulingOptions.setTaskList(taskList);
    operations2.say(greeting, schedulingOptions);
  }
}
```

비동기식 `runSay` 메서드는 클라이언트 객체로부터 `getGreeting` 작업 목록을 가져옵니다. 그런 다음 `say`에서 `getGreeting`과 동일한 작업 목록을 폴링하도록 하는 `ActivitySchedulingOptions` 객체를 생성 및 구성합니다.

**참고**  
사용자가 `schedulingOptions` 파라미터를 활동 클라이언트 메서드에 전달하면 이 메서드에서는 이 활동 실행에 대해서만 원본 작업 목록을 재정의합니다. 사용자가 작업 목록을 지정하지 않고 활동 클라이언트 메서드를 다시 직접적으로 호출하면 Amazon SWF가 작업을 원본 목록에 할당하고 활동 작업자는 이 목록을 폴링합니다.