설정 파일
Eclipse에서 Spring Legacy 프로젝트를 열면 3개의 설정 파일(xml)이 있다.
web.xml
- 서블릿 컨테이너 설정 파일. 톰캣이 실행되면 web.xml을 통해 서블릿, 필터 등의 설정 수행
- ex - 디스패처 서블릿 등록, post 요청 파라미터 인코딩을 수행하는 필터 등록
servlet-context.xml
- 웹, MVC 관련 빈 객체가 정의되는 스프링 설정 파일 (ex - 핸들러 어댑터, 뷰 리졸버, 컨트롤러)
- 해당 설정 파일에 정의된 빈 객체는 Spring Container에 생성됨
- 웹과 관련 있는 객체 component-scan
- 요청 맵핑 설정
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
위 설정은 InternalResourceViewResolver가 논리적 뷰 이름으로부터 물리 뷰 경로를 만들 때 사용되는 접두사(prefix)와 접미사(suffix)를 지정하는 설정이다. ViewResolver는 논리적 뷰 이름 앞에 접두사를 붙이고 뷰 이름 뒤에 접미사를 붙여 물리 뷰 경로를 만들어준다. 예로 들면 hello라면 논리적 뷰 이름으로부터 /WEB-INT/views/hello.jsp와 같은 물리 뷰 경로를 만들어준다.
<resources mapping="/resources/**" location="/resources/" />
위 설정으로 /resources/로 시작하는 모든 요청이 location 속성에 지정된 디렉터리인 /resources/에서 처리되도록 한다. 이 설정으로 간단하게 정적 리소스를 클라이언트에게 제공할 수 있다. 예를 들어 contextRoot /resources/img/logo.png 요청이 들어오면 컨트롤러가 처리하지 않고 /resources/img/logo.png 위치의 파일을 응답한다.
root-context.xml
- 웹과 관련 없는 빈 생성 및 관리 (ex - DataSource 객체)
- 해당 설정 파일에 정의된 빈 객체는 Spring root Container에 생성됨
- 웹과 관련 없는 객체 component-scan
pom.xml
- 빌드 도구로 maven을 쓸 경우 pom.xml에서 maven 관련 설정을 함
- 모든 라이브러리 버전 관리 (java 버전까지도 관리)
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.3.26</org.springframework-version>
<org.aspectj-version>1.9.19</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
<mysql-connector-java-version>8.0.33</mysql-connector-java-version>
</properties>
스프링 MVC 동작 순서
1. 스프링 MVC 앱이 실행되면 톰캣이 처음 구동되어 서블릿 컨테이너가 생성됨, 이때 web.xml을 읽어 서블릿 컨테이너 초기화 수행
2. ContextLoaderListener 객체 생성, Dispatcher Servlet이 등록되고 생성됨
- ContextLoaderListener : root-context-xml을 읽어서 Spring Root Container 생성
- Dispatcher Servlet 초기화 시에 servlet-context.xml을 읽어 Spring Container 생성
결론 : 스프링 MVC 앱이 실행되면 Tomcat의 Servlet Container에 디스패처 서블릿이 생성되며 스프링 앱이 사용하는 2개의 스프링 컨테이너가 생성됨
'Spring > Spring Legacy' 카테고리의 다른 글
MyBatis (0) | 2023.10.26 |
---|