Spring
DispatcherServlet 이란
개발하는지호
2025. 4. 4. 13:11
web.xml에 작성하는 Dispatcher는 Servlet 기반의 Java 웹 애플리케이션에서 매우 중요한 역할을 한다.
특히, Spring MVC 같은 프레임워크에서 DispatcherServlet 이 핵심 역할을 한다.
DispathcerServlet 개념
- DispathcerServlet은 Spring MVC의 프론트 컨트롤러(Front Controller) 이다.
- 모든 HTTP 요청을 중앙에서 받아서, 적절한 컨트롤러(Controller)에게 전달하고, 그 결과를 뷰로 연결하는 역할을 한다.
web.xml에서 DispatcherServlet 설정 예시
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
version="3.0">
<!-- DispatcherServlet 등록 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- DispatcherServlet URL 매핑 -->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
동작 원리 요약
- 사용자가 웹 브라우저에서 /hello 요청을 보냄
- 이 요청은 / 로 매핑된 DispatcherServlet 으로 들어옴
- DispatcherServlet 은 HandlerMapping 을 통해 적절한 Controller 를 찾음
- 해당 Controller 가 요청을 처리하고 ModelAndView 객체를 반환함
- DispatcherServlet 은 ViewResolver 를 통해 JSP 같은 뷰를 찾고 응답을 렌더링함
브라우저 요청: http://localhost:8080/hello
↓
DispatcherServlet (요청 수신)
↓
HandlerMapping → HelloController
↓
HelloController → "hello.jsp"
↓
ViewResolver → /WEB-INF/views/hello.jsp
↓
DispatcherServlet → JSP 렌더링 → 응답 반환
핵심 구성요소 정리
구성 요소 | 역할 |
DispatcherServlet | 프론트 컨트롤러, 요청 분재 |
HandlerMapping | 어떤 컨트롤러가 처리할지 결정 |
Controller | 요청 비즈니스 로직 처리 |
ViewResolver | 뷰 이름을 실제 JSP 파일 등으로 변환 |
View | 최종적으로 사용자에게 보여지는 화면 |
DispathcerServlet을 맵핑하지 않으면?
1. Spring MVC 동작 안 함
- @Controller, @RequestMapping 같은 Spring MVC 기능이 작동하지 않는다.
- 브라우저 요청이 Spring MVC로 전달되지 않기 때문에 해당 요청에 대한 처리가 안 되고, 404 오류가 난다.
2. 정적 자원만 응답 가능
- resources/static, resources/public 같은 경로에 있는 정적 파일(CSS, JS, 이미지 등)만 동작할 수 있고,
- /api/**, /home, /login 같은 사용자 정의 경로는 처리되지 않는다.
3. 서블릿 컨테이너는 기본 서블릿으로 처리
- 예: Tomcat에서 요청을 받긴 하지만 Spring이 아닌 기본 서블릿 처리 로직으로 넘어간다.
- 이는 원하는 동작이 아니다.
만약 Spring Boot를 쓰고 있다면?
- Spring Boot는 DispatcherServlet을 자동으로 등록하고 / 경로에 매핑해 준다.
- 따로 설정하지 않아도 Spring MVC 컨트롤러가 동작한다.