Dispatcher Servlet 파해치기!

mirageoasis·2024년 9월 30일
0

좌충우돌 스프링

목록 보기
4/4

디스패처 서블릿이란?

서블릿이란?

자바를 사용해서 웹을 만들기 위한 기술. 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다.

스프링에서 Dispatcher Servlet이란?

스프링에서 Dispatcher Servlet이란 스프링의 프론트 컨트롤러로써 모든 요청을 앞에서 받아서 해당하는 컨트롤러에 넘겨주는 역할을 한다. 기존의 서블릿에서는 모든 컨트롤러가 서블릿을 상속하고 Mapping을 등록하는 방식으로 사용하였으나 스프링이 나오면서 그럴 필요 없이 컨트롤러 클래스 상속이나 어노테이션을 붙이기만 하면 등록할 수 있다.

실행순서는 다음과 같다.

  1. 유저가 요청을 보낸다.
  2. Dispatcher ServletHandler Mapping을 통해 url에 해당하는 Handler Adapter를 찾는다.
  3. 해당하는 Handler Adapter를 실행한다.(내부에서는 핸들러 실행)
  4. 핸들러에서 컨트롤러를 실행한다.
  5. 비즈니스 로직 처리~
  6. 결과를 받아서(RestController기준) Handler Adapter에게 돌려준다.
  7. 결과 값을 Dispatcher Servlet에 돌려준다.
  8. 결과 값을 유저에게 반환한다.

내부 구조

코드를 보면서 내부 구조를 따라가 보도록 하겠다.

DispatcherServlet

안에서 doDispatch를 실행.

맞는 mappedHandler를 찾아서 HandlerAdapter를 받아온다.

핸들러를 실행하면 결과를 보여주는 부분이다.

@RestController에서 사용하는 RequestMappingHandlerAdapter (AbstractHandlerMethodAdapter를 상속)같은 경우 함수를 찾아서 invokeHandlerMethod에서 메서드를 실행하고 결과를 반환한다.

그리고 이 안에서

RequestMappingHandlerAdapter

이렇게 invokeHandlerMethod에서 자신에게 설정된 ArgumentResolver도 설정해준다.

invocableMethod.invokeAndHandle(webRequest, mavContainer, new Object[0]);를 실행하면서 적용했던 ArgumentResolver가 내부에서 실행된다...(여기부터는 생략)

출처

서블릿이란?
Dispatcher Servlet
대략적인 구조
HandlerAdapter

0개의 댓글