Spring MVC 동작 원리 마무리

Spring Web MVC

백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글

Spring MVC 동작 원리 마무리

Spring MVC 또한 Servlet 기반이며 Servlet Container가 필요하다.

결국엔 (굉장히 복잡한) Servlet = DispatcherServlet

DispatcherServlet은 특정 타입에 해당하는 빈을 찾고 없으면 DispatcherServlet.properties에 정의된 기본전략을 사용한다.

스프링 부트를 사용하지 않는 스프링 MVC의 경우 서블릿을 등록하는 두가지 방법이 존재한다.

우선 서블릿을 등록하기에 앞서, 서블릿 컨테이너(e.q. 톰캣)에 등록한 웹 애플리케이션(WAR)에 DispatcherServlet을 등록한다.

그 후 두 가지 방법으로 서블릿을 등록할 수 있다.

  1. web.xml에 서블릿 등록

  2. WebApplicationInitailizer에 자바 코드로 서블릿 등록 (스프링 3.1+, 서블릿 3.0+)

스프링 부트의 경우

스프링 부트의 경우 자바 애플리케이션 내부에 Embbeded Tomcat이 내장되어있고 구동된다.

그리고 이 Embbeded TomcatDispatcherServlet을 등록한다.

스프링 부트는 DispatcherServlet의 기본전략에 포함된 여러 인터페이스 구현체를 빈으로 등록해놓는다.

때문에 우리는 스프링 부트의 주관에 따라 자동으로 설정된 빈들을 사용할 수 있다.

물론 DispatcherServlet에 기본적으로 등록된 빈들이 존재하긴 하지만 스프링 부트에서는 더욱 더 편리한 설정들을 미리 설정해놓는다.

단, 자동 설정이 반드시 좋은 것 만은 아니다. 가령 특수한 애플리케이션을 만들기 위해 설정 값들을 바꿔야하는데, 스프링 부트의 자동 설정 값과 충돌이 일어나는 경우가 있다고 한다.

그래서 간단한 API 서버 만드는 정도라면 스프링 부트를 사용해도 괜찮지만, 스프링의 설정 값들을 커스터마이징 하려면 Spring MVC만 사용하는 것이 더욱 편리할 수도 있다. (물론 더 어렵지만..)

Reference

인프런 백기선님의 스프링 Web MVC



© 2022. by minkuk

Powered by minkuk