Post

[Spring] Spring Context란?

[Spring] Spring Context란?

Spring Context 란?

  • Bean의 확장 버전으로 Spring이 Bean을 다루기 좀 더 쉽도록 기능들이 추가된 공간이다.
  • 단순히 Bean을 다루는 것 이외에도 추가적인 기능을 수행한다.

ROOT-CONTEXT (공통 부분)

  • 모든 서블릿이 공유할 수 있는 Bean들이 모인 공간.
  • DB와 관련된 Repository, Service 등이 있음

SERLVET-CONTEXT (개별 부분)

  • 서블릿 각자의 Bean들이 모인 공간.
  • 웹, 앱 마다 한 개씩 존재하므로 웹 앱 그자체를 의미하기도 함
  • 이 Context 내에서의 Bean들은 서로 공유될 수 없음
  • MVC의 Controller가 이에 해당된다.

Context의 구조

1. Application Context

  • Spring Context 기능의 중심인 최상위 인터페이스
  • 거의 Spring Context는 얘를 구현하며, 기능에 따라 앞에 “~~ApplicationContext”라고 붙음

2. AbstractApplication ContextApplication Context가 기능의 중심적인 역할을 수행한다면 이 Context는 Application Context를 구현한 추상 클래스로, 내부에 정의된 특수한 Bean들을 등록할 수 있음.

3. GenericApplication Context

  • 이름부터 제너릭이듯, Context로서의 기능을 거의 다 갖고있다.
  • 주로 수동으로 직접 Bean을 등록할 때 사용한다.
  • XmlBeanDefinitionReader를 사용하여 xml 파일을 읽어와야 한다.
  • 등록 과정이 좀 번거로움

4. GenericXmlApplicationContext

  • Bean을 배울 때 보통 가장 먼저 사용하는 인터페이스.
  • AbstractApplication Context 을 확장한 인터페이스로 Context등록 과정이 간편화되어 있음
  • 1번과 달리 xml 파일을 읽어오는 과정이 내부에 있으며, 다양한 루트로 설정 파일을 불러올 수 있다.

5. ClassPathXmlApplicationContext

  • GenericXmlApplicationContext과 비슷하지만, 클래스 경로로 Context를 불러오는 데 특화되어 있음

6. FileSystemXmlApplicationContext

  • 말 그대로 클래스 경로가 아닌 실제 파일 경로로 불러온다.
  • 쓸데없이 길기도 하고 그냥 classPath를 사용하는 것을 권장 (정신건강에 좋음)

Web Application용 Context 종류

1. SerlvetContext

  • Java 자체의 Context를 말함
  • Spring도 Java로 만들어졌으므로, 모든 Spring Context는 ServletContext라고 할 수 있음

2. WebApplicationContext

  • 웹 애플리케이션에 특화된 Context
  • 앞서 설명한 ROOT, Serlvet Context로 사용됨

3. ConfigurationWebApplicationContext

  • WebApplicationContext를 설정하는 데 쓰이는 Context
  • WebContext를 설정해야할 때엔 Configurable 클래스로 바꿔서 설정함
This post is licensed under CC BY 4.0 by the author.