요즘 들어 스프링에 대한 깊은 이해가 없이 스프링 부트를 공부했다는 생각이 들었다.
눈에 보이지 않는것들에 집중하며 스프링 또는 Java EE 로만 프로젝트를 진행해보면서 이해를 한 부분을 정리하려고 한다.
Spring, Servlet 개발을 하다보면 RootContext, ServletContext, RootApplicationContext, WebApplicationContext 등등.. Context 라는게 굉장히 많이 등장했다.
부트를 사용할때는 root-context 와 servlet-context 와 같은 xml 파일을 건드릴 일 없지만 스프링으로만 프로젝트를 할때는 직접 설정을 해줘야 하기 때문에 역할을 알아둘 필요가 있다고 생각 했다.
스프링이 관리하는 빈들이 담겨있는 컨테이너
스프링의 가장 큰 특징중 하나가 IoC 컨테이너를 통하여 객체의 생성과 관리를 해준다는게 있는데 Context가 이 Container의 일종이다.
→ Container에는 Bean Factory와 이를 상속한 Application Context 2가지 유형이 있다)
Bean Factory | Application Context |
---|---|
Pre-Loading 방식 | Lazy Loading 방식 |
Bean 객체를 생성하고 관리하는 기본적인 기능 | 트랜잭션 관리, 메시지 기반의 다국어 처리, AOP 처리 등 |
Context의 종류는 ApplicationContext, WebApplicationContext, ServletContext가 있다.
스프링의 핵심 컨테이너로서, 스프링 애플리케이션 전체에 걸쳐 스프링 빈의 생성, 관리, 라이프사이클을 담당
ApplicationContext 인터페이스를 구현하는 다양한 컨텍스트 구현체들이 있으며 주로 사용되는 것으로는 AnnotationConfigApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext 등이 있다.
웹 애플리케이션에서 사용되는 스프링 컨텍스트로 , ApplicationContext 인터페이스를 확장한 WebApplicationContext 인터페이스를 구현한다.
웹 애플리케이션의 라이프사이클과 웹 관련 기능을 제공
주로 사용되는 것으로는 XmlWebApplicationContext, AnnotationConfigWebApplicationContext 등이 있다.
서블릿 기반 웹 애플리케이션에서 사용되는 컨텍스트로 웹 애플리케이션의 설정, 리소스 액세스, 서블릿, 필터 등의 웹 구성 요소를 관리. 웹 애플리케이션마다 별도의 ServletContext 인스턴스가 생성되어 사용된다. WebApplicationContext는 ServletContext를 상속받는 인터페이스로, 웹 애플리케이션 컨텍스트를 구현하는 데 사용된다.
Spring Context의 종류는 엄청 많지만 Web Application용 Context는 Root Context와 Servlet Context 이렇게 두가지로 나눌 수 있다.
→ Servlet Context에 정의된 Bean 은 Application Context에서 정의된 Bean을 사용할 수 있다.