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가지 방법을 고안했다.
- 정적 자원에 대한 요청과 애플리케이션에 대한 요청을 분리
- 애플리케이션에 대한 요청을 탐색하고 없으면 정적 자원에 대한 요청으로 처리
'Spring' 카테고리의 다른 글
Springboot + react 조합의 프로젝트 생성하기 (0) | 2022.08.27 |
---|---|
Spring - @ResponseBody 사용원리 (0) | 2022.06.23 |
[Spring] - JavaMailSender 라이브러리만으로는 발송 실패에 대한 처리를 할 수 없다. (0) | 2022.04.14 |
Mybatis를 왜사용하는걸까? Mybatis 장단점 정리 (0) | 2022.04.14 |
Spring - 컨트롤러에 POST mapping url이 정확한데도 404 에러가 뜨는 이유 - Java Reflection (0) | 2022.02.23 |