Programming/Spring

Spring Container

khj1999 2025. 2. 6. 20:58

스프링 컨테이너(Spring Container)는 스프링 프레임워크의 핵심 개념 중 하나로, 객체(Bean)의 생성, 관리, 소멸을 담당하는 역할을 합니다. 이를 통해 개발자는 객체의 생성과 관계 설정을 직접 처리하지 않고, 스프링이 이를 대신 관리하도록 할 수 있다


🌱 스프링 컨테이너(Spring Container)란?

스프링 컨테이너는 스프링의 IoC(Inversion of Control) 기능을 제공하는 핵심 요소이다. 컨테이너는 개발자가 직접 객체를 생성하지 않고, 스프링이 객체의 라이프사이클을 관리하도록 위임하는 역할을 함/


🏗️ 스프링 컨테이너의 주요 기능

  1. 객체(Bean) 생성 및 관리
    • 개발자가 직접 객체를 생성하지 않고, 스프링이 객체를 자동으로 생성하여 관리합.
  2. 의존성 주입(DI, Dependency Injection)
    • 객체 간의 의존 관계를 컨테이너가 자동으로 설정해 줌.
  3. 라이프사이클 관리
    • 객체의 생성부터 소멸까지의 과정(초기화 및 소멸 메서드 호출)을 관리.
  4. 객체의 스코프 관리
    • 싱글톤(기본값), 프로토타입 등의 스코프를 지정할 수 있다.

⚙️ 스프링 컨테이너의 종류

스프링 컨테이너는 여러 가지가 있으며, 가장 많이 사용되는 두 가지는 다음과 같다.

1️⃣ BeanFactory (최소한의 컨테이너)

  • ApplicationContext의 상위 개념으로, 가장 단순한 형태의 컨테이너
  • 지연 로딩(Lazy Loading) 방식으로 Bean을 생성 (필요할 때만 객체 생성)
  • 주로 메모리 효율이 중요한 경우 사용
  • 대표적인 구현체: DefaultListableBeanFactory

2️⃣ ApplicationContext (실제 개발에서 주로 사용)

  • BeanFactory의 기능을 포함하면서 더 많은 부가 기능을 제공
  • 즉시 로딩(Eager Loading) 방식으로 Bean을 미리 생성
  • 메시지 소스, 이벤트 처리, 국제화 등의 추가 기능 제공
  • 대표적인 구현체:
    • AnnotationConfigApplicationContext → Java 기반 설정 사용
    • ClassPathXmlApplicationContext → XML 설정 파일 사용

🛠️ 스프링 컨테이너의 동작 과정

  1. 설정 파일(XML, Java Config 등) 또는 어노테이션 기반으로 Bean 정의
  2. 스프링 컨테이너가 설정을 읽고 Bean을 생성 및 등록
  3. 필요한 의존성을 자동으로 주입(DI)
  4. 필요한 경우 초기화 메서드 실행
  5. 애플리케이션 실행 후 컨테이너가 Bean을 관리
  6. 애플리케이션 종료 시 컨테이너가 Bean 소멸 처리

정리

  • 스프링 컨테이너는 Bean의 생성, 관리, 의존성 주입, 라이프사이클 관리 역할을 수행
  • BeanFactory는 최소한의 컨테이너, ApplicationContext는 실무에서 많이 사용
  • 대부분의 엔터프라이즈 애플리케이션에서는 ApplicationContext를 사용
  • Java 설정(@Configuration + @Bean), XML 설정, 어노테이션 기반 설정(@Component, @Service 등)으로 컨테이너를 설정할 수 있음