티스토리 뷰
FlowExecutionContext에 대한 설명
FlowExecutionContext는 Spring Web Flow에서 사용되는 개념으로, 현재 실행 중인 Flow(흐름)의 컨텍스트 정보를 관리하는 객체입니다. Spring Web Flow는 웹 애플리케이션에서 사용자의 상태를 유지하면서 단계별로 진행되는 UI 워크플로우를 관리하는 프레임워크입니다.
FlowExecutionContext는 현재 실행 중인 Flow 인스턴스의 상태를 추적하고, 해당 Flow에서 사용할 수 있는 데이터 및 속성을 제공합니다.
1. FlowExecutionContext의 주요 역할
- 현재 실행 중인 Flow에 대한 정보 제공
- 현재 진행 중인 Flow의 ID, 상태 정보, 루트 플로우와 서브플로우 관계 등을 확인할 수 있습니다.
- Flow 스코프에 저장된 데이터 관리
- 실행 중인 Flow에 대한 변수를 저장하고 관리할 수 있습니다.
- 현재 활성화된 상태(State) 확인
- 현재 진행 중인 Flow의 어떤 상태(State)에서 실행되고 있는지 확인할 수 있습니다.
- Parent-Child Flow 관계 관리
- 하나의 Flow가 다른 Flow를 호출하는 경우, FlowExecutionContext를 사용하여 부모(Parent)와 자식(Child) Flow 간의 관계를 유지할 수 있습니다.
2. FlowExecutionContext 사용 예시
예제 1: FlowExecutionContext를 사용하여 현재 Flow 정보 확인
@RequestMapping("/flow-status")
public String getFlowStatus(RequestContext requestContext, Model model) {
FlowExecutionContext flowExecutionContext = requestContext.getFlowExecutionContext();
String flowId = flowExecutionContext.getDefinition().getId();
String activeStateId = flowExecutionContext.getActiveSession().getState().getId();
model.addAttribute("flowId", flowId);
model.addAttribute("activeStateId", activeStateId);
return "flowStatusView";
}
설명
- requestContext.getFlowExecutionContext()를 사용하여 현재 Flow 실행 컨텍스트를 가져옵니다.
- flowExecutionContext.getDefinition().getId()를 통해 현재 실행 중인 Flow의 ID를 확인할 수 있습니다.
- flowExecutionContext.getActiveSession().getState().getId()를 통해 현재 활성화된 상태를 가져옵니다.
예제 2: FlowExecutionContext에서 Flow Scope 데이터 조회
@RequestMapping("/flow-data")
public String getFlowData(RequestContext requestContext, Model model) {
FlowExecutionContext flowExecutionContext = requestContext.getFlowExecutionContext();
Object userData = flowExecutionContext.getActiveSession().getScope().get("user");
model.addAttribute("user", userData);
return "userView";
}
설명
- flowExecutionContext.getActiveSession().getScope().get("user")를 사용하여 현재 Flow의 Scope에 저장된 데이터를 가져올 수 있습니다.
- Flow 내부에서 설정한 데이터(user)를 뷰에 전달할 수 있습니다.
3. FlowExecutionContext의 주요 메서드
메서드 설명
getDefinition() | 현재 실행 중인 Flow의 정의를 반환합니다. |
isActive() | 현재 Flow가 활성화되어 있는지 여부를 확인합니다. |
getActiveSession() | 현재 활성화된 Flow 세션을 반환합니다. |
getFlashScope() | Flash Scope에서 데이터를 가져옵니다 (한 번만 유지되는 데이터). |
getConversationScope() | Conversation Scope에서 데이터를 가져옵니다 (Flow 전체 기간 동안 유지되는 데이터). |
getRequestScope() | 요청(Request) 범위에서 데이터를 가져옵니다. |
4. FlowExecutionContext와 Scope
Spring Web Flow에서는 여러 가지 Scope을 지원하며, FlowExecutionContext를 사용하여 Scope 데이터를 관리할 수 있습니다.
Scope 설명 사용 방법
Request Scope | 요청이 끝날 때까지 유지됨 | requestContext.getRequestScope().put("key", value); |
Flash Scope | 다음 View로 이동할 때까지만 유지됨 | requestContext.getFlashScope().put("key", value); |
Flow Scope | 현재 Flow 실행이 끝날 때까지 유지됨 | flowExecutionContext.getActiveSession().getScope().put("key", value); |
Conversation Scope | 부모 Flow가 종료될 때까지 유지됨 | requestContext.getConversationScope().put("key", value); |
5. FlowExecutionContext 사용 시 주의할 점
- Flow가 종료되면 Flow Scope 데이터가 사라집니다.
- Flow Scope에 저장된 데이터는 Flow가 끝날 때 삭제되므로, 지속적인 데이터 저장이 필요하면 Conversation Scope 또는 외부 저장소(DB 등)를 활용해야 합니다.
- 서브플로우(Subflow) 호출 시 Parent-Child 관계를 고려해야 합니다.
- 하나의 Flow가 다른 Flow를 호출하는 경우 FlowExecutionContext를 활용하여 현재 Flow의 상태를 유지하고 부모 Flow와의 연관성을 관리해야 합니다.
- Flash Scope을 사용할 때는 데이터가 한 번만 유지된다는 점을 기억해야 합니다.
- Flash Scope에 저장된 데이터는 다음 View로 이동할 때까지만 유지되며, 이후에는 삭제됩니다.
6. 요약
- FlowExecutionContext는 Spring Web Flow에서 실행 중인 Flow의 컨텍스트 정보를 관리하는 객체입니다.
- 현재 실행 중인 Flow의 ID, 활성화된 상태(State), 저장된 데이터(Scope) 등을 확인할 수 있습니다.
- Flow Scope, Flash Scope, Conversation Scope 등의 데이터를 관리하는 데 사용됩니다.
- requestContext.getFlowExecutionContext()를 사용하여 현재 Flow 실행 정보를 가져올 수 있습니다.
- Flow가 종료되면 Flow Scope 데이터가 삭제되므로, 지속적으로 유지해야 하는 데이터는 Conversation Scope 또는 외부 저장소(DB)에 저장해야 합니다.