스프링 레거시 프로젝트(1) - JSP, 서블릿, JSTL, EL 에 이은 스프링 레거시 프로젝트 설정이다. 이번 포스팅에서는 스프링 의존성을 다운받고 DIspatchServlet 관련 설정, web.xml 및 컨텍스트에 대해 알아본다.
=<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.37</version>
</dependency>
...
<!-- DB 연동용 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
WEB-INF/web.xml을 작성한다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="<http://xmlns.jcp.org/xml/ns/javaee>"
xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
xsi:schemaLocation="<http://xmlns.jcp.org/xml/ns/javaee>
<http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd>"
version="3.1"> <!-- 서블릿 버전 선택 -->
<!-- RootApplicationContext 생성 리스너 등록 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- RootApplicationContext 설정 파일 위치 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>
<!-- 기본인 XML 설정 대신 자바 코드로 설정 파일을 변경할 때에는 -->
<!-- <context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
-->
...
</web-app>
스프링에는 루트 어플리케이션 컨텍스트라는 개념이 존재한다. 하나의 스프링 어플리케이션은 여러 개의 프론트 컨트롤러를 가질 수 있는데, 그 컨트롤러들이 공통적으로 사용할 빈(DAO, Service, dataSource)들이 루트 컨텍스트에 존재한다.
ContextLoaderListener의 동작은 부모인 ContextLoader의 initWebApplicationContext()에서 모든 과정이 실행된다. 그 중 작성한 xml과 연관있는 내부 코드만 추렸다.