티스토리 뷰

카테고리 없음

FlowExecutionContext 소개

행복[HappY] 2025. 3. 7. 20:40

FlowExecutionContext에 대한 설명

FlowExecutionContext는 Spring Web Flow에서 사용되는 개념으로, 현재 실행 중인 Flow(흐름)의 컨텍스트 정보를 관리하는 객체입니다. Spring Web Flow는 웹 애플리케이션에서 사용자의 상태를 유지하면서 단계별로 진행되는 UI 워크플로우를 관리하는 프레임워크입니다.

 

FlowExecutionContext는 현재 실행 중인 Flow 인스턴스의 상태를 추적하고, 해당 Flow에서 사용할 수 있는 데이터 및 속성을 제공합니다.

 

 

 

1. FlowExecutionContext의 주요 역할

  1. 현재 실행 중인 Flow에 대한 정보 제공
    • 현재 진행 중인 Flow의 ID, 상태 정보, 루트 플로우와 서브플로우 관계 등을 확인할 수 있습니다.
  2. Flow 스코프에 저장된 데이터 관리
    • 실행 중인 Flow에 대한 변수를 저장하고 관리할 수 있습니다.
  3. 현재 활성화된 상태(State) 확인
    • 현재 진행 중인 Flow의 어떤 상태(State)에서 실행되고 있는지 확인할 수 있습니다.
  4. 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 사용 시 주의할 점

  1. Flow가 종료되면 Flow Scope 데이터가 사라집니다.
    • Flow Scope에 저장된 데이터는 Flow가 끝날 때 삭제되므로, 지속적인 데이터 저장이 필요하면 Conversation Scope 또는 외부 저장소(DB 등)를 활용해야 합니다.
  2. 서브플로우(Subflow) 호출 시 Parent-Child 관계를 고려해야 합니다.
    • 하나의 Flow가 다른 Flow를 호출하는 경우 FlowExecutionContext를 활용하여 현재 Flow의 상태를 유지하고 부모 Flow와의 연관성을 관리해야 합니다.
  3. 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)에 저장해야 합니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함