[Dispatcher Servlet(대스패처 서블릿) 이란?]
Dispatcher Servlet에서 Dispatch의 의미는 보내다, 급파하다 등의 의미를 갖고 있다.
이를 해석해보면 Dispatcher Servlet이 받은 요청을 어딘가로 빨리 보내는 Servlet이라고 할 수 있다.
모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller) 라고 정의할 수 있다.
Spring 이전에...
서블릿 컨테이너가 매핑할 서블릿을 확인하기 위해서 web.xml을 읽어서 매핑을 해준다.
접속을 하려는 경로는 여러개이며 서블릿 객체 하나는 하나의 경로만 담당하기에 매번 web.xml에 등록해주어야 하는 번거로움이 있었다.
프로세스의 요청마다 객체가 생성되는 문제점이 있었다.
[Dispatcher Servlet(디스패처 서블릿)의 장점]
Dispatcher Servlet 등장으로 web.xml의 역할을 상당히 축소시켜주었다.
Dispatcher Servlet이 해당 애플리케이션으로 들어오는 모든 요청을 핸들링 해주고 공통 작업을 처리하면서 편리하게 이용이 가능하게 되었다.
Dispatcher Servlet이 알아서 적합한 컨트롤러로 위임해주는 구조가 되었다.
[Dispatcher Servlet(디스패처 서블릿)의 동작과정]
초록색으로 되어 있는 부분들은 Spring Container(프로그램이 동작하는 동안 사용되는 자바 객체들을 프레임워크가 대신 관리)로부터 주입받아 사용하고 동작을 한다.
파랑색으로 되어 있는 부분만 개발자들이 구현을 하면 된다.
- 클라이언트의 요청을 Dispatcher Servlet이 받는다.
- 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러)를 조회하고 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
- 요청에 매핑되는 컨트롤러와 해당 메소드 등을 갖는 HandlerMethod 객체를 찾는다.
- HandlerMapping은 요청이 오면 Http Method, URI 등을 사용해 Key 객체인 요청 정보를 만들고, Value인 요청을 처리할 HandlerMethod를 찾아 컨트롤러 요청을 넘겨주기 전 처리해야하는 인터셉터등을 포함하기 위해 HandlerMethodExcutionChain으로 감싸서 반환한다.
- 핸들러 어댑터를 실행한다.
- 어댑터 인터페이스를 통해 어댑터 패턴을 적용함으로써 컨트롤러의 구현 방식에 상관없이 요청을 위임할 수 있다.
- 핸들러 어댑터가 실제 핸들러를 실행한다.
- 비지니스 로직을 처리한다.
- 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
- 뷰 이름을 뷰 리졸버에 전달한다.
- 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체를 반환한다.
- 모델을 주입하고 뷰를 통해서 뷰를 렌더링 한다.
Reference.
https://mangkyu.tistory.com/18
https://yadon079.github.io/2022/spring/spring-mvc-06
https://www.youtube.com/watch?v=calGCwG_B4Y
https://www.youtube.com/watch?v=2pBsXI01J6M
'Spring' 카테고리의 다른 글
[토비의 스프링 3.1 vol.1] 1장. 오브젝트와 의존관계(1) (2) | 2022.10.03 |
---|---|
[토비의 스프링 3.1 vol.1] 스프링이란? 스프링의 성공요인 (0) | 2022.09.27 |
@RequiredArgConstructor과 @AllArgConstructor의 차이점 (0) | 2022.06.18 |
[JPA]mappedBy reference an unknown target entity property (0) | 2022.03.16 |
com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Exception during pool initialization. (0) | 2022.03.13 |