Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 30일차 미션 (3월 1일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문
패스트캠퍼스
패스트캠퍼스 환급챌린지 30일차 미션 (3월 1일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기
slow-walker 2024. 3. 2. 15:51Spring 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
![](https://blog.kakaocdn.net/dn/ZPfxE/btsFsos2D7Z/ySHoZTO3PorlOsF31gzzsk/img.png)
- route: ServerRequest를 인자로 받고 HandlerFunction을 Mono로 반환하는 추상 메서드
- path, method, predicate 등으로 handlerFunction과 연결하여 해당 요청이 들 어왔을때 handlerFunction을 반환
HandlerFunction
![](https://blog.kakaocdn.net/dn/bfAfth/btsFt3B8xbp/7pc9OgwX19g9bT4BaXOql1/img.png)
- 풍부한기능을가지고있는ServerRequest
- ServerResponseBuilder로쉽게응답을 생성 가능
- 함수형인터페이스로간단하게
- HandlerFunction 생성 가능
※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N