tlov

BeanFactory와 ApplicationContext, Configuration 본문

개발

BeanFactory와 ApplicationContext, Configuration

nowitzki 2024. 10. 4. 02:58

Bean

스프링 공식 문서에 따르면, 어플리케이션의 백본을 형성하고 Spring IoC 컨테이너에 의해 관리되는 객체들을 Bean이라고 부릅니다. 즉, Spring IoC 컨테이너에 의해 관리되고 인스턴스화되고 조립되는 객체를 의미합니다. 단순하게는 현재 어플리케이션 속 수많은 객체들 중 하나가 Bean이라고 생각하면 됩니다.
 

Spring IoC Container

스프링 IoC 컨테이너는 제어의 역전(Inversion of Control, IoC) 개념을 가지며 이는 Bean을 인스턴스화 하고, 구성하며 조립(assemble)하는 역할을 합니다. 그 중에서도 IoC의 특수한 형태(Specialized form of IoC)인 의존성 주입(Dependency Injection, ID)은 생성자, 클래스 속성 및 Setter, factory 메서드를 통해 컨테이너에서 Bean으로 만든 객체들을 개발자가 원하는 곳에 주입해줍니다. 즉, IoC 컨테이너는 어플리케이션 내의 모든 객체를 Bean으로 관리하며 Bean들간의 의존성 주입 등의 역할을 수행합니다.
 

https://docs.spring.io/spring-framework/reference/core/beans/basics.html

 

BeanFactory

스프링 빈 컨테이너에 접근하기 위한 최상단의 인터페이스입니다. 스프링 IoC 컨테이너의 근간이 되는 인터페이스라고 보시면 됩니다. BeanFactory는 빈 생성, 생명 주기 관리, 의존성 주입 등을 담당하며 인스턴스화 할 Bean에 대한 정보, 구성요소를 Configuration metadata를 읽어 구성합니다. Configuration metadata는 외부 XML 파일, Groovy 스크립트 혹은 팩토리 메서드를 포함한 Configuration 클래스, @Component 클래스로 나타낼 수 있습니다.
 

ApplicationContext

org.springframework.context.ApplicationContext 인터페이스는 BeanFactory를 상속하며 스프링 IoC 컨테이너를 대표합니다. 기본적으로 이 인터페이스도 스프링 IoC 컨테이너이기에 Bean들을 인스턴스화 하고, 설정하고 조립하는 것을 담당합니다. 여기까지만 보면 BeanFactory와 무슨 차이가 있나싶습니다. 하지만, ApplicationContext는 BeanFactory의 기능을 포함한 많은 부가 기능들을 추가로 제공합니다. 스프링 공식 문서에서는 Bean Processing에 대한 완전한 제어가 필요치 않으면 ApplicationContext를 기본으로 사용하길 권장하고 있습니다.
 

  • 스프링 AOP 기능들의 손쉬운 통합
  • 메시지 리소스 관리 (국제화를 위해)
  • 이벤트 발생자
  • 웹 어플리케이션에서 사용하기 위한 WebApplicationContext와 같은 어플리케이션 계층 특정 Context
https://docs.spring.io/spring-framework/reference/core/beans/beanfactory.html#context-introduction-ctx-vs-beanfactory

 

Configuration Metadata

스프링 IoC 컨테이너는 Configuration Metadata의 형식과 완전 분리되어 있습니다. 공식 문서는 오늘날 많은 개발자들이 Java-based configuration을 선택하고 있다고 합니다.
 

  • Annotation-based Configuration
  • Java-based Configuration

 

Annotation-based Configuration

해당 기능은 Spring 2.5에 추가되었으며 필요한 XML 구성의 양을 줄일 수 있도록 하였습니다. 빈의 구성요소를 XML에 작성하는 대신에 관련 클래스나 메소드, 필드에 대해서 어노테이션을 이용하여 빈 구성요소를 Component 클래스에 작성할 수 있도록 한 것이 특징입니다. 대신 Spring의 Bean auto scan과 같은 요소들은 여전히 XML 파일에 작성해서 알려줘야 한다는 단점이 있었습니다.

 
이러한, xml 파일을 작성 후 <context:component-scan base-package="패키지 경로" /> 와 같은 태그를 추가하면 Bean으로 등록하고자 하는 클래스에 @Component 어노테이션만 붙여도 해당 클래스를 객체로 생성해 Bean으로 등록해주었던 것입니다. 현재 이를 완전히 대체한 것이 바로 Java-based Configuration입니다. 이 부분에 대해서 예전에 김영한씨 강의에서 한번 들었던 것 같은데 잘 기억은 안나네요.
 

Java-based Configuration

자바 기반 Configuration은 스프링 3.0에 추가되었으며 @Configuration 어노테이션을 통해 Spring IoC 컨테이너에 클래스가 Bean으로 등록되어야 함을 직접 정의할 수 있으며 @ComponentScan과 같은 어노테이션도 제공합니다.

'개발' 카테고리의 다른 글

MVC 패턴  (3) 2024.10.15
동작 파라미터화 코드 전달하기  (6) 2024.10.10
스프링 부트를 이용한 페이징 구현  (2) 2024.09.27
JWT 토큰을 이용한 로그인 방법 이해  (5) 2024.09.15