스프링의 두 가지 유형의 컨테이너

  • Application Context

  • Web Application Context

Application Context
Application Context 는 web.xml 에 정의된 ContextLoaderListener 또는 ContextLoaderServlet 에 의해서 초기화되는 컨테이너이다.


위의 내용에서 ContextLoaderListener는 root-context.xml 을 로드하고 Application Context를 생성하도록 스프링에 요청하고 있다. 다시 말해서, ContextLoaderListener 는 스프링 설정파일을 읽으며 web.xml에 contextConfigLocation 에 <param-value> 값을 파싱하고 싱글톤 빈을 로드한다. (root-context.xml을 로드) 


그리고 이러한 컨텍스트에는 아래와 같은 내용들이 있을 수 있다. 그리고 각각의 Application 마다 각각의 Application Context 가 존재한다.

  • middle-tier transactional services ( 중간계층 트랜잭션 서비스 )
  • data access objects ( DAO )
  • use (and re-use) across the application ( 재사용 개체 )

ContextLoaderListener 는 두가지 역할을 가지고 있다.

  1. ApplicationContext 의 라이프 사이클을 ServletContext 라이프 사이클과 연결

  2. ApplicationContext 의 생성을 자동화하기 때문에 명시적 코드 작성 불필요


다른 컨텍스트에는 Application Context 의 하위 컨텍스트인 Web Application Context 가 존재한다. 스프링에 정의된 각각의 DispatcherServlet 에는 연관된 각각의 WebApplicationContext 가 있다. WebApplicationContext 의 초기화는 아래와 같이 발생된다. 아래의 내용도 web.xml에 존재


위의 사진에서 서블릿의 이름은 appServlet 이다. 그리고 해당 xml의 이름은 servlet-context.xml 이다.


ApplicationContext에서 사용할 수 있는 Bean은 각각의 WebApplicationContext에서 참조할 수 있다. 따라서 ApplicationContext WebApplicationContext 를 구분해서 사용하면 좋다고 한다. 그리고 아래의 내용은 ApplicationContext 에서 정의하는 것이 좋다고 한다.

  • Business Logic Components ( 비즈니스 로직 )

  • Data Access Classes ( 데이터 액세스 클래스 )
    (= Middle-Tier Services ( 중간계층 서비스 ) )

DispatcherServlet 각각은 WebApplicationContext 에 정의되어 있다.


ApplicationContexts & WebApplicationContexts 이해

  • ApplicationContexts 는 계층구조를 띄며 자식 컨텍스트는 WebApplicationContext 이다.
  • ContextLoaderListener 는 WebApplicationContext를 만들고 이를 ServletContext에 저장
  • DispatcherServlet 은 자체의 WebApplicationContext를 만들어 handlers/controllers/view-resolvers 를 관리한다.


글 자체가 외국어를 번역해서 하였기 때문에 굉장히 불완전하다. 더 공부



Posted by doubler
,