개념


디스패처 서블릿(Dispatcher Servlet)은 스프링 프레임워크(Spring Framework)에서 가장 중요한 핵심 구성 요소 중 하나입니다. 스프링 MVC (Model-View-Controller) 패턴의 중심에 위치하며, 클라이언트의 요청을 적절한 컨트롤러로 전달하고, 처리된 결과를 뷰(View)로 전달하는 역할을 합니다. 간단히 말해, 디스패처 서블릿은 웹 애플리케이션에서 들어오는 모든 HTTP 요청을 받아서 해당 요청을 처리할 수 있는 컨트롤러로 전달하고, 결과를 생성하여 응답을 클라이언트에게 돌려주는 중앙 허브 역할을 합니다.

Dispatcher Servlet은 흔히 프론트 컨트롤러라고도 언급하는데 이는 디자인 패턴 중 하나이며, 하나의 진입점을 통해 모든 요청을 처리하는 방식을 의미합니다. 클라이언트의 요청을 받아서 해당 요청을 처리할 컨트롤러나 핸들러로 전달하며, 이를 통해 공통적인 처리 로직(예: 인증, 로깅 등)을 중앙 집중화할 수 있는 특징을 가지고 있습니다. DispatcherServlet은 이러한 프론트 컨트롤러 디자인 패턴으로 구현된 대표적인 예입니다.


특징


디스패처 서블릿의 주요 특징은 다음과 같습니다.

  • 중앙 관리
    모든 요청을 하나의 서블릿이 처리함으로써 애플리케이션의 요청 흐름을 중앙에서 관리할 수 있습니다.

  • 플러그 가능
    다양한 뷰 기술(JSP, Thymeleaf, FreeMarker 등)을 지원하며, 필요에 따라 쉽게 변경할 수 있습니다.

  • 유연성
    다양한 핸들러 매핑, 인터셉터, 뷰 리졸버 등을 통해 유연하게 확장할 수 있습니다.

  • 통합성
    스프링의 다른 모듈(예: 스프링 보안, 스프링 데이터 등)과의 긴밀한 통합을 지원합니다.


동작 과정


디스패처 서블릿의 동작 과정을 단계별로 설명하면 다음과 같습니다.

  1. HTTP 요청
    사용자가 웹 브라우저에서 URL을 입력하거나 링크를 클릭하여 웹 서버로 HTTP 요청을 보냅니다.

  2. 요청 전달
    웹 서버는 클라이언트로부터 HTTP 요청을 수신하고, 해당 요청을 처리하도록 서블릿 컨테이너로 전달합니다.

  3. 디스패처 서블릿으로 요청 전달
    서블릿 컨테이너는 웹 서버로부터 전달된 요청을 받아 스프링 애플리케이션의 디스패처 서블릿으로 전달합니다.

  4. 핸들러 매핑을 통해 컨트롤러 찾기
    디스패처 서블릿이 요청 URL과 매핑된 핸들러(컨트롤러)를 찾기 위해 핸들러 매핑(Handler Mapping)을 사용합니다.

  5. 핸들러 어댑터를 통해 컨트롤러 호출
    디스패처 서블릿이 찾은 컨트롤러를 호출하기 위해 적절한 핸들러 어댑터(Handler Adapter)를 사용하여 컨트롤러를 호출합니다.

  6. 컨트롤러가 요청 처리 및 모델 생성
    컨트롤러는 요청을 처리하고, 필요한 데이터를 모델(Model) 객체에 담아 반환합니다. 또한, 반환할 뷰의 논리적 이름도 함께 반환합니다.

  7. 뷰 리졸버를 통해 뷰 결정
    디스패처 서블릿이 뷰 리졸버(View Resolver)를 사용하여 컨트롤러가 반환한 논리적 뷰 이름을 실제 뷰(View)로 변환합니다.

  8. 뷰 렌더링
    뷰는 모델 데이터를 사용하여 최종 응답 페이지를 렌더링합니다.

  9. 응답 생성
    디스패처 서블릿이 렌더링된 뷰를 HTTP 응답으로 생성합니다.

  10. HTTP 응답 웹 서버로 보내기
    블릿 컨테이너는 생성된 HTTP 응답을 웹 서버로 보냅니다.

  11. HTTP 응답
    웹서버가 서블릿 컨테이너로부터 받은 HTTP 응답을 클라이언트로 전달하며, 최종적으로 사용자에게 응답 페이지가 표시됩니다.


아래 이미지는 위 내용을 도식화한 것입니다.

디스패처 서블릿 동작 과정

디스패처 서블릿 동작 과정


서블릿과의 차이


스프링 등장 전 사용되었던 서블릿이 스프링의 디스패처 서블릿과 어떤 차이점을 가지고 있는지 이해하는 것 또한 살펴볼 필요가 있습니다.
내용은 다음과 같습니다.

  • 역할

    일반 서블릿
    주로 클라이언트의 요청을 처리하고 응답을 생성하는 데 사용됩니다. 서블릿은 주로 HTTP 프로토콜을 직접 다루고, 로우 레벨의 요청 및 응답 처리를 담당합니다.

    디스패처 서블릿
    스프링 MVC의 중앙 컨트롤러 역할을 하며, 클라이언트의 요청을 적절한 컨트롤러에 분배하고, 처리 결과를 뷰로 전달하는 고수준의 역할을 합니다.

  • 구조

    일반 서블릿
    단일 책임을 갖고 직접 요청을 처리합니다.

    디스패처 서블릿
    여러 핸들러 매핑, 컨트롤러, 뷰 리졸버 등을 사용하여 요청을 분산 처리합니다.

  • 확장성

    일반 서블릿
    확장성이 제한적이며, 새로운 기능을 추가하려면 서블릿 코드를 직접 수정해야 합니다.

    디스패처 서블릿
    스프링의 다양한 컴포넌트와 쉽게 통합할 수 있어 확장성이 뛰어납니다.