Dispatcher-Servlet이란

무심코·2022년 12월 6일
1

Spring

목록 보기
2/2

Dispatcher-Servlet?

Dispatcher-Servlet은 표현 계층(Presentation layer) 전면에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 중앙집중식으로 처리하는 프론트 컨트롤러(Front Controller)로 Spring MVC의 핵심 요소이다.

클라이언트로부터 어떤 요청이 들어오면 먼저 Servlet Container(예를 들어 톰켓)가 요청을 받는데 이때 공통 작업은 Dispatcher-Servlet에서 처리하고 이외의 작업은 세부 컨트롤러로 위임한다.

즉, Dispatcher-Servlet이 하는 일을 크게 다음과 같이 두가지로 정리할 수 있다.

  1. Servlet Container가 받은 요청에 대한 공통 작업 진행
  2. 공통 작업 이외의 작업을 세부 컨트롤러로 위임

Dispatcher-Servlet을 왜 사용할까?

과거에는 모든 servlet을 URL 매핑을 위해 web.xml에 모두 등록해주어야 했지만, Dispatcher-Servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고 공통 작업을 처리면서 servlet을 상당히 편리하게 이용할 수 있게 되었다.

즉 이제는 개발자가 컨트롤러를 구현해두기만 하면 디스패처 서블릿가 알아서 적합한 컨트롤러로 요청을 위임을 해주는 구조가 되었고 이는 기존의 번거롭던 web.xml의 역할을 축소시켜주었다.

Dispatcher-Servlet의 동작 흐름

  1. 클라이언트가 보낸 웹 요청(HttpServletRequest)를 Dispatcher-Servlet이 가장 먼저 받는다.

  2. LocaleResolver, ThemeResolver, MultipartResolver 인터페이스 구현체에서 웹 요청을 분석한다.

  3. HandlerMapping에 웹 요청을 위임한다.

  4. 분석한 요청 정보를 통해 요청을 처리할 Handler(Controller) 를 찾는다.

    • RequestMapping에서 분석한 요청 정보를 Key로 갖는 Value를 찾는다.
    • RequestMapping : @Controller로 작성된 모든 컨트롤러 빈을 파싱하여 만든 HashMap<요청 정보, 요청을 처리할 HandlerMathod 객체>
  5. 찾은 Handler를 실행할 핸들러 어댑터 탐색한다.

    • Dispatcher-Servlet은 컨트롤러로 요청을 직접 위임하는 것이 아니라 HandlerAdapter를 통해 컨트롤러로 요청을 위임한다.
    • 스프링은 HandlerAdapter라는 어댑터 인터페이스를 통해 어댑터 패턴을 적용함으로써 컨트롤러의 구현 방식(컨트롤러의 구현방식은 다양하다)에 상관없이 요청을 위임할 수 있다.
  6. HandlerAdapter를 통해 컨트롤러로 요청을 위임한다.

  7. 비지니스 로직 처리한다.

  8. Controller가 반환값을 반환한다.

  9. HandlerAdapter가 반환값을 처리한다.

    • HandlerAdapter는 컨트롤러로부터 받은 응답을 응답 처리기인 ReturnValueHandler가 후처리한 후에 디스패처 서블릿으로 돌려준다.
    • ResponseEntity를 반환시 HttpEntityMethodProcessor가 MessageConverter를 사용해 응답 객체를 직렬화하고 응답 상태(HttpStatus)를 설정한다.
    • View 이름을 반환시 ViewResolver를 통해 View를 반환한다.
  10. 처리한 반환값을 Dispatcher-Servlet으로 반환한다.

  11. 최종적으로 결과(HttpServletResponse)를 클라이언트에게 반환한다.

[ 출처 ]
[Spring] Dispatcher-Servlet(디스패처 서블릿)이란? 디스패처 서블릿의 개념과 동작 과정
DispatcherServlet - Part 1

profile
지나치지 않기 위하여

0개의 댓글