-
1. HttpHandler
HttpHandler는 다른 유형의 HTTP 서버 API로 request와 response를 처리하기 위한 하나의 메서드만을 가진다.
public interface HttpHandler{mono<Void> handle(ServerHttpRequest request, ServerHttpresponse response)}아래는 HttpHandler의 구현체인 HttpWebHandlerAdapter클래스의 코드 일부분이다.
Adapter 클래스는 hadle() 메서드의 파라미터로 전달받은 request, response로 ServerWebExchange를 생성 후 WebHandler를 호출하는 작업을 진행한다.
public class HttpWebHandlerAdapter extends WebHandlerDecoratorimplements HttpHandler {......@Overridepublic Mono<Vold> handle(ServerHttpRequest request, ServerHttpResponse response) {ServerWebExchange exchange = createExchange(request, response);}}2. WebFilter
WebFilter는 Spring MV의 서블릿 필터(Servlet Filter)처럼 핸들러가 요청을 처리하기전, 전처리 작업을 할 수 있게 해준다.
WebFilter는 주로 보안이나 세션 타임아웃 등, 공통의 요소 전처리에 사용된다.
WebFilter는 아래와 같이 filter(exchange,chain) 메서드로 정의되어 있으며, 파라미터로 전달받은 WebFilterChain을 통해 필터 체인을 형성하여 원하는 만큼의 WebFilter를 추가할 수 있다.
public interface WebFilter{mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain);}예시) test리소스에 대한 request시, sysout을 통해 로그를 출력하는 코드
@Componentpublic class CustomFilter implements WebFilter{@overridepublic Mono<Void> filter(ServerWebExchange exchange, WebFilterchain chain){String path = exchange.getResult().getURI().getPath();return chain.filter(exchange).doAfterTermanate(() => {if (path.contains("test")){System.out.println("Path: " + path + ", status: " + exchange.getResponse().getStatusCode());}});}}3. HandlerFilterFunction
HandlerFilterFunction은 함수형 기반의 요청 핸들러에 적용할 수 있는 Filter이다.
WebFilter 구현체는 Spring Bean으로 등록되는 반면, HandlerFilterFunction 구현체는 애너테이션 기반의 핸들러가 아닌 함수형 기반의 요청 핸들러여서 함수 형태로 사용되기에 Spring Bean으로 등록되지 않는 차이점이 존재한다.
@FunctionnalInterfacepublic interface HandlerFilterFunction<T extends ServerResponse, R extends ServerResponse>{Mono<R> filter(ServerRequest request, HandlerFunction<T> next);......}4. DispatcherHandler
DispatcherHandler는 WebHandler 인터페이스의 구현체이다.
Spring MVC의 Front Controller 패턴이 적용된 DispatcherServlet처럼 중아에서 먼저 요청을 전달 받은 후, 다른 컴포넌트에 요청 처리 위임을 담당한다.
DispatcherHandler자체가 Spring Bean으로 등록되도록 설계되어서, ApplicationContext에서 HandlerMapping, HandlerAdapter, HandlerResultHandler등의 요청 처리를 위한 위임 컴포넌트를 검색한다.
5. HanlerMapping
Spring MVC에서와 동일하게 request와 Handler object에 대한 매핑을 정의하는 인터페이스 이며, HandlerMapping 인터페이스를 구현하는 구현 클래스로는 RequestMappingHandlerMaping, RouterFunctionMapping 등이 존재한다.
HandlerMapping 인터페이스는 getHandler(serverWebExchange exchage)추상 메서드 하나만 정의되어 있으며, getHandler() 메서드는 파라미터로 입력받은 매게변수에 매치되는 Handler Object를 리턴한다.
public interface HeandlerMapping{......Mono<Object> getHandler(ServerWebExchange exchange);}6. HandlerAdapter
HandlerAdapter는 두개의 추상 메서드를 정의한다.
1. supports(Object handler) => 해당 메서드는 파라미터로 전달받은 handler object를 지원하는지 확인한다.
2. handle(ServerWebExc...) => 해당 메서드는 파라미터로 전달받은 handler object를 통해 핸들러 메서드를 호출한다.
public interface HandlerAdapter{boolean supports(Object handler);Mono<HandlerResult> handle(ServerWebExchange exchange, Object handler);}'개발 > 스프링 WebFlux' 카테고리의 다른 글
스프링 부트 - MVC vs WebFlux 구현 방식 차이(애너테이션 기반) (0) 2025.01.09 스프링 부트 - WebFlux의 Non-Blocking 프로세스 구조 (0) 2025.01.09 스프링 부트 - WebFlux 처리 흐름 (0) 2025.01.09 스프링 부트 - Spring WebFlux 개요 (0) 2025.01.08