

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

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

Amazon SWF 애플리케이션이 구성되는 방식을 소개하기 위해 우리는 워크플로처럼 작동하지만 로컬에서 단일 프로세스로 실행되는 Java 애플리케이션을 생성할 것입니다. Amazon Web Services와의 연결은 필요하지 않습니다.

**참고**  
[HelloWorldWorkflow](getting-started-example-helloworldworkflow.md) 예시는 이것을 기반으로 구축되며, Amazon SWF에 연결되어 워크플로 관리 작업을 처리합니다.

워크플로 애플리케이션은 다음과 같은 세 가지 기본 구성 요소로 이루어집니다.
+ *활동 작업자*는 일련의 *활동*을 지원하는데, 각 활동은 특정 작업을 독립적으로 수행하기 위해 실행하는 메서드입니다.
+ *워크플로 작업자*는 여러 활동의 실행을 조율하고 데이터 흐름을 관리합니다. 이는 *워크플로 토폴로지*를 프로그래밍 방식으로 실현한 것으로서, 기본적으로 다양한 활동이 실행되는 시점, 순차적으로 또는 동시적으로 실행할지 여부 등을 정의하는 순서도입니다.
+ *워크플로 시작자*는 *실행*이라는 이름의 워크플로 인스턴스를 시작하고, 실행 중에 이 인스턴스와 상호 작용할 수 있습니다.

HelloWorld는 세 가지 클래스 및 두 가지 관련 인터페이스로 구현됩니다. 이에 관해서는 다음 단원에서 설명합니다. 시작하기 전에에 설명된 대로 개발 환경을 설정하고 새 AWS Java 프로젝트를 생성해야 합니다[Java AWS Flow Framework 용 설정](setup.md). 다음 연습에 사용되는 패키지는 모두 `helloWorld.XYZ`라는 이름이 지정되어 있습니다. 이 이름을 사용하려면 다음과 같이 aop.xml에 `within` 속성을 설정하십시오.

```
...
<weaver options="-verbose">
   <include within="helloWorld..*"/>
</weaver>
```

HelloWorld를 구현하려면 AWS SDK 프로젝트에서 라는 새 Java 패키지를 생성하고 다음 파일을 `helloWorld.HelloWorld` 추가합니다.
+ `GreeterActivities.java`라는 이름의 인터페이스 파일
+ 활동 작업자를 구현하는 `GreeterActivitiesImpl.java`라는 이름의 클래스 파일
+ `GreeterWorkflow.java`라는 이름의 인터페이스 파일
+ 워크플로 작업자를 구현하는 `GreeterWorkflowImpl.java`라는 이름의 클래스 파일
+ 워크플로 시작자를 구현하는 `GreeterMain.java`라는 이름의 클래스 파일

세부 정보는 다음 단원에 설명되어 있으며 적절한 파일에 추가할 수 있는 각 구성 요소의 코드 전체가 포함됩니다.

## HelloWorld 활동 구현
<a name="getting-started-example-helloworld.activityworker"></a>

HelloWorld는 `"Hello World!"`라는 인사말을 콘솔에 출력하는 작업 전체를 세 가지 작업으로 나누는데, 각 작업은 *활동 메서드*에서 수행합니다. 활동 메서드는 `GreeterActivities` 인터페이스에 다음과 같이 정의되어 있습니다.

```
public interface GreeterActivities {
   public String getName();
   public String getGreeting(String name);
   public void say(String what);
}
```

HelloWorld에는 활동 구현 한 개, 즉 `GreeterActivitiesImpl`이 있는데, 이 구현에서는 다음과 같이 `GreeterActivities` 메서드를 제공합니다.

```
public class GreeterActivitiesImpl implements GreeterActivities {
   @Override
   public String getName() {
      return "World";
   }

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

   @Override
   public void say(String what) {
      System.out.println(what);
   }
}
```

활동은 서로 독립적이어서 여러 워크플로에서 자주 사용할 수 있습니다. 예를 들어 어느 워크플로에서도 `say` 활동을 사용하여 문자열을 콘솔에 출력할 수 있습니다. 또한 워크플로에는 각기 일련의 다른 작업을 수행하는 여러 개의 활동 구현이 있을 수 있습니다.

## HelloWorld 워크플로 작업자
<a name="getting-started-example-helloworld.workflowworker"></a>

"Hello World\$1"를 콘솔에 출력하려면 활동 작업이 정확한 데이터로 정확한 순서에 따라 순차적으로 실행되어야 합니다. HelloWorld 워크플로 작업자는 단순한 *선형 워크플로 토폴로지*에 근거하여 활동의 실행을 조율합니다.

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


세 가지 활동은 순차적으로 실행되고, 데이터 한 활동에서 다음 활동으로 흘러갑니다.

HelloWorld 워크플로 작업자에는 다음과 같이 `GreeterWorkflow` 인터페이스에 정의된, 워크플로의 진입점인 메서드가 한 개 있습니다.

```
public interface GreeterWorkflow {
   public void greet();
}
```

`GreeterWorkflowImpl` 클래스는 이 인터페이스를 다음과 같이 구현합니다.

```
public class GreeterWorkflowImpl implements GreeterWorkflow{
   private GreeterActivities operations = new GreeterActivitiesImpl();

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

`greet` 메서드는 `GreeterActivitiesImpl`의 인스턴스를 생성하고, 각 활동 메서드를 정확한 순서로 호출하고, 각 메서드에 적절한 데이터를 전달하여 HelloWorld 토폴로지를 구현합니다.

## HelloWorld 워크플로 시작자
<a name="getting-started-example-helloworld.starter"></a>

*워크플로 시작자*는 워크플로 실행을 시작하는 애플리케이션으로서, 실행 중에 워크플로와 상호 작용도 할 수 있습니다. `GreeterMain` 클래스에서는 HelloWorld 워크플로 시작자를 다음과 같이 구현합니다.

```
public class GreeterMain {
   public static void main(String[] args) {
      GreeterWorkflow greeter = new GreeterWorkflowImpl();
      greeter.greet();
   }
}
```

`GreeterMain`에서는 `GreeterWorkflowImpl`의 인스턴스를 생성하고 `greet`를 호출하여 워크플로 작업자를 실행합니다. `GreeterMain`을 Java 애플리케이션으로 실행하면 "Hello, World\$1"가 콘솔 출력에 보일 것입니다.