[Spring] 디스패처 서블릿(Dispatcher Servlet)이란?

프론트 컨트롤러(Front Controller)

프론트 컨트롤러(front controller)
[그림 1] 프론트 컨트롤러

 

디스패처 서블릿에 대해 알기 위해선 프론트 컨트롤러(Front Controller)에 대해 알아야 한다. 

 

프론트 컨트롤러는 말 그대로 모든 컨트롤러 앞에 있는 컨트롤러이다. 클라이언트의 모든 요청을 앞에서 받고 해당 요청을 처리할 적절한 컨트롤러를 결정한다. 

 

예를 들어 사용자가 로그인을 하려고 하면 해당 요청을 프론트 컨트롤러가 받아 로그인 컨트롤러에게 넘길 것이다.

만약 사용자가 구매 요청을 보낸다면 프론트 컨트롤러는 구매 컨트롤러를 호출할 것이다.

 

 

프론트 컨트롤러의 필요성

프론트 컨트롤러를 사용하지 않고 클라이언트의 요청을 일일히 적절한 컨트롤러에 매핑시켜놓으면 어떨까?

 

이것은 매우 비효율적이다. 웹 서비스를 구현하다보면 필연적으로 공통 기능이 필요하기 마련이다.

예를 들어 보안을 위한 검증이나 로깅을 위한 기능을 매 요청마다 실행해야 한다면 어떨까?

 

비효율적인 공통 기능
[그림 2] 비효율적인 공통 기능의 호출

 

 

위와 같이 클라이언트의 매 요청마다 공통 기능을 호출해야 할 것이다. 이것은 코드의 중복을 야기한다.

 

프론트 컨트롤러의 필요성
[그림 3] 프론트 컨트롤러의 필요성

 

그러나 프론트 컨트롤러를 도입하면 위와 같이 공통 기능의 호출을 프론트 컨트롤러 전에 한 번만 호출하도록 구현할 수 있다.

 

이러한 프론트 컨트롤러는 개발자가 직접 구현할 수도 있지만, 이미 대단한 개발자들이 개발해놓은 프론트 컨트롤러가 존재한다. 그것이 바로 디스패처 서블릿이다.

 

디스패처 서블릿(Dispatcher Servlet)이란?

디스패처 서블릿은 스프링에서 제공하는 프론트 컨트롤러이다.

디스패처 서블릿은 클라이언트의 모든 HTTP 요청을 받아 적절한 컨트롤러에게 전달한다. 

 

디스패처 서블릿 동작 과정
[그림 4] 디스패처 서블릿의 동작 과정 (출처 : 참고[3])

 

 

디스패처 서블릿의 동작 과정을 간략히 설명하자면 다음과 같다.

 

  1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회
  2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
  3. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
  4. 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.
  5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 요청을 처리하고 반환하는 정보를 ModelAndView로 변환해서 반환한다.
  6. viewResolver 호출 : viewResolver를 찾고 실행한다.
  7. View반환 : viewResolver는 View의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 View 객체를 반환한다.
  8. View 렌더링 : View를 통해서 View를 렌더링한다.

 

참고) 

 

[Spring] Spring MVC Framework란? Spring MVC 구조, DispatcherServlet, 핸들러 매핑, 핸들러 어댑터

Spring MVC Framework란? MVC는 Model-View-Controller의 약자로 하나의 디자인 패턴을 뜻한다. Spring MVC에 대해 이해하려면 Model, View, Controller에 대한 이해가 필수이니 해당 내용에 대해 잘 모른다면 다음을 참

code-lab1.tistory.com

 

 


참고

 

[1] 스프링 공식문서: https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet.html#page-title

[2] geeksforgeeks: https://www.geeksforgeeks.org/what-is-dispatcher-servlet-in-spring/

[3] 인프런 김영한 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

반응형

댓글

Designed by JB FACTORY