Spring - Dispathcher-Servlet 개념

Dispathcher-Servlet이란?

  dispatch는 "보내다" 라는 뜻을 가진 단어인데 

Servlet에서 Dispatcher Servlet이라는 프론트 컨트롤러(Front Controller)가 존재한다.

 

(#프론트 컨트롤러란? : 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모튼 요청을 받아서 처리해주는 컨트롤러로써 MVC 구조에서 함께 사용되는 디자인 패턴)

 

즉  HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 공통적인 작업을 먼저 처리해준 뒤

매핑된 컨트롤러에 보내주는 컨트롤러를 Dispatcher-Servlet이라고 한다.

 

 

[ DisPatcher-Servlet의 장점 ]

  Spring MVC는 DispatcherServlet이 등장함에 따라 Web.xml의 역할을 상당히 축소해주었다.

과거에는 모든 서블릿을 URL 매핑을 위해 web.xml에 모두 등록해주어야 했지만, dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고 공통 작업을 처리면서 상당히 편리하게 이용할 수 있게 되었다.  결국 개발자는 컨트롤러를 구현해두기만 하면 디스패처 서블릿이 알아서 적합한 컨트롤러로 위임을 해주는 구조가 되었다.

 

 

[ 정적 자원(Static Resources)의 처리 ]

  Dispatcher Servlet이 요청을 Controller로 넘겨주는 방식은 효율적으로 보이지만 Dispatcher Servlet이 모든 요청을 처리하다보니 이미지나 HTML/CSS/JavaScript 등과 같은 정적 파일에 대한 요청마저 모두 가로채는 까닭에 정적자원(Static Resources)을 불러오지 못하는 상황도 발생하는 문제가 있었다.

 

이러한 문제를 해결하기 위해 개발자들은 2가지 방법을 고안했다.

  1. 정적 자원에 대한 요청과 애플리케이션에 대한 요청을 분리
  2. 애플리케이션에 대한 요청을 탐색하고 없으면 정적 자원에 대한 요청으로 처리