웹필터에 대해 보다보니 스프링 부트의 Web Application 종류에 Servlet Web 과 Reactive Web두 종류가 있는데
이 둘이 어떻게 다른지 궁금해져서 공식문서 읽으면서 정리하는 내용.
스프링의 Reactive Stack 과 Servelet Stack
스프링은 Reactive와 Servlet 두 개의 stack을 제공하고 있다.
- Servlet Stack = Servlet Api + Spring MVC + Spring Data
- Reactive Stack = Spring WebFlux + Spring Data's reactive repositories
두 경우다 Spring Security를 사용할 수 있다.
Reactive processing은 non-blocking, asynchronous 한 application을 만들수 있고, flow control을 할 수 있게 한다.
스프링의 Reactive Stack으로 만들어진 스프링 ecosystem에는 Spring WebFlux, Spring Data, Spring Cloud Gateway 등이 있다.
Servlet Web Applications
module : spring-boot-starter-web
Spring Web MVC Framework ( Spring MVC)
MVC = Model View Controller
Spring MVC에서는 @Controller / @RestController bean을 이용하여 HTTP 요청을 처리할수 있도록 한다.
@RestController
@RequestMapping("/test")
class MyController(privatet val testRepository: TestRepository){
@GetMapping("/{id}")
fun getId(@PathVariable id: Long): User {
return testRepository.findById(id).get()
}
}
Routing Configuration을 이용하여 핸들러를 사용할 수도 있다.
RouterFunction은 필요에 따라 여러개 만들 수 있다.
@Configuration(proxyBeanMethods = false)
class MyRouterConfiguration {
@Bean
fun routerFunction(testHandler: TestHandler): RouterFunction<ServerResonse> {
return RouterFunctions.route()
.GET("/{id}", accept(MediaType.APPLICATION_JSON), testHandler::getId)
.build()
}
}
Spring MVC에서 @Configuration을 이용하여 interceptor, formatter, view controller 등 다양한 부분을 사용자 설정 할 수 있다.
얘네는 @EnableWebMvc 어노테이션 없이도 가능하지만,
완전 다 바꾸고 싶으면 @Configuration + @EnableWebMvc 를 같이 사용해야 한다.
Reactive Web Applications
spring-boot-starter-webflux
Reactive processing은 non-blocking, asynchronous 한 application을 만들수 있고, flow control을 할 수 있게 한다.
스프링의 Reactive Stack으로 만들어진 스프링 ecosystem에는 Spring WebFlux, Spring Data, Spring Cloud Gateway 등이 있다.
참조
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#web.servlet
'개발 > 스프링 부트' 카테고리의 다른 글
request에 null이 왔을때 empty list 로 받고싶어요 (0) | 2023.09.17 |
---|---|
[Spring Boot] No capture groups allowed in the constraint regex 에러 (feat. 정규식의 capture group) (0) | 2023.09.16 |