본문 바로가기

개발/스프링 부트

[Spring Boot] Servlet Web Application - (1)

웹필터에 대해 보다보니 스프링 부트의 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://spring.io/reactive

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#web.servlet