

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

# HelloWorldWorkflowParallel 애플리케이션
<a name="getting-started-example-helloworldworkflowparallel"></a>

Hello World\$1의 모든 이전 버전에서는 선형 워크플로 토폴로지를 사용합니다. 그러나 Amazon SWF는 선형 토폴로지에 국한되지 않습니다. 아래 그림에서와 같이 HelloWorldWorkflowParallel 애플리케이션은 병렬 토폴로지를 사용하는 HelloWorldWorkflow의 수정 버전입니다.

![\[HelloWorldWorkflowParallel 워크플로 토폴로지\]](http://docs.aws.amazon.com/ko_kr/amazonswf/latest/awsflowguide/images/helloworld_parallel_topology.png)


HelloWorldWorkflowParallel의 경우 `getName` 및 `getGreeting`은 병렬로 실행되며 각기 인사의 일부를 반환합니다. 그러면 `say`는 두 문자열을 인사로 병합한 후 이를 콘솔에 출력합니다.

애플리케이션을 구현하려면 프로젝트 디렉터리에 helloWorld.HelloWorldWorkflow 패키지의 사본을 생성하고 이 사본의 이름을 helloWorld.HelloWorldWorkflowParallel로 지정합니다. 다음 단원에서는 원본 HelloWorldWorkflow 코드를 수정하여 `getName` 및 `getGreeting`을 병렬로 실행하는 방법을 설명합니다.

## HelloWorldWorkflowParallel 활동 작업자
<a name="getting-started-example-helloworldworkflowparallel.activities"></a>

HelloWorldWorkflowParallel 활동 인터페이스는 다음 예시와 같이 `GreeterActivities`에서 구현됩니다.

```
import com.amazonaws.services.simpleworkflow.flow.annotations.Activities;
import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions;

@Activities(version="5.0")
@ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300,
                             defaultTaskStartToCloseTimeoutSeconds = 10)
public interface GreeterActivities {
   public String getName();
   public String getGreeting();
   public void say(String greeting, String name);
}
```

이 인터페이스는 다음 사항을 제외하면 HelloWorldWorkflow와 유사합니다.
+ `getGreeting`는 입력을 받아들이지 않고 인사 문자열만 반환합니다.
+ `say`는 입력 문자열 두 개, 즉 인사 및 이름을 받아들입니다.
+ 이 인터페이스에는 새 버전 번호가 있는데, 이 번호는 등록된 인터페이스를 변경할 때마다 필요합니다.

HelloWorldWorkflowParallel에서는 다음과 같이 `GreeterActivitiesImpl`에 활동을 구현합니다.

```
public class GreeterActivitiesImpl implements GreeterActivities {

   @Override
   public String getName() {
      return "World!";
   }

   @Override
   public String getGreeting() {
      return "Hello ";
   }

   @Override
   public void say(String greeting, String name) {
      System.out.println(greeting + name);
   }
}
```

`getName` 및 `getGreeting`는 이제 인사 문자열의 절반만 반환합니다. `say`는 그 두 부분을 연결하여 완전한 구를 만든 후 이를 콘솔에 출력합니다.

## HelloWorldWorkflowParallel 워크플로 작업자
<a name="getting-started-example-helloworldworkflowparallel-worker"></a>

HelloWorldWorkflowParallel 워크플로 인터페이스는 다음과 같이 `GreeterWorkflow`에 구현됩니다.

```
import com.amazonaws.services.simpleworkflow.flow.annotations.Execute;
import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow;
import com.amazonaws.services.simpleworkflow.flow.annotations.WorkflowRegistrationOptions;

@Workflow
@WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600)
public interface GreeterWorkflow {

   @Execute(version = "5.0")
   public void greet();
}
```

이 클래스는 활동 작업자와 매칭하기 위해 버전 번호를 변경한 것 외에는 HelloWorldWorkflow 버전과 동일합니다.

워크플로는 `GreeterWorkflowImpl`에서 다음과 같이 구현됩니다.

```
import com.amazonaws.services.simpleworkflow.flow.core.Promise;

public class GreeterWorkflowImpl implements GreeterWorkflow {
   private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl();

   public void greet() {
      Promise<String> name = operations.getName();
      Promise<String> greeting = operations.getGreeting();
      operations.say(greeting, name);
   }
}
```

한눈에 알 수 있듯이 이 구현은 HelloWorldWorkflow와 아주 유사하며, 세 가지 활동 클라이언트 메서드는 순차적으로 실행됩니다. 그러나 활동은 그렇지 않습니다.
+ HelloWorldWorkflow는 `getGreeting`에 `name`을 전달하였습니다. `name`은 `Promise<T>` 객체였으므로 `getGreeting`에서는 `getName`이 완료될 때까지 활동 실행을 연기하였고, 이로 인해 두 활동은 순차적으로 실행되었습니다.
+ HelloWorldWorkflowParallel은 입력 `getName` 또는 `getGreeting`을 전달하지 않습니다. 두 메서드 모두 실행을 연기하지 않고 연결된 활동 메서드에서는 즉시 병렬로 실행합니다.

`say` 활동은 `greeting` 및 `name` 모두를 입력 파라미터로 받아들입니다. 이 둘은 `Promise<T>` 객체이므로 `say`에서는 두 활동이 완료될 때까지 실행을 연기한 후 인사를 구성하여 출력합니다.

HelloWorldWorkflowParallel에서는 워크플로 토폴로지를 정의할 때 특수 모델링 코드를 사용하지 않습니다. 이는 표준 Java 흐름 제어를 사용하고 `Promise<T>` 객체의 속성을 활용하여 암시적으로 수행됩니다. Java 애플리케이션 AWS Flow Framework 용는 기존 Java 제어 흐름 구성과 함께 `Promise<T>` 객체를 사용하여 복잡한 토폴로지도 구현할 수 있습니다.

## HelloWorldWorkflowParallel 워크플로 및 활동 호스트와 시작자
<a name="HelloWorldWorkflowParallel-workflow-activities-host-starter"></a>

HelloWorldWorkflowParallel에서는 `GreeterWorker`를 워크플로 및 활동 구현에 대해 호스트 클래스로 구현합니다. 이것은 "HelloWorldParallelList"로 설정된 `taskListToPoll` 이름 외에는 HelloWorldWorkflow 구현과 동일합니다.

`HelloWorldWorkflowParallel`에서는 `GreeterMain`에 워크플로 시작자를 구현하는데, 이는 HelloWorldWorkflow 구현과 동일합니다.

워크플로를 실행하려면 `HelloWorldWorkflow`와 마찬가지로 `GreeterWorker` 및 `GreeterMain`을 실행하십시오.