본문 바로가기
to Developer/Spring

Dispatcher Servlet

by EH헌 2024. 1. 26.

Dispatcher Servlet

디스패처 서블릿이란 서블릿 컨테이너의 가장 앞단에서 HTTP 프로토콜로 들어오는 모든 요청을 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러.


프론트 컨트롤러

프론트 컨트롤러(Front Controller)란 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러.
프론트 컨트롤러가 도입되기 전에는 각 컨트롤러마다 공통 로직을 복붙 형식으로 다시 작성하여 사용했지만, 프론트 컨트롤러가 도입된 이후에는 공통의 로직에 대한 처리가 가능해졌다.


Spring MVC에서의 Dispatcher Servlet 흐름

  1. 처음 클라이언트에서 요청이 오면 디스패처 서블릿이 해당 요청을 받는다.
  2. Handler Mapping을 통해 요청에 알맞은 컨트롤러를 찾아낸다.
  3. 찾아낸 컨트롤러를 Handler Adapter를 통해 해당 컨트롤러의 메서드를 실행시킨다.
  4. 컨트롤러는 요청을 처리한 뒤 처리한 결과와 해당 뷰 정보(ModelAndView)를 다시 디스패처 서블릿에게 전달한다.
  5. 받은 정보로 디스패처 서블릿은 View Resolver를 통해 View 파일을 찾는다.

 

장점

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


정적 자원(Static Resources)의 처리

Dispatcher Servlet이 모든 요청을 처리하다보니 이미지나 HTML/CSS/JavaScript 등과 같은 정적 파일에 대한 요청마저 모두 가로채는 까닭에
Dispatcher Servlet이 요청을 처리할 컨트롤러를 먼저 찾고, 요청에 대한 컨트롤러를 찾을 수 없는 경우에, 2차적으로 설정된 자원(Resource) 경로를 탐색하여 자원을 탐색하여 영역을 분리하면 효율적인 리소스 관리를 지원할 뿐 아니라 추후에 확장을 용이하게 해준다.


자료 참고
[참고 1] [참고 2]

'to Developer > Spring' 카테고리의 다른 글

Ajax  (0) 2024.02.14
WAS, Servlet  (0) 2024.02.01
Spring Container, Bean  (0) 2024.01.30
Spring Framework  (1) 2024.01.29
MVC 패턴  (0) 2024.01.26