

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

# 결정자 코드 변경: 버전 관리 및 기능 플래그
<a name="java-flow-making-changes-decider-code"></a>

이 단원에서는 다음과 같이 두 가지 메서드를 사용해 이전 버전과 호환되지 않는 결정자 변경을 방지하는 방법을 보여줍니다.
+ [버전 관리](java-flow-making-changes-solutions.md#use-versioning)에서는 기본 솔루션을 제공합니다.
+ [기능 플래그를 통한 버전 관리](java-flow-making-changes-solutions.md#use-feature-flags)는 버전 관리 솔루션을 바탕으로 구축됩니다. 새 버전의 워크플로는 도입되지 않으므로 버전 업데이트를 위해 새 코드를 푸시할 필요가 없습니다.

이 솔루션을 사용하기 전에 먼저 이전 버전과 호환되지 않는 결정자 변경의 원인과 결과를 설명하는 [예제 시나리오](java-flow-making-changes-example-scenario.md) 단원의 내용을 숙지하시기 바랍니다.

## 다시 재생 프로세스 및 코드 변경
<a name="replay-process-code-changes"></a>

 AWS Flow Framework for Java 결정자 작업자가 결정 작업을 실행할 때 먼저 실행의 현재 상태를 다시 빌드해야 단계를 추가할 수 있습니다. 결정자는 *다시 재생*이라는 프로세스를 사용하여 이를 수행합니다.

다시 재생 프로세스에서는 이미 발생한 이벤트 내역을 거치면서 이와 동시에 처음부터 결정자 코드를 다시 실행합니다. 이벤트 내역을 거침으로써 프레임워크에서는 신호 또는 작업 완료에 반응하고 코드에서 `Promise` 객체 차단을 해제할 수 있습니다.

프레임워크에서는 결정자 코드를 실행할 때 카운터를 늘려 각 예약 작업(활동, Lambda 함수, 타이머, 하위 워크플로 또는 발신 신호)에 ID를 할당합니다. 프레임워크에서는 이 ID를 Amazon SWF에 전달하고 `ActivityTaskCompleted`와 같은 내역 이벤트에 ID를 추가합니다.

다시 재생 프로세스의 성공에 중요한 것은 결정자 코드가 결정적이어야 하고 모든 워크플로 실행에서 모든 결정에 대해 동일한 순서로 동일한 작업을 예약해야 한다는 것입니다. 이 요구 사항을 준수하지 않으면 프레임워크에서 `ActivityTaskCompleted` 이벤트의 ID를 기존 `Promise` 객체에 매칭하지 못하는 등의 결과가 발생할 수 있습니다.