Spring & Boot

DispatcherServlet 디스패처서블릿

린예라 2024. 11. 20. 21:28

 

DispatcherServlet 이란?

Spring MVC의 핵심 구성요소로, 프론트 컨트롤러(Front Controller) 역할을 한다. 이 Servlet은 모든 HTTP 요청을 중앙에서 제어하고, 요청에 따라 알맞은 핸들러(Controller)를 호출하여 응답하는, Spring MVC에서 Front부분과의 통신에서 핵심적인 역할을 한다.

 

쉽게 말하면 서버로 들어온 요청을 핸들러매핑에 가져다줘서 어떤 컨트롤러가 처리할지 찾아주게하고, 어떤 응답들을 내보내야하는지?에 대하여 응답을 생성하는 프론트부분쪽의 일을 통제하는 역할을 한다고 볼 수 있다.

출처: 스프링 공식문서 https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html?utm_source=chatgpt.com + 편집

 

 

 

DispatcherServlet은 역할의 분리와, 유연성을 위해 2개의 계층구조로 작동한다.

아래의 그림에서,

1.Servlet WebApplicationContext에서 찾고자 하는 빈을 먼저 조회하고,

2.해당빈이 없으면 Root WebApplicationContext으로 넘겨서 거기에서 조회하고,

3.만약 거기에도 없다면 NoSuchBeanDefinitionException 예외를 발생기키는 과정도 설명되어진다.

 

출처: 스프링 공식문서 https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet/context-hierarchy.html

 

  • Servlet WebApplicationContext
    • DispatcherServlet 전용 컨텍스트
    • 이 컨텍스트에는 요청 처리에 필요한 컨트롤러, 뷰 리졸버, 핸들러 매핑과 같은 웹 관련 빈(web-related beans)이 등록

 

  • Root WebApplicationContext
    • 애플리케이션 전체에서 공유되는 글로벌 컨텍스트
    • 여러 DispatcherServlet(또는 다른 Servlet)이 공유할 수 있는 공통 인프라 빈(예: 데이터소스, 비즈니스 서비스)을 포함
    • DispatcherServlet의 부모 컨텍스트 역할, 필요에 따라 참조하는 상위 계층 컨텍스트

 

DispatcherServlet과 컨텍스트의 동작 흐름

  1. 애플리케이션이 시작되면 Root WebApplicationContext가 먼저 로드된다.
    • 루트 컨텍스트는 애플리케이션 전체에서 공통적으로 사용되는 빈(서비스, 데이터소스 등)을 초기화 한다.
  2. DispatcherServlet이 초기화되면서 Servlet WebApplicationContext가 생성된다.
    • DispatcherServlet은 Root WebApplicationContext를 부모로 참조하고, 자신의 Servlet WebApplicationContext에서 웹 요청 처리와 관련된 빈을 관리한다.
    • Servlet WebApplicationContext는 부모 컨텍스트(Root)에서 정의된 빈을 상속받을 수 있다.
  3. DispatcherServlet은 요청을 처리할 때, 자신의 Servlet WebApplicationContext를 사용하여 적합한 컨트롤러와 뷰를 찾고 응답을 생성한다.