Spring

Spring 프레임워크에서 DispatcherServlet의 기본 역할

초코너무조코 2025. 2. 20. 12:42
728x90

Spring 프레임워크에서 DispatcherServlet은 MVC 패턴에서 중앙 컨트롤러 역할을 하는 중요한 구성 요소입니다. 사용자의 요청을 적절한 핸들러(Controller)로 전달하고, 응답을 생성하는 과정에서 다양한 컴포넌트들과 협력합니다. 이 글에서는 DispatcherServlet의 기본 역할과 동작 방식에 대해 정리해 보겠습니다.

1. DispatcherServlet이란?

Spring에서 제공하는 DispatcherServlet은 Front Controller 패턴을 따르는 서블릿으로, 모든 HTTP 요청을 받아 적절한 핸들러로 위임하는 역할을 합니다. 이를 통해 요청 처리 로직을 일관되게 관리할 수 있습니다.

Spring MVC 구조에서 DispatcherServlet의 주요 역할은 다음과 같습니다.

  • 요청을 받아 적절한 컨트롤러로 전달
  • 인터셉터, 필터 등의 전처리 작업 수행
  • 컨트롤러의 실행 결과를 바탕으로 적절한 뷰를 찾고 응답 반환

2. DispatcherServlet의 동작 과정

DispatcherServlet의 동작 과정은 다음과 같은 흐름을 따릅니다.

  1. 사용자의 HTTP 요청이 DispatcherServlet으로 전달됨
    •   웹 애플리케이션에서 특정 URL 패턴을 DispatcherServlet에 매핑하면, 모든 요청이 DispatcherServlet을 거쳐 처리됩니다.
  2. HandlerMapping을 통해 컨트롤러 검색
    •   DispatcherServlet은 HandlerMapping을 사용하여 요청을 처리할 적절한 핸들러(컨트롤러)를 찾습니다.
  3. HandlerAdapter를 통해 핸들러 실행
    •   HandlerAdapter는 컨트롤러가 실행될 수 있도록 도와주는 역할을 합니다. 다양한 컨트롤러 유형을 지원하기 위해 존재합니다.
  4. 컨트롤러(Controller) 실행 및 Model 반환
    •   컨트롤러는 요청을 처리한 후 ModelAndView 객체를 반환합니다. 여기에는 응답 데이터(Model)와 뷰 이름(View)이 포함됩니다.
  5. ViewResolver를 통해 View 선택
    •   ViewResolver는 ModelAndView에 지정된 뷰 이름을 기반으로 실제 뷰(예: JSP, Thymeleaf 템플릿)를 결정합니다.
  6. View 렌더링 및 응답 반환
    •   선택된 뷰가 데이터를 바탕으로 최종 HTML을 생성하고, 클라이언트에게 응답을 반환합니다.

3. DispatcherServlet의 주요 컴포넌트

DispatcherServlet이 요청을 처리하는 과정에서 사용하는 주요 컴포넌트들은 다음과 같습니다.

1) HandlerMapping

  •   요청 URL과 매핑된 컨트롤러를 찾는 역할을 합니다.
  •   예: @RequestMapping("/home")을 통해 특정 URL을 컨트롤러에 연결함.

2) HandlerAdapter

  •   컨트롤러를 실행할 수 있도록 도와주는 어댑터 역할을 합니다.
  •   다양한 컨트롤러 유형을 지원하기 위해 필요합니다.

3) ViewResolver

  •   컨트롤러에서 반환한 뷰 이름을 실제 뷰 파일로 변환하는 역할을 합니다.
  •   예: InternalResourceViewResolver를 사용하면 "home" → /WEB-INF/views/home.jsp로 변환됨.

4) ModelAndView

  •   컨트롤러의 실행 결과를 담는 객체로, 모델 데이터와 뷰 정보를 포함합니다.

4. 요청 및 응답 객체 관리

1) 요청(HttpServletRequest) 처리

  •   DispatcherServlet은 클라이언트의 HTTP 요청을 받아 내부적으로 적절한 핸들러(컨트롤러)로 전달합니다.
  •   HandlerMapping을 사용해 해당 요청을 처리할 컨트롤러를 찾고, HandlerAdapter를 이용해 컨트롤러를 실행합니다.
  •   인터셉터나 필터를 활용하여 전처리 및 후처리 작업도 수행할 수 있습니다.

2) 응답(HttpServletResponse) 처리

  •   컨트롤러에서 반환한 데이터를 기반으로 ViewResolver를 통해 적절한 뷰를 선택합니다.
  •   선택된 뷰는 데이터를 활용하여 HTML, JSON 등의 형식으로 응답을 생성합니다.
  •   HttpServletResponse 객체를 직접 수정하거나, ResponseEntity를 이용해 상태 코드와 헤더를 커스텀할 수도 있습니다.

5. 컨트롤러가 반환한 모델과 뷰 처리

1) ModelAndView 객체 처리

  •   컨트롤러가 실행된 후 ModelAndView 객체를 반환합니다.
  •   이 객체는 모델(데이터)과 뷰(렌더링할 화면 정보)를 포함합니다.

2) ViewResolver를 통한 뷰 선택

  •   DispatcherServlet은 ViewResolver를 사용하여 컨트롤러가 반환한 뷰 이름을 실제 뷰 파일로 변환합니다.
  •   예를 들어, "home"이라는 뷰 이름이 반환되면 InternalResourceViewResolver는 이를 /WEB-INF/views/home.jsp로 매핑합니다.

3) 모델 데이터를 뷰에 전달 및 렌더링

  •   변환된 뷰는 모델 데이터를 활용하여 최종 HTML 또는 JSON 등의 응답을 생성합니다.
  •   최종적으로 클라이언트에게 응답을 반환합니다.

6. DispatcherServlet 설정 방법

Spring Boot를 사용하면 DispatcherServlet이 자동으로 설정되지만, XML 기반 설정도 가능합니다.

(1) Java 기반 설정 (Spring Boot 사용 시)

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

위 코드만으로도 DispatcherServlet이 자동으로 설정됩니다.

(2) XML 기반 설정 (Spring MVC)

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

이렇게 설정하면 모든 요청이 DispatcherServlet을 통해 처리됩니다.

7. 결론

Spring의 DispatcherServlet은 요청과 응답을 처리하는 핵심 역할을 하며, 여러 컴포넌트들과 협력하여 MVC 패턴을 구현합니다. 이를 통해 코드의 유지보수성과 확장성을 높일 수 있습니다. Spring MVC를 이해하기 위해서는 DispatcherServlet의 동작 원리를 확실히 익히는 것이 중요합니다.

728x90