Spring Context

Jongmyung Choi·2023년 6월 13일
2
post-thumbnail

요즘 들어 스프링에 대한 깊은 이해가 없이 스프링 부트를 공부했다는 생각이 들었다.
눈에 보이지 않는것들에 집중하며 스프링 또는 Java EE 로만 프로젝트를 진행해보면서 이해를 한 부분을 정리하려고 한다.

Spring, Servlet 개발을 하다보면 RootContext, ServletContext, RootApplicationContext, WebApplicationContext 등등.. Context 라는게 굉장히 많이 등장했다.

부트를 사용할때는 root-context 와 servlet-context 와 같은 xml 파일을 건드릴 일 없지만 스프링으로만 프로젝트를 할때는 직접 설정을 해줘야 하기 때문에 역할을 알아둘 필요가 있다고 생각 했다.


Spring Context

스프링이 관리하는 빈들이 담겨있는 컨테이너

스프링의 가장 큰 특징중 하나가 IoC 컨테이너를 통하여 객체의 생성과 관리를 해준다는게 있는데 Context가 이 Container의 일종이다.

🗣 Container란?

→ Container에는 Bean Factory와 이를 상속한 Application Context 2가지 유형이 있다)

Bean FactoryApplication Context
Pre-Loading 방식Lazy Loading 방식
Bean 객체를 생성하고 관리하는 기본적인 기능트랜잭션 관리, 메시지 기반의 다국어 처리, AOP 처리 등

🗣 Spring Container를 사용하는 이유

  • 모든 Context는 싱글톤으로 관리되어 유일한 객체로 관리됨
  • Lazy Loading으로 Servlet Context를 관리하기 때문에 메모리 관리 용이
  • DAO(Data Access Object), VO(Value Object)를 사용하여 POJO를 간편하게 구현 할 수 있게 도와줌

Context의 종류는 ApplicationContext, WebApplicationContext, ServletContext가 있다.

Application Context

스프링의 핵심 컨테이너로서, 스프링 애플리케이션 전체에 걸쳐 스프링 빈의 생성, 관리, 라이프사이클을 담당

ApplicationContext 인터페이스를 구현하는 다양한 컨텍스트 구현체들이 있으며 주로 사용되는 것으로는 AnnotationConfigApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext 등이 있다.

Web Application Context

웹 애플리케이션에서 사용되는 스프링 컨텍스트로 , ApplicationContext 인터페이스를 확장한 WebApplicationContext 인터페이스를 구현한다.
웹 애플리케이션의 라이프사이클과 웹 관련 기능을 제공

주로 사용되는 것으로는 XmlWebApplicationContext, AnnotationConfigWebApplicationContext 등이 있다.

Servlet Context

서블릿 기반 웹 애플리케이션에서 사용되는 컨텍스트로 웹 애플리케이션의 설정, 리소스 액세스, 서블릿, 필터 등의 웹 구성 요소를 관리. 웹 애플리케이션마다 별도의 ServletContext 인스턴스가 생성되어 사용된다. WebApplicationContext는 ServletContext를 상속받는 인터페이스로, 웹 애플리케이션 컨텍스트를 구현하는 데 사용된다.



Spring Context의 종류는 엄청 많지만 Web Application용 Context는 Root ContextServlet Context 이렇게 두가지로 나눌 수 있다.

Root Context(공통 부분)

  • 스프링 애플리케이션의 전역적인 설정과 빈(Bean)들을 포함하는 상위 컨텍스트.
  • 주로 데이터베이스 연결, 서비스 계층, 비즈니스 로직 등의 공통적인 설정을 담당.
  • Root Context는 보통 "applicationContext.xml" 파일로 작성되며, 프로젝트 전체에서 공유되는 빈(Bean)들을 정의.
  • ContextLoaderListenerd에 의해 생성된다.
  • 여러 개의 서블릿 컨텍스트가 하나의 루트 컨텍스트를 참조할 수 있다.

Servlet Context(개별 부분)

  • 스프링 MVC와 관련된 설정과 빈(Bean)들을 포함하는 컨텍스트.
  • 주로 웹 애플리케이션의 요청 처리, 컨트롤러, 뷰(View) 등과 관련된 설정을 담당.
  • 각각의 서블릿(DispatcherServlet)마다 별도의 서블릿 컨텍스트가 생성된다.
  • 서블릿 컨텍스트는 보통 "servlet-context.xml" 파일로 작성되며, 해당 서블릿에 대한 설정과 빈(Bean)들을 정의
  • DispatcherServlet에 의해 생성된다.
  • 서블릿 컨텍스트는 루트 컨텍스트를 참조할 수 있다.

❓ Servlet Context에서 빈을 먼저 찾고, Application Context에 정의된 Bean을 찾는다.

→ Servlet Context에 정의된 Bean 은 Application Context에서 정의된 Bean을 사용할 수 있다.

profile
총명한 개발자

0개의 댓글