ParkJongin Blog

ParkJongin Blog

스프링 Dispatcher Servlet

서블릿, 디스패쳐서블릿

자바 서블릿 이란 자바를 이용해서 동적으로 웹페이지를 생성해주는 서버 프로그램이다. 톰캣과 같은 서블릿 컨테이너 아래에서 동작하게 된다. 디스패쳐서블릿은 스프링 프레임워크의 핵심역할을 하는 서블릿이다. 예전에 서블릿을 여러개 만들어서 요청을 처리했다고 하는데 나는 시작한지가 얼마 안되어서 잘 모르겠다. 이렇게 서블릿을 여러개 두고 처리하는 방식과 반대로 디스패쳐서블릿과 비슷하게 서블릿 하나를 두고 앞에서 모든 요청을 받고 요청에 따라 처리 로직을 실행하는 것이 있다. 프론트 컨트롤러 패턴이라고 불리는 것이다. 디스패쳐서블릿도 프론트 컨트롤러 패턴의 일종같다.

디스패쳐서블릿 처리 과정

디스패쳐서블릿의 클라이언트 요청 처리과정
  • Client에서 요청을 하면 디스패쳐서블릿에서 요청을 받는다.(web.xml에 servlet-mapping을 통해 디스패쳐서블릿이 요청받을 URL패턴을 정의한다.)
  • 디스패쳐서블릿은 핸들러 매핑을 통해 어떤 컨트롤러에서 요청을 처리할 것인지를 결정한다. 디스패쳐서블릿은 핸들러 매핑을 통해 컨트롤러 요청을 처리할 때 컨트롤러 호출방법이 컨트롤러 타입에 따라 다르기 때문에 어떤 컨트롤러를 호출해야 할지 모른다. 따라서 중간에 핸들러 어댑터를 두어 적합한 어댑터를 가져다가 호출한다. @RequestMapping@Controller 어노태이션을 적용할 경우 DefaultAnnotationHandlerMapping에 의해 핸들러가 결정되고, 그에 대응되는 AnnotationMethodHandlerAdapter에 의해 호출이 일어난다.
  • 컨트롤러에서 처리된 결과를 뷰로 보여줘야한다. 결과를 디스패쳐 서블릿이 가져간 후 View Resolver를 통해 어떤 뷰에 보여줄지 결정하게 된다. 컨트롤러가 리턴한 뷰 이름을 참고해서 뷰 오브젝트를 찾아주며, 뷰 오브젝트의 종류는 다양하다. 뷰 오브젝트를 찾아서 결과를 출력하면 이를 다시 디스패쳐서블릿에 보내고 디스패쳐서블릿은 결과를 다시 요청받은 클라이언트에 돌려준다.