티스토리 뷰
FlowRequestContext에 대한 설명
FlowRequestContext는 Spring Web Flow에서 현재 요청과 관련된 컨텍스트 정보를 제공하는 객체입니다. Spring Web Flow는 사용자의 상태를 유지하면서 단계적으로 진행되는 UI 흐름(Flow)을 관리하는 프레임워크이며, FlowRequestContext는 이러한 흐름 내에서 요청과 관련된 정보를 관리하는 핵심 인터페이스입니다.
1. FlowRequestContext의 역할
Spring Web Flow에서 현재 요청(Request)에 대한 정보를 제공하며, 이를 통해 다양한 기능을 수행할 수 있습니다.
주요 기능
- 현재 요청의 Scope(범위) 관리
- RequestScope, FlashScope, FlowScope, ConversationScope 등의 데이터를 조회하고 수정할 수 있습니다.
- 현재 진행 중인 Flow 정보 제공
- 현재 실행 중인 Flow의 상태 및 ID를 가져올 수 있습니다.
- 이벤트(Event) 처리
- 사용자가 특정 액션을 수행할 때 발생하는 이벤트를 확인할 수 있습니다.
- 메시지 처리 및 오류 관리
- View에 표시할 메시지를 추가하거나, 오류를 관리할 수 있습니다.
- Transition(전이) 및 View 처리
- 현재 View와 Transition을 제어할 수 있습니다.
2. FlowRequestContext 사용 예시
예제 1: 현재 요청에서 데이터 가져오기
@RequestMapping("/flow-data")
public String getFlowData(FlowRequestContext flowRequestContext, Model model) {
String userName = flowRequestContext.getFlowScope().getString("userName");
model.addAttribute("userName", userName);
return "userView";
}
설명
- flowRequestContext.getFlowScope().getString("userName")를 사용하여 현재 Flow Scope에서 데이터를 가져옵니다.
- 가져온 데이터를 Model에 추가하여 View에서 사용할 수 있도록 합니다.
예제 2: 이벤트 기반 상태 변경
public Event processUserAction(FlowRequestContext flowRequestContext) {
String action = flowRequestContext.getRequestParameters().get("action");
if ("confirm".equals(action)) {
return new Event(this, "confirmed");
} else {
return new Event(this, "cancelled");
}
}
설명
- 사용자의 요청에서 action 파라미터를 가져와 해당 값에 따라 이벤트를 반환합니다.
- confirmed 또는 cancelled 이벤트를 발생시켜 Flow에서 적절한 상태 전이를 수행할 수 있도록 합니다.
예제 3: Flash Scope에 데이터 저장
public void storeMessage(FlowRequestContext flowRequestContext) {
flowRequestContext.getFlashScope().put("message", "이 메시지는 한 번만 표시됩니다.");
}
설명
- FlashScope는 현재 View까지 데이터가 유지되며, 다음 요청에서는 삭제됩니다.
- 메시지를 일시적으로 저장하고, 한 번만 표시하는 용도로 사용할 수 있습니다.
3. FlowRequestContext의 주요 메서드
메서드 설명
getFlowExecutionContext() | 현재 실행 중인 Flow의 컨텍스트 정보를 반환합니다. |
getRequestParameters() | 현재 요청에서 전달된 파라미터를 가져옵니다. |
getRequestScope() | 현재 요청(Request) 범위에서 데이터를 가져옵니다. |
getFlashScope() | Flash Scope에서 데이터를 관리합니다. (한 번만 유지되는 데이터) |
getFlowScope() | Flow Scope에서 데이터를 관리합니다. (Flow가 종료될 때까지 유지됨) |
getConversationScope() | Conversation Scope에서 데이터를 관리합니다. (부모 Flow가 종료될 때까지 유지됨) |
getMessageContext() | 메시지 컨텍스트를 가져와 사용자에게 메시지를 표시할 수 있습니다. |
4. FlowRequestContext와 Scope
Spring Web Flow는 다양한 Scope을 지원하며, FlowRequestContext를 활용하여 데이터를 관리할 수 있습니다.
Scope 유지 기간 사용 예
Request Scope | 요청이 끝날 때까지 | flowRequestContext.getRequestScope().put("key", value); |
Flash Scope | 다음 View로 이동할 때까지만 유지됨 | flowRequestContext.getFlashScope().put("key", value); |
Flow Scope | 현재 Flow 실행이 끝날 때까지 유지됨 | flowRequestContext.getFlowScope().put("key", value); |
Conversation Scope | 부모 Flow가 종료될 때까지 유지됨 | flowRequestContext.getConversationScope().put("key", value); |
5. FlowRequestContext 사용 시 주의할 점
- Scope의 유지 기간을 잘 이해해야 합니다.
- Flash Scope는 한 번만 유지되므로, 여러 번 사용해야 할 경우 Flow Scope나 Conversation Scope를 고려해야 합니다.
- 이벤트 기반으로 Flow를 제어할 때 정확한 이벤트 명칭을 사용해야 합니다.
- Flow에서 정의된 이벤트와 일치하지 않으면 정상적으로 전이가 발생하지 않을 수 있습니다.
- 다른 컨텍스트 객체와의 차이점을 이해해야 합니다.
- FlowExecutionContext는 실행 중인 Flow 전체의 정보를 제공하지만,
- FlowRequestContext는 현재 요청(Request)에 대한 정보를 관리합니다.
6. 요약
- FlowRequestContext는 Spring Web Flow에서 현재 요청(Request)과 관련된 정보를 관리하는 객체입니다.
- 요청(Request) 및 파라미터를 확인하고, Scope 데이터를 저장하거나 가져올 수 있습니다.
- 이벤트(Event) 및 상태 전이를 제어하는 데 활용됩니다.
- FlashScope, FlowScope, ConversationScope 등의 데이터를 관리할 수 있습니다.
- flowRequestContext.getRequestParameters()를 사용하면 요청에서 전달된 데이터를 쉽게 가져올 수 있습니다.