개발자는 기록이 답이다

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

패스트캠퍼스

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

slow-walker 2024. 3. 2. 15:51

Spring WebFlux의 Functional Endpoints


Spring WebFlux는 함수형 엔드포인트(Functional Endpoints)를 통해 간결하고 유연한 방식으로 웹 애플리케이션을 개발할 수 있는 기능을 제공합니다. 이러한 함수형 엔드포인트는 기존의 어노테이션 기반 컨트롤러 대신 함수형 스타일로 HTTP 엔드포인트를 정의하는 방법입니다.

1. 함수형 엔드포인트의 장점
선언적인 라우팅: 함수형 엔드포인트를 사용하면 라우팅 규칙을 코드로 선언적으로 정의할 수 있습니다. URL 패턴 및 HTTP 메서드에 대한 규칙을 명시적으로 정의하므로 가독성이 뛰어나며 라우팅이 어떻게 이루어지는지 쉽게 이해할 수 있습니다.

컴파일 타임 검증: 함수형 엔드포인트는 컴파일 타임에 라우팅 규칙이나 핸들러에 대한 오류를 확인할 수 있습니다. 따라서 런타임에서 발생할 수 있는 일부 오류를 미리 방지할 수 있습니다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerResponse;
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
import static org.springframework.web.reactive.function.server.RequestPredicates.*;

@Configuration
public class FunctionalEndpointsConfig {

    @Bean
    public RouterFunction<ServerResponse> routeEndpoints(FunctionalHandler handler) {
        return route(GET("/api/greet").and(accept(MediaType.APPLICATION_JSON)), handler::handleGreet)
                .andRoute(GET("/api/time").and(accept(MediaType.APPLICATION_JSON)), handler::handleTime);
    }
}

 

위의 코드에서 FunctionalHandler는 실제로 함수형 엔드포인트의 로직을 구현한 핸들러입니다. routeEndpoints 메서드에서는 URL 패턴 및 HTTP 메서드에 따라 FunctionalHandler의 메서드를 매핑하는 라우터를 정의하고 있습니다.

 

RouterFunction

  • route: ServerRequest를 인자로 HandlerFunctionMono로 반환하는 추상 메서드
  • path, method, predicate 등으로 handlerFunction과 연결하여 해당 요청이 들 어을때 handlerFunction을 반환

HandlerFunction

  • 부한기능을가지고있는ServerRequest
  • ServerResponseBuilder게응답을 생성 가능
  • 함수형인터이스로간단하게
  • HandlerFunction 생성 가능

 

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