목표
Spring을 공부하면서 DispatcherServlet이라는 단어는 정말 많이 접했지만, 단순히 클라이언트의 요청에 따라 알맞은 Controller로 안내하는 녀석으로만 알고있었지 정확히 어떤 방식으로 어떤 일을 하는지 이해하보려고 하지 않았던 것 같다. DispatcherServlet이 어떤 일을 하는지, 어떤 과정을 거치는지 등을 글로 정리하면서 이해하고 학습해보자.
DispatcherServlet
DispatcherServlet은 모든 HTTP 요청을 가장 먼저 받아 적합한 Controller로 전달하는 역할은 한다. Spring에서 HTTP 요청 및 응답을 처리하는 핵심 기술이라고 할 수 있다. DispatcherServlet은 FrontController라고도 불리는데 GRASP Pattern 중 외부입력에 대해 책임지는 Controller 원칙을 Servlet에 적용한 것으로 판단된다. 아래는 Spring에서 클라이언트 요청에 대한 라이프사이클이다.
DispatcherServlet 동작과정
DispatcherServlet이 동작하는 과정을 보면서 개념을 확실히 이해해보자. 먼저, 클라이언트에서 HTTP 요청을 보내면 DispatcherServlet은 클라이언트의 HTTP 요청을 분석한다. 그리고 분석한 데이터를 토대로 HandlerMapping을 통해 API Path가 일치하는 Controller를 검색한다.
클라이언트의 HTTP 요청에 적합한 Controller가 있다면 HandlerAdapter를 이용해 Controller의 비즈니스 로직의 실행 작업을 위임한다. 이후, HandlerAdapter가 Controller의 비즈니스로직 실행을 호출하고 결과를 반환받는다.
HandlerAdapter를 통해 결과를 반환받은 DispatcherServlet은 이를 클라이언트에 반환한다. Spring MVC 라면 ModelAndView를 반환해 ViewResolver를 호출할 것이고, Rest API를 이용한다면 ViewResolver를 거치지 않고 클라이언트에 응답을 전해준다.
DispatcherServlet이 없다면
DispatcherServlet이 없다면 아래와 같이 API Path에 따라 모든 HttpServlet을 상속받는 모든 클래스를 선언해줘야한다.
[ 참고자료 ]