개발자는 기록이 답이다

패스트캠퍼스 환급챌린지 28일차 미션 (2월 28일) :  Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문

패스트캠퍼스

패스트캠퍼스 환급챌린지 28일차 미션 (2월 28일) :  Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기

slow-walker 2024. 2. 28. 22:33

Spring WebFlux에서 WebHandler 실행하기

Spring WebFlux에서 WebHandler를 실행하는 방법은 여러 가지가 있습니다. WebHandler는 HTTP 요청을 처리하고 응답을 생성하는데 사용되는 객체이므로 이를 실행하려면 Spring WebFlux의 DispatcherHandler나 HandlerMapping과 같은 인프라를 활용해야 합니다.

일반적으로 HandlerMapping은 URL 경로에 따라 어떤 Handler가 실행될지 결정하고, DispatcherHandler는 실제로 WebHandler를 실행합니다.

  • Spring환경에서는applicationContext를 이용하여 WebHttpHandlerBuilder를 build



Spring WebFlux는 리액티브 프로그래밍 기반의 웹 애플리케이션을 개발하기 위한 강력한 프레임워크입니다. 이 프레임워크에서는 HTTP 요청을 처리하고 응답을 생성하는 핵심 역할을 하는 것이 WebHandler입니다. WebHandler를 실행하는 방법에 대해 살펴보겠습니다.

1. WebHandler 구현
먼저, 실제로 HTTP 요청을 처리하고 응답을 생성할 WebHandler를 구현해야 합니다. 아래는 간단한 예시입니다.

import org.springframework.web.reactive.function.server.HandlerFunction;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;

public class MyWebHandler implements HandlerFunction<ServerResponse> {

    @Override
    public Mono<ServerResponse> handle(ServerRequest request) {
        // 웹 요청 처리 로직 구현
        return ServerResponse.ok().bodyValue("Hello, WebFlux!");
    }
}

 

2. WebHandler를 HttpHandler로 변환다음으로, WebHandler를 HttpHandler로 변환해야 합니다. 이때 RouterFunctions.toHttpHandler 메서드를 사용합니다. 

 

import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
import reactor.netty.http.server.HttpServer;

public class WebHandlerConfig {

    public HttpServer httpServer() {
        return HttpServer.create().port(8080);
    }

    public HttpHandler httpHandler() {
        return WebHttpHandlerBuilder
                .webHandler(RouterFunctions.toHttpHandler(myWebHandler()))
                .build();
    }

    public MyWebHandler myWebHandler() {
        return new MyWebHandler();
    }

    public ReactorHttpHandlerAdapter httpHandlerAdapter(HttpHandler httpHandler) {
        return new ReactorHttpHandlerAdapter(httpHandler);
    }
}

3. HttpServer 시작
마지막으로 HttpServer를 시작하고, 클라이언트의 요청이 들어올 때마다 WebHandler가 실행되어 처리하도록 설정합니다.

public class Application {

    public static void main(String[] args) {
        WebHandlerConfig webHandlerConfig = new WebHandlerConfig();
        HttpServer server = webHandlerConfig.httpServer();
        server.handle(webHandlerConfig.httpHandlerAdapter(webHandlerConfig.httpHandler()))
                .bindNow();
    }
}


이제 HttpServer가 시작되고, 클라이언트의 HTTP 요청이 들어올 때마다 WebHandler가 실행되어 해당 요청을 처리하고 응답을 생성합니다.

Spring WebFlux는 이렇게 구성된 WebHandler를 통해 리액티브하고 비동기적인 웹 애플리케이션을 개발할 수 있게 해줍니다. 필요에 따라 라우팅 및 추가적인 핸들러 관리를 통해 프로젝트의 복잡성에 맞게 구성할 수 있습니다.

 


 

※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N