DispatcherServlet의 동작 원리에 대해 우선 알아보자.
기능들에 대해선 다음 편부터 알아볼 것이다.
우선 DispatcherServlet도 결국 Servlet이므로 Servlet의 라이프 사이클을 따른다.
따라서 이미 알겠지만, 서블릿의 라이프 사이클에 대해 간단히 짚고 넘어가자 : )
(출처 : https://victorydntmd.tistory.com/154)
서블릿 라이프 사이클을 잘 나타낸 것 같아 가져와보았다.
서블릿은 init과 service, destroy의 과정을 가지며, 각 과정의 설명은 다음과 같다.
- init
: 클라이언트로부터 첫번째 요청이거나, 아직 Servlet이 로딩되지 않았을 때 실행된다.
- service
: init을 거쳐 Servlet이 로딩되었을 때 실행되며, 실제 서블릿이 실행되는 과정이다.
잘 아는 doPost, doGet 등 HTTP 요청을 처리한다.
- destroy
: Servlet이 다 사용되어 폐기될 때 실행된다.
그렇다면 DispatcherServlet의 라이프 사이클은 어떻게 될까?
메소드는 다르지만, 결국 Servlet과 동일한 과정을 거친다.
위의 그림을 바탕으로 하나씩 차근차근히 알아보자!
DispatcherServlet을 기본 세팅하는 과정이다.
복잡하게 뜯을 필요없이 딱 저게 DispatcherServlet의 기능 그 자체이다.
저 중에서 기본적으로 알아야 할 것들은 다음과 같다.
- HandlerMappings
- HandlerAdapter
- HandlerExceptionResolvers
- ViewResolvers
다음 편부터 하나씩 알아볼 것들이다.
지금은 그냥 뭔가 설정하는 것이 많구나하고 넘어가면 된다.
어디까지나 기본일 뿐이고, 필요에 따라 외의 기능들을 설정 가능하다 : )
FrameworkServlet의 메소드를 오버라이드한 것이다.
HttpServlet의 service()와 기능은 동일하나, 독자적인 메소드이다.
즉, HttpServlet에 의존하지 않는다는 것!! 가장 중요하다!
(물론 FrameworkServlet 자체는 HttpServlet을 상속/구현하긴 한다.
하지만 DispatcherServlet은 service()가 아닌 독자적인 doService()를 사용한다는 것이 중요하다)
DispatcherServlet의 request 속성을 설정한다.
(Theme 관련, Locale 설정 등)
그리고 doDispatch()를 실행한다.
앞의 과정이 준비하는 과정이라면, 이 메서드가 진짜로 서블릿이 동작하는 부분이다.
굉장히 많은 부분이 있지만, handlerAdapter를 등록하고 이를 가지로 요청을 처리한다.
다음은 그 일부분을 캡쳐한 것이다.
자세한 사항은 Handler/Adapter를 다룰 때 알아보도록 하겠다.
DispatcherServlet 또한 사용시에 Bean 등록되므로,
Spring에 의해 Bean이 폐기될 때 같이 폐기된다.
(정확히 어떻게 폐기되는지는 잘 모르겠다.)
이번 편에서는 간단한 DispatcherServlet의 동작 원리에 대해 알아보았다.
다음 편부터는
- HandlerMappings
- HandlerAdapter
- HandlerExceptionResolvers
- ViewResolvers
이 4가지 과정에 대해 찬찬히 알아볼 것이다.