3. DispatcherServlet의 원리

Dev StoryTeller·2021년 2월 18일
0

Spring 시리즈!

목록 보기
32/33

DispatcherServlet의 동작 원리에 대해 우선 알아보자.
기능들에 대해선 다음 편부터 알아볼 것이다.


0. 서블릿의 라이프 사이클?

우선 DispatcherServlet도 결국 Servlet이므로 Servlet의 라이프 사이클을 따른다.
따라서 이미 알겠지만, 서블릿의 라이프 사이클에 대해 간단히 짚고 넘어가자 : )

(출처 : https://victorydntmd.tistory.com/154)
서블릿 라이프 사이클을 잘 나타낸 것 같아 가져와보았다.

서블릿은 init과 service, destroy의 과정을 가지며, 각 과정의 설명은 다음과 같다.

  • init
    : 클라이언트로부터 첫번째 요청이거나, 아직 Servlet이 로딩되지 않았을 때 실행된다.

  • service
    : init을 거쳐 Servlet이 로딩되었을 때 실행되며, 실제 서블릿이 실행되는 과정이다.
    잘 아는 doPost, doGet 등 HTTP 요청을 처리한다.

  • destroy
    : Servlet이 다 사용되어 폐기될 때 실행된다.

1. Dispatcher의 라이프 사이클!

그렇다면 DispatcherServlet의 라이프 사이클은 어떻게 될까?
메소드는 다르지만, 결국 Servlet과 동일한 과정을 거친다.

위의 그림을 바탕으로 하나씩 차근차근히 알아보자!


0. initStrategies() - 기본 세팅

DispatcherServlet을 기본 세팅하는 과정이다.

복잡하게 뜯을 필요없이 딱 저게 DispatcherServlet의 기능 그 자체이다.

저 중에서 기본적으로 알아야 할 것들은 다음과 같다.

  • HandlerMappings
  • HandlerAdapter
  • HandlerExceptionResolvers
  • ViewResolvers

다음 편부터 하나씩 알아볼 것들이다.
지금은 그냥 뭔가 설정하는 것이 많구나하고 넘어가면 된다.
어디까지나 기본일 뿐이고, 필요에 따라 외의 기능들을 설정 가능하다 : )


1. doService() - 실행 준비

FrameworkServlet의 메소드를 오버라이드한 것이다.
HttpServlet의 service()와 기능은 동일하나, 독자적인 메소드이다.
즉, HttpServlet에 의존하지 않는다는 것!! 가장 중요하다!
(물론 FrameworkServlet 자체는 HttpServlet을 상속/구현하긴 한다.
하지만 DispatcherServlet은 service()가 아닌 독자적인 doService()를 사용한다는 것이 중요하다)

DispatcherServlet의 request 속성을 설정한다.
(Theme 관련, Locale 설정 등)
그리고 doDispatch()를 실행한다.


2. doDispatch() - 실제 실행

앞의 과정이 준비하는 과정이라면, 이 메서드가 진짜로 서블릿이 동작하는 부분이다.

굉장히 많은 부분이 있지만, handlerAdapter를 등록하고 이를 가지로 요청을 처리한다.
다음은 그 일부분을 캡쳐한 것이다.

자세한 사항은 Handler/Adapter를 다룰 때 알아보도록 하겠다.


3. destroy()

DispatcherServlet 또한 사용시에 Bean 등록되므로,
Spring에 의해 Bean이 폐기될 때 같이 폐기된다.
(정확히 어떻게 폐기되는지는 잘 모르겠다.)


이번 편에서는 간단한 DispatcherServlet의 동작 원리에 대해 알아보았다.
다음 편부터는

  • HandlerMappings
  • HandlerAdapter
  • HandlerExceptionResolvers
  • ViewResolvers

이 4가지 과정에 대해 찬찬히 알아볼 것이다.

profile
개발을 이야기하는 개발자입니다

0개의 댓글