본문 바로가기

SPRING/Spring

[스프링| 스프링 핵심 원리 | 기본편 | 스프링 컨테이너와 스프링 빈]BeanFactory와 ApplicationContext

BeanFactory

BeanFactory는 스프링 프레임워크의 핵심 컨테이너 중 하나로, 애플리케이션 내에서 빈(bean) 객체를 생성하고 관리하는 기능을 담당한다. BeanFactory는 ApplicationContext 인터페이스의 상위 인터페이스로, 빈을 관리하고 의존성 주입(Dependency Injection)을 처리하는 기본 기능을 제공한다.

주요 기능

  • 빈의 생성과 관리: BeanFactory는 빈의 정의를 바탕으로 빈 인스턴스를 생성하고, 이를 애플리케이션 전반에 걸쳐 관리한다. 빈은 주로 XML 파일이나 애너테이션을 통해 정의되며, BeanFactory는 이러한 정의를 읽어서 빈 객체를 생성한다.
  • 의존성 주입: 객체들의 의존성을 외부에서 관리하고 주입해주는 기능을 수행한다. 이를 통해 코드는 더 깨끗해지고, 결합도는 낮아지며, 유닛 테스트가 용이해진다.
  • 지연 로딩: BeanFactory는 기본적으로 빈을 지연 로딩(lazy loading) 방식으로 처리한다. 즉, 스프링 컨테이너가 생성될 때 모든 빈을 미리 생성하지 않고, 빈이 요청될 때(즉, getBean() 메서드가 호출될 때) 해당 빈을 생성한다.

BeanFactory와 ApplicationContext

ApplicationContext는 BeanFactory를 상속받는 보다 고급 인터페이스이며, BeanFactory의 기본 기능에 추가적인 기능을 제공한다. 예를 들어:

  • 국제화가 지원되는 메시지 처리
  • 이벤트 발행을 위한 인터페이스
  • 다양한 형태의 애플리케이션 레이어에서의 투명한 통합을 위한 환경 설정
  • 애플리케이션 생명주기 이벤트
  • 특정 프로파일을 위한 빈 설정

사용 사례

일반적으로 개발자들은 BeanFactory를 직접 사용하기보다는 ApplicationContext를 사용한다. ApplicationContext는 BeanFactory의 모든 기능을 포함하면서, 애플리케이션 개발에 필요한 더 풍부한 기능을 제공한다. 하지만, 매우 경량의 애플리케이션 또는 메모리 자원이 제한된 환경에서는 BeanFactory를 사용하여 리소스 사용을 최소화할 수 있다.

ApplicationContext

ApplicationContext는 BeanFactory 인터페이스를 확장한 컨테이너 인터페이스로, 애플리케이션에서 객체(빈)의 생성, 설정, 관리를 처리하는 핵심적인 부분입니다. 이 컨테이너는 더욱 확장된 기능을 제공하여, 실제 엔터프라이즈 어플리케이션 개발에서 필요한 다양한 기능을 지원합니다.

주요 기능 및 특징

  • 빈의 자동 생성과 관리: ApplicationContext는 XML, 애너테이션, 자바 설정 클래스 등 다양한 방법으로 정의된 빈 설정 정보를 읽어와 자동으로 빈을 생성하고 관리합니다. 이 과정에서 의존성 주입도 자동으로 처리됩니다.
  • AOP 지원: 스프링 컨텍스트는 애플리케이션의 횡단 관심사(Cross-cutting Concerns)를 관리하기 위해 AOP(Aspect-Oriented Programming)를 지원합니다. 이를 통해 보안, 트랜잭션 관리, 로깅 등의 기능을 애플리케이션 전반에 걸쳐 쉽게 적용할 수 있습니다.
  • 이벤트 처리: ApplicationContext는 이벤트 발생과 처리 기능을 제공하여, 애플리케이션 컴포넌트 간의 낮은 결합도를 유지하면서 이벤트 기반 프로그래밍을 가능하게 합니다.
  • 국제화 지원: 메시지 소스를 관리하여 다양한 언어 지원이 필요한 국제화 애플리케이션을 쉽게 개발할 수 있습니다.
  • 환경 추상화: 프로파일과 프로퍼티 파일을 통해 개발, 테스트, 운영 등 다양한 환경에서의 설정을 분리하여 관리할 수 있습니다.

ApplicationContext의 주요 유형

  1. ClassPathXmlApplicationContext: 클래스 패스에 있는 XML 파일로부터 빈 설정을 로드합니다.
  2. FileSystemXmlApplicationContext: 파일 시스템에 있는 XML 파일로부터 빈 설정을 로드합니다.
  3. AnnotationConfigApplicationContext: 자바 애너테이션을 기반으로 한 클래스로부터 빈 설정을 로드합니다.
  4. WebApplicationContext: 웹 애플리케이션을 위해 특별히 설계된 컨텍스트로, 서블릿 컨테이너와 통합되어 웹 애플리케이션의 실행을 지원합니다.

사용법

일반적으로 스프링 애플리케이션에서는 ApplicationContext를 직접 초기화하고 직접 빈을 조회하기 보다는, 스프링의 자동 의존성 주입 기능을 사용하여 빈을 필요한 컴포넌트에 자동으로 주입받도록 설정합니다. 이 방식은 코드의 결합도를 낮추고, 개발의 편의성과 유지보수성을 크게 향상시킵니다.

ApplicationContext는 스프링 프레임워크의 가장 핵심적인 요소 중 하나로, 빈의 생명 주기 관리, 의존성 주입, 설정 정보 관리 등 애플리케이션의 다양한 요소를 유기적으로 결합하여 강력하고 유연한 애플리케이션 개발을 가능하게 합니다.