스프링(부트아님ㅋ)

DispatcherServlet 정리

클라스하이 2023. 7. 16. 21:19

 아래 그림은 내가 인터넷 어디선가에서 줍줍한 그림이다. 근데 내가 스프링의 정석 강의를 들었을 때 그림보다 이 그림이 훨씬 나은거 같아서 이걸로 정리하려고 한다. 솔직히 따로 그리긴 귀찮다. 설명은 스프링의 정석 강의에서 들은 내용으로 이야기 할 것이다. 강의에선 코드레벨까지 직접 들어가서 설명을 해주는데 음... 좀 멍때린 감이 없지 않아 있다.(이게 뭐임??하는 느낌이었다.) 그것보단 클리어하게 면접용으로 적당하게 말할 수 있는 선으로 정리하려고 한다. 

 

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

 

 Dispatch는 말 그대로 "보내다"라는 뜻을 가지고 있다. 이러한 의미를 내포하여 Dispatcher-Servlet은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아서 적합한 컨트롤러에 위임해주는 일종의 프론트 컨트롤러라 정의한다. 프론트 컨트롤러란 요청마다 서블릿을 만들어서 쓰지 않고 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 요청을 받아서 처리해주는 컨트롤러라하며 MVC 구조에서 사용되는 디자인 패턴의 하나이다. Spring MVC에서의 Dispatcher-Servlet의 사용으로 이전에 서블릿 기반의 웹 모델에서 web.xml에 URL 매핑을 위해서 일일히 등록하는 과정을 Dispatcher-Servlet이 알아서 적절한 컨트롤러로 위임해주는 구조가 되었다. 

 

그리고 정적자원과 동적자원을 분할처리하여 요청할 컨트롤러를 먼저 찾고, 맞는 컨트롤러가 없을 땐 2차로 설정된 정적 자원을 탐색하여 처리한다. 이것은 효율적인 리소스 관리를 가능하게 한다. 

디스패쳐서블릿

[ 동작방식 ]

1~2). 클라이언트로부터 요청이 오면 Dispatcher-Servlet이 요청을 받아서 HandlerMapping이 URL과 메서드를 두개를 적절하게 매핑 시켜놓은 정보를 반환한다. 

3~4). HandlerAdaptor라는 친구가 중간에 끼어들어서 처리를 요청받고 그 요청을 적절한 컨트롤러에게 전달한다. ( 이후 비즈니스 로직처리~ ) 

5~6). 컨트롤러 실행결과를 다양한 형태로 리턴한다. ModelAndView, void, String, ResponseEntity 등 그리고 HandlerAdaptor가 그것들을 받아서 맞는 결과를 Dispatcher-Servlet에게 전해준다.

7). ViewResolver를 통해서 이름에 맞는 적절한 view를 검색하고 결과를 Dispatcher-Servlet에게 준다.

8). Dispatcher-Servlet이 해당 뷰를 호출한다.

9). JSP 파일이 응답결과를 만들고 그걸 클라이언트에게 응답한다. 

 

 

 그래서 최종적으로 정리하면 Dispatcher-Servlet은 요청/응답에 대한 전처리 및 컨트롤러 매핑 등 공통 로직을 수행해서 이를 통해 개발자는 비즈니스 로직에 집중한 구현이 가능하게 된다. 

 

참고자료 

각종 블로그

https://velog.io/@betterfuture4/Spring-Dispatcher-Servlet-%EC%A0%95%EB%A6%AC

 

[Spring] 📚 Dispatcher Servlet 이해하기

😎 Dispatcher Servlet의 A to Z

velog.io

https://mangkyu.tistory.com/18

 

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

이번에는 servlet의 심화 또는 대표주자인 dispatcher-servlet에 대해서 알아보도록 하겠습니다. 1. Dispatcher-Servlet(디스패처 서블릿)의 개념 [ Dispatcher-Servlet(디스패처 서블릿) 이란? ] 디스패처 서블릿의

mangkyu.tistory.com

남궁성의 스프링의 정석