이전글 : [Spring] Spring Web MVC (1)
이전 글의 내용과 위의 그림과 같이 spring MVC 가 구성되어있다.
여기서 DispatcherServlet, Handler Mapping, ViewResolver 는 Spring이 제공해준다.
우선 spring web application 작동원리를 살펴보며 하나씩 코드를 뜯어보는게 정리하는데 좋은 것 같다.
웹 프로젝트의 파일 구조를 보면 다음과 같다.
src/main/webapp/WEB-INF/web.xml 파일이 spring web application이 구동되면 처음으로 로드된다.
web.xml파일에서 DispatcherServlet 등록한다.
web.xml파일은 웹 애플리케이션 서버에 의해 순차적으로 읽혀진다.
처음 부분이 다음과 같다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
ContextLoaderListener 가 root-context.xml를 로드하면서 공통적으로 사용되는 최상위 Context를 생성한다.
보통 root-context.xml에는 웹과 직접적인 관련이 없는 설정값을을 작성해준다.
그러면 Service, DAO, Entity 부분들이 생성된다.
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup> <!-- 이 설정 때문에 초기화 될 수 있음 -->
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
그리고 그 아래에 DispatcherServlet를 등록한다.
servlet 태그와 servlet-mapping 태그는 한 세트라고 생각하면 되고, DispatcherServlet의 URL을 맵핑해준다.
이 과정에서 servlet-context.xml를 등록하는데, 해당 파일은 웹과 관련된 설정들을 담은 것이라 생각하면 된다.
root-context.xml와 servlet-context.xml를 분리하는 이유는 유지보수와 재사용을 위해?이다.
만약에 웹 어플리케이션이 아니라 모바일 어플리케이션을 개발한다고 생각하고, 웹 어플리케이션에 적용한 비지니스 로직을 그대로 사용한다고 생각해보자.
그렇다면 웹과 관련되지 않은 다른 것들은 모바일 어플리케이션을 만들때도 똑같이 필요하다. 그러면 재사용을 할 수 있게 된다.
이와 같은 원리로 controller가 실행된다.