처음 스프링을 설정할 때 세가지 xml파일들이 어떤 역할을 하고, 어떤 차이점이 있는지에대해 궁금해서 이번 포스팅에서는 위의 servlet-context, root-context, web에 대해 알아볼까 합니다.
1. web.xml
웹 어플리케이션 서버(WAS)가 최초로 구동 될 때(톰캣이 최초로 구동이 될 때) 각종 설정을 정의합니다. 이 때 파일 내에서 여러 xml파일을 인식 할 수 있도록 설정되어있으며, 설정을 위한 설정파일입니다.
<!-- 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>
<!-- 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</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
context-param 태그 내에 root-context로 모든 서블릿과 필터들이 공유함으로 root-context.xml을 정의했습니다.
또한 listener 태그로 모든 서블릿과 필터들에 공유되는 스프링 컨테이너를 생성합니다. 다시말해 root-context에 정의되어있는 것들을 모든 서블릿들과 필터가 공유할 수 있게 해줍니다.
2. servlet-context.xml
웹 어플리케이션에서 클라이언트의 요청을 받기 위한 컨텍스트 설정이며, 요청과 관련된 객체를 정의합니다. url과 관련된 Controller나, 어노테이션, ViewResolver(컨트롤러에서 view 정보에 대해 설정하는 것), Interceptor, MultipartResolver 등의 설정을 해줍니다.
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
servlet-context 파일을 보면 위처럼 주석을 볼 수 있는데, 해석하면 "DispatcherServlet Context : 이 서블릿의 요청처리 인프라를 정의한다."라고 해석할 수 있습니다. 이는 DispatcherServlet과 관련된 설정을 하는 것임을 의미합니다.
3. root-context.xml
servlet-context와는 반대로 view와 관련되지 않은 객체를 정의합니다. Service, Repository(DAO), DB등 비즈니스 로직과 관련된 설정을 해줍니다.
위의 자료에서 다수의 서블릿을 가지게 되는 경우 다수의 servlet-context가 root-context의 bean 정보들을 참조하는 구조가 될 수 있습니다.
참고자료
docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc
'코딩 > Spring' 카테고리의 다른 글
Spring Model (1) | 2020.08.28 |
---|---|
Spring Connection Pool(DBCP), Hikari CP (0) | 2020.08.24 |
Spring Lombok Log4j 오류뜰 때 (2) | 2020.08.21 |
Spring 스프링을 사용하는 이유 (0) | 2020.08.20 |
Spring Lombok (0) | 2020.08.18 |
최근댓글