본문 바로가기

Spring

Spring MVC 동작 방식 (DispatcherServlet)

728x90
반응형

❓ MVC모듈 

서블릿 기반 웹 어플리케이션에 사용할 수 있는 프레임워크로 객체 사이의 관심사를 분리할 수 있는 프레임워크이다.

 

컨트롤러 : 요청을 처리

검증기(Validator) : 검증을 수행

모델 : 데이터를 저장 


🔘기본적인 동작방식

client에서 요청이 드들어오면 맵핑되는 Controller를 호출한다. 컨트롤러에서 ModelAndView객체를 리턴하면 뷰이름에 해당하는 페이지를 리턴한다.

 

스프링 웹 MVC는 SimpleUrlHandlerMapping과 InternalResourceViewResolver 빈을 자동으로 감지해서 

요청을 처리하는 컨트롤러와 뷰를 찾는다.


🔘 DispatcherServlet

스프링 웹 MVC기반 어플리케이션에서는 요청을 DispatcherSetvlet이 가로챈다.

(요청을 적절한 컨트롤러에 전달하는 역할)

스프링 웹MVC가 요청을 처리하는 동안 벌어지는 활동 순서

- 요청을 DispatcherServlet이 가로챈다.

- DispatcherServlet은 HandlerMapping을 사용해 적절한 컨트롤러를 찾는다.

- DispatcherServlet은 컨트롤러가 반환하는 뷰이름을 ViewResolver에게 전달해서 찾는다.

- 실제뷰에 요청을 전달한다. 

 

☝ DispatcherServlet 내부 동작 방식

초기화시 DispatcherSetvlet은 자신에게 대응하는 웹어플리케이션 컨텍스트 파일을 로드하고 (*-.servlet.xml)

스프링 WebApplicationContext객체 인스턴스를 만든다.

(ApplicationContext 인터페이스의 하위 인터페이스로 웹어플리케이션에 특화된 기능을 제공한다.)

WebApplicationContext에 정의된 빈에는 request나 session등의 추가 스코프가 있다.

 

웹어플리케이션 모듈이 여러개가 있으면 모듈별로 DispatcherServlet을 정의할 수 있다.

DispatcherServlet은 인스턴스 사이에 공유되지 않는다. 

 

Handler

DispatcherServlet은 클라이언트의 요청을 처리할 컨트롤러를 찾기 위해 HandlerMappin을 사용한다.

웹요청을 처리하는 객체를 Handler라고 하며 특정 요청 경로를 처리해주는 핸들러를 찾아주는 객체를 HandlerMapping이라고 한다.

DispatcherServlet은 핸들러 객체의 타입과 상관없이 결과를 ModelAndView로 받는데 실제로 ModelAndView를 구현하지 않은 객체도 있다. 이때 핸들러 처리 결과를 ModelAndView로 변환해주는 객체가 필요한데 이 작업을 HandlerAdapter가 수행한다.

HandlerAdapter는 Mapping을 통해 찾은 Handler를 실행할 수 있다.

 

핸들러 객체 타입마다 HandlerMapping과 HandlerAdapter가 존재하는데 각각 스프링 빈으로 등록해야한다.

 

 

 

 

 

728x90
반응형