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>

동작 원리 요약

  1. 사용자가 웹 브라우저에서 /hello 요청을 보냄
  2. 이 요청은 / 로 매핑된 DispatcherServlet 으로 들어옴
  3. DispatcherServlet 은 HandlerMapping 을 통해 적절한 Controller 를 찾음
  4. 해당 Controller 가 요청을 처리하고 ModelAndView 객체를 반환함
  5. 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 컨트롤러가 동작한다.