Spring

[Spring] Spring Context 설명

오잎 클로버 2022. 2. 13. 08:30
728x90

Spring Context... 내용도 많고 복잡하고 해서 포스팅을 미루었습니다... 

그동안 프로그래머스 코딩테스트밖에 포스팅 못하였습니다..

각설하고 본론으로 바로 들어가겠습니다.

 

Spring Context 란?

Bean의 확장 버전으로 Spring이 Bean을 다루기 좀 더 쉽도록 기능들이 추가된 공간이다.

단순히 Bean을 다루는 것 이외에도 추가적인 기능을 수행합니다.

 

Bean은 모두 Context안에서 이루어진다.

Context는 Bean들을 포함하여 여러 기능을 가진 공간이라고 생각하면 편할 것 같습니다.

종류

여기서 문제가 하나 발생하게 됩니다.

 

자바에는 서블릿이라는 객체가 존재하는 데, 모든 객체는 Bean으로 관리되니,

서블릿 역시 Bean이 존재합니다.

이러한 서블릿 Bean들도 각자 공통적인 부분들이 있을 것인데,

서블릿은 모두 독립적인 객체로 서로 간섭(공유)이 불가능하다는 점 때문에

문제가 하나 발생합니다.

예를 들어 모든 서블릿 Bean마다 공통적인 연결이 들어간다면 굉장히 비효율적일 것입니다.

예시를 들자면 

Animal이라는 부모 클래스 없이 혹은 인터페이스 없이 

사자, 호랑이, 개, 고양이 클래스를 구현한다고 가정해봅시다.

그럼 위 클래스 개개인마다 '울음' 이라는 공통 메소드를 만들어야하는 데

이는 굉장히 비효율적인 것과 비슷합니다.

 

위와 같은 문제를 해결하고자 Spring Context는 이러한 공통 부분을 서블릿에서

총 2가지의 Context로 분리시켰습니다.

 

1. ROOT-CONTEXT (공통 부분)

모든 서블릿이 공유할 수 있는 Bean들이 모인 공간.

DB와 관련된 Repository, Service 등이 있음

 

2. SERLVET-CONTEXT (개별 부분)

서블릿 각자의 Bean들이 모인 공간.

웹, 앱 마다 한 개씩 존재하므로 웹 앱 그자체를 의미하기도 함

이 Context 내에서의 Bean들은 서로 공유될 수 없음

MVC의 Controller가 이에 해당됩니다.

 

 

Context의 구조

Context는 종류도 많고 구조도 굉장히 복잡합니다.

그래서 몇가지 정도만 간단하게 짚고 넘어가도록 하겠습니다.

 

1. Application Context

스프링 Context 기능의 중심인 최상위 인터페이스
거의 스프링 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

자바 자체의 Context를 말함

스프링도 자바로 만들어졌으므로, 모든 스프링 Context는 ServletContext라고 할 수 있음

 

2. WebApplicationContext

웹 애플리케이션에 특화된 Context

앞서 설명한 ROOT, Serlvet Context로 사용됨

 

3. ConfigurationWebApplicationContext

WebApplicationContext를 설정하는 데 쓰이는 Context

WebContext를 설정해야할 때엔 Configurable 클래스로 바꿔서 설정함

 

 

이상입니다.

'Spring' 카테고리의 다른 글

[Spring] Spring Entity, Repository 설명  (0) 2022.02.17
[Spring] Spring DAO, DTO 설명  (0) 2022.02.16
[Spring] Bean 추가 설명  (0) 2022.02.06
[Spring] JPA, Hibernate 설명  (0) 2022.02.04
[Spring] Hibernate 설명  (0) 2022.02.03