

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

# AWS Flow Framework for Java 재생 동작
<a name="programming-replay"></a>

이 주제에서는 [AWS Flow Framework for Java란 무엇입니까?](welcome.md) 단원의 예시를 사용하여 다시 재생 동작의 예시를 다룹니다. [동기식](#programming-replay-synchronous) 및 [비동기식](#programming-replay-asynchronous) 시나리오 둘 다 설명합니다.

## 예 1: 동기식 다시 재생
<a name="programming-replay-synchronous"></a>

동기식 워크플로에서 다시 재생이 작동하는 방식의 예를 보려면 다음과 같이 해당 구현 내에 `println` 호출을 추가하여 [HelloWorldWorkflow](getting-started-example-helloworldworkflow.md) 워크플로와 액티비티 구현을 수정합니다.

```
public class GreeterWorkflowImpl implements GreeterWorkflow {
...
   public void greet() {
      System.out.println("greet executes");
      Promise<String> name = operations.getName();
      System.out.println("client.getName returns");
      Promise<String> greeting = operations.getGreeting(name);
      System.out.println("client.greeting returns");
      operations.say(greeting);
      System.out.println("client.say returns");
   }
}
**************
public class GreeterActivitiesImpl implements GreeterActivities {
   public String getName() {
      System.out.println("activity.getName completes");
      return "World";
   }

   public String getGreeting(String name) {
      System.out.println("activity.getGreeting completes");
      return "Hello " + name + "!";
   }

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

코드에 대한 자세한 내용은 [HelloWorldWorkflow 애플리케이션](getting-started-example-helloworldworkflow.md) 단원을 참조하십시오. 다음은 출력을 편집한 버전으로서, 각 다시 재생 에피소드의 시작을 나타내는 설명이 포함되어 있습니다.

```
//Episode 1
greet executes
client.getName returns
client.greeting returns
client.say returns

activity.getName completes
//Episode 2
greet executes
client.getName returns
client.greeting returns
client.say returns

activity.getGreeting completes
//Episode 3
greet executes
client.getName returns
client.greeting returns
client.say returns

Hello World! //say completes
//Episode 4
greet executes
client.getName returns
client.greeting returns
client.say returns
```

이 예시의 다시 재생 프로세스는 다음과 같이 작동합니다.
+ 첫 번째 에피소드에서는 종속성이 없는 `getName` 활동 작업을 예약합니다.
+ 두 번째 에피소드에서는 `getName`에 의존하는 `getGreeting` 활동 작업을 예약합니다.
+ 세 번째 에피소드에서는 `getGreeting`에 의존하는 `say` 활동 작업을 예약합니다.
+ 마지막 에피소드에서는 추가 작업을 예약하지 않고 미완료 활동을 검색하지 않습니다. 이로써 워크플로 실행은 종료됩니다.

**참고**  
세 가지 활동 클라이언트 메서드는 각 에피소드에 대해 한 번 호출됩니다. 그러나 그러한 호출 중 하나만 활동 작업을 결과로 얻으므로 각 작업은 한 번만 수행됩니다.

## 예 2: 비동기식 다시 재생
<a name="programming-replay-asynchronous"></a>

[동기식 다시 재생 예시](#programming-replay-synchronous)와 마찬가지로 사용자는 [HelloWorldWorkflowAsync 애플리케이션](getting-started-example-helloworldworkflowasync.md)을 수정하여 비동기식 다시 재생이 어떻게 작동하는지 확인할 수 있습니다. 이렇게 하면 다음과 같이 출력됩니다.

```
//Episode 1
greet executes
client.name returns
workflow.getGreeting returns
client.say returns

activity.getName completes
//Episode 2
greet executes
client.name returns
workflow.getGreeting returns
client.say returns
workflow.getGreeting completes

Hello World! //say completes
//Episode 3
greet executes
client.name returns
workflow.getGreeting returns
client.say returns
workflow.getGreeting completes
```

두 가지 활동만 있으므로 HelloWorldAsync에서는 다시 재생 에피소드를 세 개 사용합니다. `getGreeting` 활동은 *getGreeting* 비동기식 워크플로 메서드로 대치되었습니다. 이 메서드는 완료될 때 다시 재생 에피소드를 시작하지 않습니다.

첫 번째 에피소드는 *이름* 활동의 완료 여부에 따라 달라지므로 `getGreeting`을 직접적으로 호출하지 않습니다. 그러나 *getName*이 완료된 후에 다시 재생에서는 이어지는 각 에피소드에 대해 *getGreeting*을 한 번 호출합니다.

## 참고
<a name="see-also"></a>
+ [AWS Flow Framework 기본 개념: 분산 실행](awsflow-basics-distributed-execution.md)