[Spring] DispatcherServlet 및 Spring MVC의 구동 순서

p1atin0uss·2022년 3월 21일

Spring

목록 보기
2/4

💡 개요

이번 포스트에서 DispatcherServlet의 역할 및 동작 과정을 살펴보고, 이러한 동작과정들이 원할히 수행되도록 하는 설정파일들의 코드를 분석해보며 Spring에 사용되는 요소를 알아보고자 한다.




📌 Spring에서 DispatcherServlet

Spring MVC Framework에서 DispatcherServlet은 모든 HTTP 요청과 응답을 처리하는 Front Controller이다. Spring Container(Controller의 lifecycle 관리)를 생성하고, HttpServlet을 상속하고 있다.
(DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet)


설명에 앞서 Spring MVC Framework에서 사용되는 요소를 몇가지 살펴보자.

  • HandlerMapping : 요청 URL에 해당하는 Controller 정보를 저장하는 table을 가진다.
  • ViewResolver : Controller가 반환한 View 이름에 prefix, suffix를 적용하여 View를 반환한다. prefix 및 suffix는 servlet-context.xml에서 가져온다.
servlet-context.xml의 일부분 (prefix, suffix 설정)


아래 그림은 HTTP 요청이 왔을 때, DispatcherServlet의 역할을 나타낸 그림이다.
이후의 설명을 보게되면 DispatcherServlet은 Spring MVC에서 핵심요소임을 알 수 있을 것이다.

출처 : terasolunaorg.github.io
  1. 클라이언트로부터 들어온 Request는 DispatcherServlet에게 전달된다.

  2. DispatcherServlet은 적절한 Controller를 선택하는 작업을 HandlerMapping에게 맡기고, HandlerMapping은 요청된 URL에 Mapping되는 Controller를 선택하고 다시 DispatcherServlet에게 선택된 Controller를 반환한다.

  3. DispatcherServlet은 Controller의 business logic을 수행하는 작업을 HandlerAdapter로 전달한다.

  4. HandlerAdapter는 Controller의 business logic 프로세스를 호출한다.

  5. Controller는 business logic을 실행하고 처리결과를 Model에 저장하며, View의 이름을 HandlerAdapter에 반환한다.

  6. DispatcherServlet은 5번에서 전달받은 이름을 가진 View를 찾는 작업을 ViewResolver에 전달하고, ViewResolver는 View 이름에 해당되는 jsp 파일의 이름과 경로(view)를 반환한다.

  7. DispatcherServlet은 반환된 View에 Rendering 프로세스를 전달한다.

  8. View는 모델 데이터를 Rendering하고 응답을 반환한다.



📌 web.xml 살펴보기

web.xml은 웹 애플리케이션의 설정을 위한 Deployment Descriptor(DD)를 말한다.
DD는 웹 애플리케이션 실행 시 메모리에 로드되며, 크게 클라이언트의 요청을 처리하는 DispatcherServlet, Servlet Context 단위가 아닌 Application Context 단위의 설정을 로드하는 ContextLoaderListener, 마지막으로 Filter로 구성된다.

<context-param>

모든 Servlet과 Filter가 공유하는 Root Spring Container를 정의한다.
contextConfigLocation이라는 파라미터 이름을 이용하여 ContextLoader가 호출할 수 있는 설정 파일을 여러가지 쓸 수 있다.
여기서 사용된 xml파일은 root-context.xml로 Root Context를 구성하며 주로 Service나 Repository, DB등 비즈니스 로직과 관련된 설정을 해준다.

<listener>

모든 Servlet 및 Filter가 공유하는 Spring Container를 생성한다.

<servlet>

사용자의 요청과 응답을 처리해주는 역할. Spring에서는 DispatcherServlet을 이용하며, Servlet의 요청에 관련된 객체를 정의하는 곳이 servlet-context.xml이 된다.

<servlet-mapping>

servlet 별칭을 통해 DispatcherServlet을 Mapping 해준다.
여기서 url-pattern을 '/'로 설정하였기에 최상위 경로로 들어온 모든 요청을 처리한다.




📌 Spring MVC의 구동과정



✔️ Tomcat(WAS)에 의해 web.xml이 로딩

✔️ web.xml에 등록되어 있는 ContextLoaderListener 생성

✔️ 생성된 ContextLoaderListener는 root-context.xml을 로딩

✔️ root-context.xml에 등록되어 있는 Spring Container가 구동

✔️ 최초 Client 요청에 의해 DispatcherServlet 생성

✔️ DispatcherServlet은 servlet-context.xml을 로딩




🏴 Reference

https://javannspring.tistory.com/231

profile
지식의 깊이는 곧 이해의 넓이 📚

0개의 댓글