본문 바로가기

Computer Science/Spring

[Spring] 스프링 MVC 프로젝트 로딩 구조

 

스프링 프로젝트 구동 시 관여하는 XML 은 web.xml, root-context.xml, servlet-context.xml 입니다. 이중 web.xml 은 Tomcat 구동 관련 설정이고, 나머지 두 파일은 스프링 관련 설정입니다.

 

프로젝트 구동은 web.xml 에서 시작합니다.

 

 

web.xml 파일 맨 위 <context-param> 에는 root-context.xml 의 경로가 설정되어 있고, <listener>에는 스프링 MVC의 ContextLoaderListener 가 등록되어 있습니다. ContextLoaderListener 는 해당 웹 애플리케이션 구동 시 같이 동작하므로 해당 프로젝트를 실행하면 로그를 먼저 출력하며 기록됩니다. ContextLoaderListener가 root-context.xml 을 처리하면 파일안에 있는 빈(bean) 설정들이 동작하게 됩니다.

 

root-context.xml 에 정의된 빈(bean)들은 스프링의 영역(context) 안에 생성되고, 객체들간의 의존성이 처리됩니다. 이후에는 스프링 MVC에서 사용하는 DispatcherServlet 이라는 서블릿과 관련된 설정이 동작하게 됩니다.

 

org.springframework.web.servlet.DispatcherServlet 클래스는 스프링 MVC의 구조에서 가장 핵심적인 역할을 하는 클래스입니다. 내부적으로 웹 관련 처리의 준비작업을 진행합니다. DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석합니다. 이 과정에서 등록된 빈(bean)들은 기존에 만들어진 빈들과 같이 연동하게 됩니다.

 

 

 

1.Dispatcher Servlet 

사용자의 Request 는 Front-Controller 인 DispatcherServlet 을 통해서 처리합니다. web.xml 파일을 보면 모든 Request를 DispatcherServlet 이 받도록 처리하고 있습니다.

2. HandlerMapping

 Request 처리를 담당하는 컨트롤러를 찾기 위해서 존재합니다. 개발자가 정해놓은 @RequestMapping 어노테이션이 적용된 것을 기준으로 판단하게 됩니다. 적절한 컨트롤러가 찾아지면 HandlerAdapter를 이용해서 해당 컨트롤러를 동작시킵니다.

3. Controller 

 Controller는 개발자가 작성하는 클래스로 실제 Request 를 처리하는 로직을 작성하게 됩니다. 이때 view에 전달해야하는 데이터는 주로 Model 이라는 객체에 담아서 전달합니다. Controller는 다양한 타입의 결과를 반환하는데 이에 대한 처리는 ViewResolver를 이용합니다.

4. ViewResolver

Controller가 반환하는 결과를 어떤 View를 통해서 처리하는 것이 좋인지 해석하는 역할입니다. 가장 흔하게 사용하는 설정은 servlet-context.xml에 정의된 InternalResourceViewResolver입니다.

5. View

 실제로 응답 보내야하는 데이터를 JSP 등을 이용해서 생성하는 역할을 하게 됩니다. 만들어진 응답은 DispatcherServlet을 통해서 전송됩니다.

반응형