[Spring] 스프링 컨테이너와 빈 관리: IoC와 의존성 주입의 핵심

눈치없어·2025년 1월 17일

스프링 프레임워크는 객체 지향 프로그래밍의 장점을 극대화하며 개발자가 객체의 생생, 관리, 의존성 주입 등을 편리하게 처리할 수 있도록 지원하는데 스프링 프레임워크의 핵심 요소 중 하나가 스프링 컨테이너(Spring Container)스프링 빈(Spring Bean)이다.


스프링 컨테이너

스프링 컨테이너는 애플리케이션에서 사용할 객체를 생성하고 관리하며, 객체 간의 의존성을 설정한다.
IoC(제어 역전) 개념에 기반하여 작동하고 개발자는 객체 생성과 생명 주기 관리를 신경 쓰지 않고 비즈니스 로직에 집중할 수 있다.

주요 기능

객체 생성 및 관리: 빈의 생성, 초기화, 소멸까지의 전 과정을 관리
의존성 주입: 객체 간의 관계를 설정하고 주입
빈 설정 관리: XML, Java Config, 어노테이션을 통한 다양한 설정 지원

스프링 컨테이너의 종류

  • BeanFactory
    - 가장 기본적인 컨테이너로, 스프링 빈의 생성 및 의존성 주입을 수행
    • 지연 로딩(Lazy Loanding) 을 기본으로 하며, 필요한 시점에 빈을 생성
  • ApplicationContext
    - BeanFactory를 확장한 인터페이스로, 애플리케이션 개발에 유용한 여러 부가 기능 제공
    • 주요 기능:
      • 국제화: 메시지 소스와 같은 국제화 지원
      • 이벤트 관리: 이벤트 발행 및 리스너 등록
      • 웹 통합 지원: Spring MVC와 같은 웹 애플리케이션과의 통합 기능

스프링 빈

스프링 빈은 스프링 컨테이너에 의해 관리되는 객체, 애플리케이션의 주요 구성 요소(서비스, 레포지토리, 컨트롤러 등)을 의미한다.

특징
  • 싱글톤 스코프: 스프링 컨테이너는 기본적으로 빈을 싱글톤으로 관리하여 동일한 빈의 인스턴스를 재사용
  • 의존성 주입 지원: 스프링 빈은 다른 빈과 의존성을 컨테이너를 통해 주입 받음
  • 라이프사이클 관리: 빈의 생성, 초기화, 소멸 과정을 스프링 컨테이너가 관리

빈 등록 방법

  1. XML 기반 설정:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.example.UserService"/>
</beans>
  1. Java Config 기반 설정:
@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }
}
  1. 어노테이션 기반 설정:
@Component
public class UserService {
    // Service logic
}

스프링 컨테이너와 빈의 동작 과정

스프링 컨테이너가 애플리케이션을 시작하고 빈을 관리하는 단계별 과정

  1. 설정 파일 로드
    • XML, Java Config, 어노테이션 등의 설정 파일을 스프링 컨테이너가 읽음.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
  1. 빈 정의 등록

    • 설정 파일에 따라 빈을 정의하고 컨테이너에 등록
  2. 빈 생성 및 초기화

    • 의존성 주입을 통해 필요한 빈을 생성하고 초기화
  3. 애플리케이션 실행

    • 컨테이너에서 관리 중인 빈을 애플리케이션에서 사용
  4. 컨테이너 종료 및 빈 소멸

    • 컨테이너 종료 시 빈 소멸 콜백 메서드를 호출하여 자원을 해제

빈의 라이프사이클 관리

스프링은 빈의 생명 주기를 관리하기 위해 특정 메서드를 제공.

  • @PostConstruct: 빈 초기화 직후 실행
  • @PreDestroy: 빈 소멸 직전에 실행
@Component
public class MyBean {

    @PostConstruct
    public void init() {
        System.out.println("빈 초기화");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("빈 소멸");
    }
}

3줄 요약

  • 스프링 컨테이너는 애플리케이션 객체를 생성하고 관리하며, 객체 간의 의존성을 설정한다.
  • 스프링 빈은 컨테이너에 의해 관리되는 객체로 다양한 설정 방식과 의존성 주입을 통해 유연하고 재사용 가능한 코드를 작성할 수 있다.
  • 스프링 컨테이너와 빈의 작동 원리를 깊이 이해하면 더욱 견고한 애플리케이션을 설계할 수 있다.

빈 생명주기 콜백, 빈 스코프 관련 내용 작성 예정

profile
dock 사이즈 다르잖아

0개의 댓글