프로젝트 로딩 구조
- 프로젝트가 정상적으로 실행되었다면 서버의 구동 시 약간의 로그가 기록되는 것을 볼 수 있습니다.
이 로그를 이용해서 어떤 과정을 통해 프로젝트가 실행되는지 엿볼 수 있습니다.
프로젝트 구동 시 관여하는 XML은 web.xml, root-context.xml, servlet-context.xml 파일입니다.
이 세개의 파일중
web.xml은 Tomcat 구동과 관련된 설정이고, 나머지 두 파일은 스프링과 관련된 설정입니다.
프로젝트의 구동은 web.xml에서 시작합니다. web.xml의 상단에는 가장 먼저 구동되는 Context Listener가 등록되어 있습니다.
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<Context-param>에는 root-context.xml의 경로가 설정되어있고, <listener>에는 스프링 MVC의 ContextLoaderListener가 등록되어 있는 것을 볼 수 있습니다. ContextLoaderListener는 해당 웹 애프리케이션 구동 시 같이 동작하므로 해당 프로젝트를 실행하면 다음과 같이 먼저 로그를 출력하면서 기록하는 것을 볼 수 있습니다.
root-context.xml이 처리되면 파일에 있는 빈(Bean) 설정들이 동작하게 됩니다. 이를 그림으로 표현하자면
root-context.xml에 정의된 객체(Bean)들은 스프링의 영역(context) 안에 생성되고, 객체들 간의 의존성이 처리됩니다.
root-context.xml이 처리된 후에는 스프링 MVC에서 사용하는 DispatcherServlet이라는 서블릿과 관련된 설정이 동작합니다.
<!-- Processes application requests -->
<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
/WEB-INF/spring/spring-security.xml
/WEB-INF/spring/context-common.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>
org.springframework.web.servlet.DispatcherServlet 클래스는 스프링 MVC의 구조에서 가장 핵심적인 역할을 하는 클래스입니다. 내부적으로 웹 관련 처리의 준비작업을 진행하는데 이때 사용하는 파일이 servlet-context.xml입니다.
프로젝트가 실행될 때 로그의 일부를 보면 아래와 같습니다.
DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석하기 시작합니다.
이 과정에서 등록된 객체(Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동되게 됩니다.
'JAVA > spring 이론' 카테고리의 다른 글
controller (0) | 2020.07.03 |
---|---|
모델 2와 스프링 MVC (0) | 2020.07.03 |
스프링 MVC 프로젝트 내부 구조 (0) | 2020.07.02 |