Spring Web MVC의 Dispatcher Servlet의 동작 원리

김멉덥·2022년 10월 9일
2

기술면접 공부

목록 보기
5/8
post-thumbnail

Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요.

Backend-Interview-Question

Dispatcher Servlet이란 ?

  • Dispatcher Servlet에 있는 dispatch는 "보내다"라는 뜻을 가진다.
  • 보내다 라는 의미를 포함하고 있는 Dispatcher Servlet 은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 보내주는 Front Controller 이다.
    • Front Controller 는 주로 서블릿 컨테이너의 제일 앞단에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러 ( MVC 구조에서 함께 사용되는 디자인 패턴 )
  • 즉, Dispatcher ServletFront Controller로서 클라이언트로 부터 어떠한 요청이 오게 되면 모든 요청을 자신이 먼저 받게 되고, 이러한 요청들을 세부 컨트롤러에게 전달하는 역할 !
  • 한마디로 Dispatcher Servlet은 해당 어플리케이션으로 들어오는 모든 요청을 핸들링 해주기 때문에, 우리는 컨트롤러를 구현해두기만 하면 Dispatcher Servlet가 알아서 적합한 컨트롤러로 위임을 해주는 구조가 된다.

Dispatcher Servlet의 동작 과정

  1. 클라이언트의 요청을 Dispatcher Servlet에 전달
  2. 요청한 url에 맞는 controller 검색하여 Handler Mapping에 전달
  3. HandlerMapping에서 해당 controller에 처리 요청
  4. controller에서 처리 결과를 Handler Adapter에서 ModelAndView 객체로 변환하여 Dispatcher Servlet에 전달
  5. Dispatcher Servlet에서 전달받은 ModelAndView 객체를 이용하여 매핑되는 View를 검색
  6. viewResolver에서 처리 결과를 view에 전달
  7. 처리결과가 포함된 viewDispatcher Servlet에 전달
  8. Dispatcher Servlet에서 최종 응답 결과를 클라이언트에게 반환

Dispatcher Servlet의 동작 원리

  • 우선 가장 기본적으로 servlet이 호출되면 아래와 같이 doService() 메서드가 호출됨
  • doService()의 코드는 맨 아래에서 doDispatch() 메서드가 호출됨
    → 이제 실제로 dispatch(보내다~!)를 실행하는 과정이 진행됨
    https://blog.kakaocdn.net/dn/NDpIg/btrj7Rwdv8k/PbRUk5x2N8RGBwt8gO1ojk/img.png

1. 핸들러 조회, 핸들러 어댑터 조회

  • doDispatch()에서는 클라이언트의 요청에 해당하는 핸들러를 조회하고(getHandler()),
    해당 핸들러를 받기 위한 어댑터를 조회(getHandlerAdapter())
  • (과정에서의 2,3,4 번 진행을 위한 단계)
    https://blog.kakaocdn.net/dn/1AlsS/btrj7RJJJwV/Vj0eYbKMXDkXRjcVxKTMV0/img.png

2. 위에서 찾은 핸들러 어댑터의 handle() 메서드를 호출

  • 이를 통해 ModelAndView를 반환
  • 그리고 아래에서 processDispatchResult() 메서드를 호출
  • (과정에서의 2,3,4 번 진행)
    https://blog.kakaocdn.net/dn/0fqCl/btrj885xKDP/s9TIoi1dasy65yILrJzvx1/img.png

3. 뷰 렌더링 호출

  • processDispatchResult() 메서드는 안에서 render() 메서드를 또 다시 호출
  • (과정에서의 5,6,7,8 번 진행을 위한 단계)
    https://blog.kakaocdn.net/dn/HGwlB/btrj87Mkmez/ZXZLKyDXQo6eCeLsxMtk4K/img.png

4. 뷰 렌더링

  • render() 메서드 안에서는 뷰 리졸버(viewResolver)를 통해 view를 찾고, 해당 view를 반환받음
  • 마지막으로 뷰를 실제로 렌더링 → 전달
  • (과정에서의 5,6,7,8 번 진행)
    https://blog.kakaocdn.net/dn/QZtg0/btrj2AiEFZy/5Ldj2sSOMMRsMsx96FFVf1/img.png

이렇게 코드들을 따라가보면 결국 위 과정에 따른 순서대로 Dispatcher Servlet이 동작하는 것을 알 수 있다 !

참고 자료

[스프링/Spring] 스프링 MVC? DispatcherServlet 이해하기
Spring MVC - DispatcherServlet 동작 원리
[Spring] Dispatcher-Servlet(디스패처 서블릿)이란? 디스패처 서블릿의 개념과 동작 과정
[Spring] MVC DispatcherServlet 동작 원리

profile
데굴데굴

0개의 댓글