본문 바로가기
컴퓨터/Spring

Spring Boot 의 요청-응답 순서 정리 | MVC 와 차이점 | DispatcherServlet 자동/수동 구성

by 버니케이 2024. 12. 21.
반응형

 

 

SpringBoot 도 SpringMVC 의 요청 - 응답과 똑같이 처리가 되는데
요청 처리 부분에서 차이점이 존재한다.

SpringBoot 와 SpringMVC 의 큰 차이점 중 하나는 '설정파일 구성 여부' 이다.
SpringMVC 는 개발자가 수동으로 구성하는 반면, 
SpringBoot 는 자동으로 구성된다.
요청-응답 과정도 마찬가지…

 

차이점

순서 SpringMVC SpringBoot
클라이언트가 요청을 보냄 - -
DispatcherServlet에 요청이 도착 xml  만들어서 요청 처리방법 정의


web.xml 파일에 DispatcherServlet을 정의하고, 별도의 XML 파일(예: dispatcher-servlet.xml)이나 Java 설정 클래스를 통해 요청 처리 방법을 구성

자동으로 (DispatcherServletAutoConfiguration  클래스)DispatcherServlet을 설정하고, 모든 요청을 이 서블릿으로 라우팅함




물론 @Bean으로 직접 커스터마이징이 가능
HandlerMapping을 사용하여 적절한 핸들러(컨트롤러)를 찾음 xml 파일을 통해 개발자가 수동으로 (HandlerMapping을 통해 ) 어떤 컨트롤러가 요청을 처리할지 결정 Spring Boot는 기본적으로 여러 HandlerMapping 구현체를 제공, 가장 적합한 핸들러를 알아서 찾음

 

 

Spring Boot의 DispatcherServlet 자동 설정

기본적으로는 다음과 같은 방식으로…

- DispatcherServlet 자동 등록: Spring Boot는 DispatcherServletAutoConfiguration 클래스를 통해 DispatcherServlet을 자동으로 등록
- 기본 경로 설정: 기본적으로 모든 경로(/*)에 대해 DispatcherServlet이 매핑
- 기본 설정: spring.mvc 네임스페이스를 통해 DispatcherServlet의 설정 조정

보통 application.properties 파일에서 이렇게 정의함

spring.mvc.servlet.path=/api
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

application.properties 또는 application.yml 파일을 통해 추가 설정을 할 수 있다.

 

 

 

커스터마이징 DispatcherServlet

Spring Boot에서 DispatcherServlet을 커스터마이징하려면, @Bean으로 직접 정의할 수 있다.

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;

@Configuration
public class WebConfig {

    @Bean
    public ServletRegistrationBean<DispatcherServlet> dispatcherServlet() {
        DispatcherServlet dispatcherServlet = new DispatcherServlet();
        ServletRegistrationBean<DispatcherServlet> registrationBean = new ServletRegistrationBean<>(dispatcherServlet, "/api/*");
        registrationBean.setName("dispatcherServlet");
        return registrationBean;
    }
}
반응형

댓글