기록과 정리

DispatcherServlet이란? 본문

IT/Spring

DispatcherServlet이란?

zepetto 2021. 1. 24. 10:47

Servlet

서블릿?

먼저 스펙이다. 자바EE에서 제공하는 웹 개발용 스펙 및 API 제공하며 그 중 핵심적 클래스로 HttpServlet이 있다.

기존에 사용했던 CGI ( Common Gateway Interface ) 보다 빠르며 보안, 이식성등 장점이 있다.

흔히 우리가 아는 서블릿 엔진 또는 서블릿 컨테이너(톰캣)에서 세션관리, 네트워크 서비스, MINE 기반 메세지 인/디코딩, 서블릿 생명주기 관리등을 해주는 스펙에 기반해서 관리를 할 줄 안다.

DispatcherServlet

 

모든 요청은 Front Controller 패턴을 의하면 컨트롤러를 통해 전달된다. 

이러한 요청들은 컨트롤러가 해당 요청을 처리할 핸들러들에게 분배(Dispatch)한다. 스프링은 이런 FrontController 역할을 하는 서블릿을 구현했는데 스프링 MVC 의 핵심적인 클래스인 Dispatcher Servlet이다.

동작 순서

1. Handler Mapping (인터페이스) 을 통해 핸들러를 찾아온다. 

 

2. Handler Adapter는 해당 핸들러를 실행한다. 

(1 과 2 strategy pattern 따른다.)

 

3. 실제로 Handler Adapter를 통해 실제 핸들러 메서드를 자바 Reflection을 통해 적용(invoke) 하게 된다.

(핸들러 메서드 객체 안에는 어떤 메서드를 호출해야하는지에 대한 정보가 들어있다.)

 

4. 결국 핸들러 코드를 실행함으로써 화면에 결과 값이 나오게 된다. (랜더링)

(여기서 결과값이 문자열이라면 @ResponseBody 를 통해 클라이언트에 컨버터를 사용해서 HTTP 본문에 담아 Json String 반환. )

 

*) 만약에 화면 주소값이라면 적절한 핸들러 ( ViewNameMethodRetrunValueHandler )를 Handler Mapping이 찾아주고 위에서 언급한 순서대로 return 값을 모델 객체에 담아 클라이언트에 전달하게 된다.  

 

또한 모델 객체를 리턴한 때 , custom 한 ViewResolver를 만들면서 뷰의 prefix (ex-/WEB-INF/ ) , suffix (ex-.jsp 확장자명) 을 생략하는 등 컨트롤이 가능하다.

'IT > Spring' 카테고리의 다른 글

InternalResourceViewResolver  (0) 2021.01.25
EnviromentCapable & @Profile & 프로퍼티  (0) 2021.01.25
Bean의 스코프  (0) 2021.01.24
@Component와 컴포넌트 스캔이란?  (0) 2021.01.22
@Autowire 어노테이션 정리  (0) 2021.01.22