Home > Spring > 🍃[Spring] 스프링 컨테이너(Spring Container)란?

🍃[Spring] 스프링 컨테이너(Spring Container)란?
Spring Framework

🍃[Spring] 스프링 컨테이너(Spring Container)란?

1️⃣ 스프링 컨테이너(Spring Container)란?

  • 스프링 컨테이너(Spring Container)는 스프일 프레임워크의 핵심 구성 요소로, 애플리케이션에서 사용되는 객체들은 관리하고 조정하는 역할을 합니다.
    • 이 컨테이너는 객체의 생성, 초기화, 의존성 주입, 설정 및 라이프사이클을 관리하여 애플리케이션의 주요 컴포넌트들이 잘 협력할 수 있도록 돕습니다.
  • 스프링 컨테이너는 종종 IoC(Inversion of Control) 컨테이너 또는 DI(Dependency Injection) 컨테이너 라고도 불립니다.

2️⃣ 스프링 컨테이너의 주요 기능.

  • 1. 빈(Bean) 관리
    • 스프링 컨테이너는 애플리케이션에 필요한 모든 빈(Bean)을 정의하고 생성합니다.
      • 이 빈들은 XML 설정 파일, 자바 설정 클래스, 또는 애노테이션을 통해 정의될 수 있습니다.
    • 빈의 라이프사이클(생성, 초기화, 소멸)을 관리하고, 의존성을 자동으로 주입하여 빈 간의 결합도를 낮추어 줍니다.
  • 2. 의존성 주입(Dependency Injection)
    • 스프링 컨테이너는 객체 간의 의존성을 자동으로 주입하여, 객체들이 직접 다른 객체를 생성하거나 관리하지 않도록 합니다.
      • 이를 통해 코드의 유연성과 재사용성을 높입니다.
    • 의존성 주입은 생성자 주입, 세터 주입, 필드 주입 등 다양한 방법으로 이루어질 수 있습니다.
  • 3. 설정 관리
    • 컨테이너는 애플리케이션의 설정 정보를 관리합니다.
      • 이는 빈의 정의뿐만 아니라, 데이터베이스 연결 설정, 메시지 소스, 트랜잭션 관리 등의 다양한 설정을 포함합니다.
  • 4. 라이프사이클 인터페이스 지원
    • 컨테이너는 빈의 라이프사이클 인터페이스(InitializingBean, DisposableBean)을 통해 빈의 초기화 및 소명 작업을 쉽게 구현할 수 있도록 지원합니다.
    • 또한 @PostConstruct, @PreDestroy 애노테이션을 통해 라이프사이클 콜백을 간단하게 구현할 수 있습니다.
  • 5. AOP(Aspect-Oriented Programming) 지원
    • 스프링 컨테이너는 AOP 기능을 지원하여, 애플리케이션 전반에 걸쳐 공통적으로 사용되는 로직(예: 로깅, 트랜잭션 관리)을 비즈니스 로직과 분리하여 모듈화할 수 있게 합니다.

3️⃣ 스프링 컨테이너의 종류.

  • 스프링에는 다양한 컨테이너 구현체가 있으며, 대표적으로 다음과 같은 종류가 있습니다.
    • 1. BeanFactory
      • 스프링의 가장 기본적인 컨테이너로, 빈의 기본적인 생성과 의존성 주입을 제공합니다.
        • 하지만 BeanFactory는 지연 로딩(lazy loading) 방식으로 동작하므로, 빈이 실제로 요청될 때 생성됩니다.
    • 2. ApplicationContext
      • BeanFactory의 확장판으로, 대부분의 스프링 애플리케이션에서 사용되는 컨테이너입니다.
      • ApplicationContext 는 BeanFactory의 기능을 포함하면서도, 다양한 기능(예: 이벤트 발행, 국제화 메시지 처리, 환경 정보 관리)을 추가로 제공합니다.
      • ApplicationContext 의 구현체에는 ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, AnnotationConfigApplicationContext 등이 있습니다.

4️⃣ 스프링 컨테이너의 동작 과정.

  • 1. 빈 정의 로드
    • 컨테이너가 시작되면, XML 파일, 자바 설정 파일, 애노테이션 등을 통해 빈의 정의를 읽어들입니다.
  • 2. 빈 생성 및 초기화
    • 컨테이너는 필요한 빈들을 생성하고 초기화 작업을 수행합니다.
      • 이때 의존성이 있는 경우, 필요한 빈들을 먼저 생성하여 주입합니다.
  • 3. 의존성 주입
    • 빈의 생성 과정에서 필요한 의존성들이 주입됩니다.
      • 이 과정에서 생성자 주입, 세터 주입 등이 사용됩니다.
  • 4. 빈 제공
    • 컨테이너는 요청 시 빈을 제공하며, 애플리케이션은 이 빈을 통해 다양한 작업을 수행할 수 있습니다.
  • 5. 빈 소멸
    • 애플리케이션이 종료되거나 컨테이너가 종료될 때, 컨테이너는 빈의 소멸 작업을 처리합니다.

스프링 컨테이너는 이 모든 과정을 자동으로 처리하며, 이를 통해 개발자는 비즈니스 로직에 집중할 수 있게됩니다.