티스토리 뷰

카테고리 없음

AbstractFlowConfiguration 소개

행복[HappY] 2025. 3. 10. 00:00

AbstractFlowConfiguration에 대한 설명

AbstractFlowConfiguration은 Spring Web Flow에서 Flow(흐름)를 설정하기 위한 추상 클래스입니다. Web Flow는 사용자의 상태를 유지하면서 여러 단계의 UI 흐름을 관리하는 프레임워크이며, AbstractFlowConfiguration은 이러한 Flow를 설정할 때 공통적으로 필요한 기능을 제공하는 기반 클래스입니다.

 

 

 

1. AbstractFlowConfiguration의 역할

Spring Web Flow에서는 여러 개의 Flow를 설정해야 할 수 있습니다. AbstractFlowConfiguration은 이러한 Flow 설정을 쉽게 할 수 있도록 기본적인 설정 메서드와 유틸리티를 제공하는 클래스입니다.

 

주요 기능

  1. Flow Registry(Flow 등록) 설정
    • 애플리케이션에서 사용할 여러 개의 Flow를 등록할 수 있습니다.
  2. Flow Executor(Flow 실행기) 설정
    • Flow를 실행하고 관리하는 FlowExecutor를 생성하고 설정할 수 있습니다.
  3. Flow Builder Services 설정
    • Flow를 정의할 때 사용할 FlowBuilderServices 객체를 설정할 수 있습니다.
  4. Flow 실행 시의 이벤트 및 트랜잭션 관리 지원
    • Flow 실행 중 트랜잭션을 관리하거나, 특정 이벤트를 감지하는 기능을 포함할 수 있습니다.

 

 

 

2. AbstractFlowConfiguration 사용 방법

예제 1: 기본적인 Flow 설정

import org.springframework.context.annotation.Bean;
import org.springframework.webflow.config.AbstractFlowConfiguration;
import org.springframework.webflow.definition.registry.FlowDefinitionRegistry;
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
import org.springframework.webflow.executor.FlowExecutor;

public class WebFlowConfig extends AbstractFlowConfiguration {

    @Bean
    public FlowDefinitionRegistry flowRegistry() {
        return getFlowDefinitionRegistryBuilder()
                .setBasePath("/WEB-INF/flows")
                .addFlowLocationPattern("/**/*-flow.xml")
                .build();
    }

    @Bean
    public FlowExecutor flowExecutor() {
        return getFlowExecutorBuilder(flowRegistry()).build();
    }

    @Bean
    public FlowBuilderServices flowBuilderServices() {
        return getFlowBuilderServicesBuilder().build();
    }
}

설명

  • flowRegistry(): Flow 정의 파일을 /WEB-INF/flows 디렉터리에서 찾아 등록합니다.
  • flowExecutor(): 등록된 Flow를 실행하는 FlowExecutor를 생성합니다.
  • flowBuilderServices(): Flow 빌드를 위한 FlowBuilderServices를 설정합니다.

 

예제 2: 특정 Flow 실행기 설정

FlowExecutor를 커스텀 설정하여 트랜잭션 관리Flow 실행 중 예외 처리를 추가할 수도 있습니다.

@Bean
public FlowExecutor customFlowExecutor() {
    return getFlowExecutorBuilder(flowRegistry())
            .addFlowExecutionListener(new CustomFlowExecutionListener())
            .setMaxFlowExecutions(5)
            .setMaxFlowExecutionSnapshots(10)
            .build();
}

설명

  • addFlowExecutionListener(new CustomFlowExecutionListener()): Flow 실행 시 특정 이벤트를 감지하는 리스너를 추가합니다.
  • setMaxFlowExecutions(5): 동시에 실행될 수 있는 최대 Flow 개수를 설정합니다.
  • setMaxFlowExecutionSnapshots(10): 실행 중인 Flow의 스냅샷 개수를 제한하여 메모리 사용을 최적화합니다.

 

예제 3: 여러 개의 Flow 등록

@Bean
public FlowDefinitionRegistry multiFlowRegistry() {
    return getFlowDefinitionRegistryBuilder()
            .addFlowLocation("/WEB-INF/flows/order/order-flow.xml", "orderFlow")
            .addFlowLocation("/WEB-INF/flows/user/user-flow.xml", "userFlow")
            .build();
}

설명

  • addFlowLocation()을 사용하여 여러 개의 Flow를 개별적으로 등록할 수 있습니다.
  • orderFlow, userFlow 등의 ID를 설정하여 필요할 때 Flow를 찾아서 실행할 수 있습니다.

 

 

 

3. AbstractFlowConfiguration의 주요 메서드

메서드 설명

getFlowDefinitionRegistryBuilder() Flow 정의를 등록할 때 사용하는 FlowDefinitionRegistryBuilder를 반환합니다.
getFlowExecutorBuilder(FlowDefinitionRegistry registry) Flow 실행기(FlowExecutor)를 설정하는 빌더를 반환합니다.
getFlowBuilderServicesBuilder() Flow를 빌드할 때 사용할 FlowBuilderServices를 설정하는 빌더를 반환합니다.

 

 

 

4. AbstractFlowConfiguration 사용 시 주의할 점

  1. Flow 정의 파일 경로를 올바르게 설정해야 합니다.
    • XML 기반 Flow 설정을 사용할 경우, flowRegistry()에서 올바른 경로를 지정해야 합니다.
  2. Flow 실행기(FlowExecutor) 설정을 적절히 구성해야 합니다.
    • setMaxFlowExecutions()와 setMaxFlowExecutionSnapshots() 값을 적절히 설정하여 성능을 최적화하는 것이 중요합니다.
  3. Spring Web Flow와 Spring Security를 함께 사용할 경우, 보안 리스너를 추가해야 합니다.
    • SecurityFlowExecutionListener와 같은 보안 리스너를 FlowExecutor에 등록할 수 있습니다.

 

 

 

5. 요약

  • AbstractFlowConfiguration은 Spring Web Flow의 Flow 설정을 쉽게 하기 위한 추상 클래스입니다.
  • FlowRegistry, FlowExecutor, FlowBuilderServices 등을 설정할 수 있습니다.
  • 여러 개의 Flow를 등록할 수 있으며, Flow 실행기의 동작을 세부적으로 설정할 수 있습니다.
  • Flow 실행 중 이벤트 감지 및 트랜잭션 관리도 가능하며, 성능 최적화를 위한 설정을 지원합니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함