똑같은 삽질은 2번 하지 말자

Spring 에서 ContextLoaderListener 쓰는 이유 본문

Spring/忘れやすい概念

Spring 에서 ContextLoaderListener 쓰는 이유

곽빵 2019. 7. 9. 23:11

일반적으로 프레임워크 기반의 웹 프로젝트를 보면 두개의 레이어 (Presentation Layer / Business Layer)로 나누어

시스템을 개발하는데, 이를 2-Layered 아키텍처 스타일 이라고 한다.

 

그리고 계층별로 해당하는 설정파일 applicationContext.xml(비즈니스 계층)/presentation-layer.xml(프레젠테이션 계층)

이 있다고 한다면, DispatcherSevlet이 생성되어 프레젠테이션 계층 설정 파일을 읽고 스프링 컨테이너 구동되며,

Controller 객체들이 메모리에 생성된다. but, Controller 객체들이 생성되기전에 DAO,VO 같은 비즈니스 컴포넌트들을

메모리에 생성해야 하는데, 이때 사용하는 클래스가 ContextLoaderListener 이다.

 

ContextLoaderListener 클래스는 서블릿 컨테이너가 web.xml 파일을 읽어서 구동될 때,

자동으로 메모리에 생성된다. 즉, ContextLoaderListener는 클라이언트의 요청이 없어도 컨테이너에 구동될 때,

Pre-Loading 되는 객체이다.

그리고 주의할 점은 위 <conetxt-param> 으로 contextConfigLoaction을 따로 설정하지 않으면,

기본적으로 /WEB-INF/applicationContext.xml 파일을 읽어 스프링 컨테이너에 구동해서 오류가 날 수 있다.

 

이제 전체적이 구동과정을 보자면,

 

1.web.xml 파일을 로딩하여 Servlet Container 구동

 

2.서블릿 컨테이너는 web.xml 파일에 등록된 ContextLoaderListener 객체를 Pre-Loading한다.

 이때, ContextLoaderListener 객체는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너(Root Container)구동

  Business Layer 로서 Service 요청이 들어오기 전에 여러 Bean을 셋팅해 놓는 것.

 

3. 서비스 요청이 들어오면 서블릿 컨테이너는 DispatcherServlet 객체를 생성, 

DispatcherServlet은 presentation-layer.xml 파일을 로딩하여 두번째 스프링 컨테이너 구동 

 

즉, 두개의 XmlWebApplicationContext를 생성하는데, 각각의 기능과 역할은 위에서 말했듯이 두개로 나누어져있다.

Comments