https://workshop-6349.tistory.com/entry/Spring-Spring-Context-%EC%84%A4%EB%AA%85
스프링 컨텍스트(Spring Context)는 스프링 프레임워크(Spring Framework)에서 제공하는 핵심 컨테이너(Container)입니다.
스프링 컨텍스트는 스프링 프레임워크에서 IoC (Inversion of Control, 제어의 역전) 컨테이너로서 동작합니다.
IoC는 객체의 생성, 초기화, 관계 설정, 생명 주기 관리 등을 개발자 대신 담당하여 애플리케이션의 컴포넌트들을 관리합니다.
이를 통해 개발자는 객체 간의 의존성을 직접 관리하지 않고, 컨테이너가 자동으로 관리해주는 기능을 활용할 수 있습니다.
스프링 컨텍스트는 XML, Java 어노테이션, Java 코드 등을 사용하여 설정 정보를 제공받고, 이를 바탕으로 애플리케이션의 객체들을 생성하고 관리합니다.
또한, 스프링 컨텍스트는 다양한 기능을 제공하여 AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍) 지원, 국제화(i18n), 이벤트 처리, 캐싱, 트랜잭션 관리 등을 처리할 수 있습니다.
스프링 컨테이너는 스프링 애플리케이션의 중심이며, 빈의 라이프사이클 관리, 의존성 주입(Dependency Injection), AOP(Aspect-Oriented Programming) 등을 처리합니다.
이를 통해 애플리케이션의 객체들이 유연하게 구성되고 관리될 수 있습니다.
스프링 컨테이너는 빈의 생성, 초기화, 의존성 해결, 소멸 등을 담당합니다. 빈의 정의는 XML 기반의 설정 파일이나 Java Config와 같은 설정 방식을 통해 제공됩니다.
스프링 컨테이너는 설정 파일을 해석하여 빈 객체를 생성하고, 빈 간의 의존성을 자동으로 해결합니다.
이를 통해 개발자는 객체의 생성과 의존성 관리에 대한 부분을 신경 쓰지 않고도 애플리케이션을 개발할 수 있습니다.
스프링 컨테이너는 일반적으로 ApplicationContext 인터페이스의 구현체로 사용됩니다.
ApplicationContext는 스프링의 컨테이너 인터페이스로서, 빈의 관리 외에도 국제화(i18n), 이벤트 처리, 캐싱, 트랜잭션 관리 등 다양한 기능을 제공합니다.
스프링 컨테이너는 싱글톤(Singleton) 패턴을 기반으로 동작하며, 애플리케이션 전반에 걸쳐서 사용됩니다.
스프링 컨테이너를 사용하면 객체의 생성과 관리, 의존성 주입 등을 스프링이 자동으로 처리해주므로 개발자는 객체 간의 결합도를 낮추고 유지보수성과 테스트 용이성을 향상시킬 수 있습니다.
빈과 설정 파일을 기반으로 컨테이너가 생성되고, 빈 팩토리를 통해 빈의 생성과 관리가 이루어집니다.
라이프사이클 이벤트를 통해 빈의 초기화와 소멸에 대한 작업을 처리할 수 있으며, 어플리케이션 컨텍스트를 통해 다양한 기능을 활용할 수 있습니다.
이러한 구조를 통해 스프링 컨텍스트는 애플리케이션의 객체 관리와 구성을 유연하게 처리하고, 개발자는 객체 간의 결합도를 낮추고 유지보수성과 테스트 용이성을 향상시킬 수 있습니다.
- 빈(Bean)
스프링 컨텍스트에서 관리되는 객체를 말합니다.
빈은 스프링 컨텍스트에 등록되어 관리되며, 설정 파일(XML 또는 Java Config)에서 빈의 정의를 작성하여 생성됩니다.
빈은 일반적으로 애플리케이션의 구성 요소로 사용되며, 스프링이 객체의 라이프사이클 관리, 의존성 주입 등을 자동으로 처리합니다.
- 설정 파일
스프링 컨텍스트를 구성하는 정보를 담은 파일입니다.
XML, Java Config 등의 형식으로 작성될 수 있습니다.
설정 파일에서는 빈의 정의, 의존성 관계, 프로퍼티 값 설정 등을 명시합니다.
설정 파일은 스프링 컨텍스트가 객체를 생성하고 관리하는 기준이 됩니다.
- 컨테이너
스프링 컨텍스트를 실제로 구동시키는 실행 환경을 말합니다.
컨테이너는 스프링 컨텍스트를 생성하고 초기화하는 역할을 수행합니다.
스프링은 ApplicationContext 인터페이스를 구현한 여러 가지 컨테이너 구현체를 제공합니다.
컨테이너는 설정 파일을 해석하고 빈 객체를 생성하여 컨텍스트에 등록합니다.
- 빈 팩토리(Bean Factory)
스프링 컨텍스트의 핵심 인터페이스로, 빈 객체의 생성과 관리를 담당합니다.
빈 팩토리는 빈의 등록, 조회, 생성, 초기화, 의존성 주입 등의 기능을 제공합니다.
스프링 컨텍스트는 빈 팩토리를 확장한 ApplicationContext 인터페이스를 제공하여 더 많은 기능을 제공합니다.
- 라이프사이클 이벤트
스프링 컨텍스트에서는 빈의 라이프사이클에 따라 다양한 이벤트를 발생시킵니다.
이벤트는 빈의 초기화, 소멸 등의 단계에서 발생할 수 있으며, 개발자는 이를 활용하여 필요한 작업을 수행할 수 있습니다.
예를 들어, 빈 초기화 후 특정 작업을 수행하거나, 빈 소멸 전에 정리 작업을 수행할 수 있습니다.
스프링 컨텍스트는 이벤트를 발생시키고, 이를 처리할 수 있는 이벤트 리스너를 등록할 수 있습니다.
- 어플리케이션 컨텍스트(Application Context)
스프링 컨텍스트의 구체적인 구현체로, ApplicationContext 인터페이스를 구현합니다.
어플리케이션 컨텍스트는 스프링 컨텍스트의 주요한 구현체로서, 빈 팩토리(Bean Factory)의 기능을 포함하면서도 추가적인 기능을 제공합니다.
예를 들어, 메시지 소스(MessageSource)를 활용한 국제화(i18n), 이벤트 처리, 트랜잭션 관리 등의 기능을 지원합니다. 또한,
어플리케이션 컨텍스트는 빈의 지연 로딩, 프로파일(Profile) 설정 등과 같은 고급 기능을 제공합니다.
- ROOT-CONTEXT (공통 부분)
모든 서블릿이 공유할 수 있는 Bean들이 모인 공간입니다.
DB와 관련된 Repository, Service 등이 있습니다.
- SERLVET-CONTEXT (개별 부분)
서블릿 각자의 Bean들이 모인 공간입니다.
웹, 앱 마다 한 개씩 존재하므로 웹 앱 그자체를 의미하기도 합니다.
이 Context 내에서의 Bean들은 서로 공유될 수 없습니다.
MVC의 Controller가 이에 해당됩니다.