[Spring Boot] ApplicationContext 정리

Posted by 김성철

Spring boot - ApplicationContext

개발을 처음 시작했을때는 기본적인 내용들을 다 찾아서 공부했었지만 정리를 따로하진 않았음.  
정리한거는 개발한지 1~2년 되었을때부터 했으니까 기본적인거를 다 안다고 생각했는데 막상 누군가가 물어보면 대답을 잘 못하고 기억을 못하는 날 발견함..ㅜㅜ  
그래서 다시 한번 정리할겸 아래의 내용을 작성함  
신입때 이거 설정한다고 피똥싸면서 했었는데....  
이전 정리한 링크 :  
	[InteliJ]인텔리J_스프링프로젝트_생성_및_설정.txt  
	https://github.com/kkimsungchul/study/blob/master/IDE/%5BInteliJ%5D%EC%9D%B8%ED%85%94%EB%A6%ACJ_%EC%8A%A4%ED%94%84%EB%A7%81%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EC%83%9D%EC%84%B1_%EB%B0%8F_%EC%84%A4%EC%A0%95.txt  

Spring Framework 란

Spring Framework는 애플리케이션 개발을 위한 여러 가지 기능을 제공하는 오픈소스 프레임워크입니다.  
Spring은 DI(Dependency Injection)와 AOP(Aspect Oriented Programming)와 같은 핵심 개념들을 바탕으로 구성되어 있습니다.  
  
Spring에서는 Bean이라는 개념을 사용하여 개발자가 작성한 객체를 관리합니다.  
Bean은 Spring이 관리하는 객체로서, Spring 컨테이너에 등록되어 있어야 사용할 수 있습니다. Spring 컨테이너는 이러한 Bean들의 생성, 소멸, 의존성 관리 등을 담당합니다.  
  
Spring 컨테이너는 ApplicationContext 인터페이스를 구현한 클래스의 인스턴스를 생성하여 생성된 Bean을 관리합니다.  
ApplicationContext는 BeanFactory 인터페이스를 상속하며, 이를 통해 다양한 Bean의 생성 및 관리 기능을 제공합니다.  
  
Spring 컨테이너를 사용하여 개발자는 개발에 필요한 객체를 직접 생성하거나, 의존성을 직접 관리할 필요 없이, Bean을 통해 자동으로 생성 및 관리할 수 있습니다.  
또한, Spring의 다양한 기능들을 활용하여 개발 생산성을 향상시킬 수 있습니다.  

Spring context 란

Spring context는 Spring Framework에서 제공하는 컨테이너로, 애플리케이션에서 사용되는 Bean 객체들의 생성, 관리, 라이프사이클 관리, 의존성 주입 등을 담당합니다.  
  
Spring context는 두 가지 종류가 있습니다.  
  
- ApplicationContext  
	일반적으로 많이 사용되는 Spring 컨테이너입니다.  
	BeanFactory 인터페이스를 확장한 인터페이스로, BeanFactory가 제공하는 모든 기능을 포함합니다.  
	다양한 이벤트를 처리하고, 메시지 국제화 기능 등을 제공합니다.  
	XML, JavaConfig, Annotation 등 다양한 방식으로 설정 파일을 작성할 수 있습니다.  
  
- BeanFactory  
	Spring에서 가장 기본적인 컨테이너입니다.  
	ApplicationContext와 달리 가장 단순한 형태의 컨테이너이기 때문에, 필요한 경우에만 사용됩니다.  
	BeanFactory는 Bean의 생성, 초기화, 라이프사이클 관리, 의존성 주입 등을 담당합니다.  
	XML 설정 파일을 이용하여 Bean을 등록하고 관리합니다.  
  
Spring context에서 Bean은 일반적으로 XML, JavaConfig, Annotation 등의 방식으로 정의됩니다.  
이러한 방식들을 통해 Bean을 등록하면, Spring 컨테이너에서 해당 Bean 객체를 생성하여 관리합니다.  
Bean을 생성할 때, Spring은 DI(Dependency Injection)과 AOP(Aspect-Oriented Programming)와 같은 핵심 개념들을 적용하여 개발자가 편리하게 객체를 관리할 수 있도록 도와줍니다.  
  
Spring context는 다양한 라이브러리와 프레임워크와 함께 사용될 수 있으며,  
Spring MVC, Spring Security, Spring Data 등과 같은 다양한 Spring 모듈들과 함께 사용될 때, 애플리케이션의 개발과 관리를 더욱 용이하게 할 수 있습니다.