본문으로 건너뛰기
Advertisement

1.3 스프링 컨테이너와 빈 (Spring Container & Bean)

스프링이 객체를 어떻게 관리하고 조립하는지, 그 핵심 주체인 스프링 컨테이너 와 관리 대상인 빈(Bean) 에 대해 알아봅니다.

1. 스프링 컨테이너 (Spring Container)

스프링 컨테이너는 자바 객체의 생성, 의존성 주입, 생명주기 관리 를 담당하는 거대한 창고와 같습니다. 개발자가 new 연산자로 직접 객체를 생성하는 대신, 컨테이너에게 객체 관리를 맡깁니다.

  • 핵심 인터페이스: BeanFactory (최상위 인터페이스), ApplicationContext (가장 널리 쓰이는 부가기능 포함 컨테이너)
  • 역할: 설정 정보(Java Config, 애너테이션 등)를 바탕으로 객체를 생성하고 서로 연결합니다.

2. 스프링 빈 (Spring Bean)

스프링 컨테이너에 의해 관리되는 자바 객체 를 '빈(Bean)'이라고 부릅니다. 모든 객체가 빈은 아니며, 스프링에게 관리해달라고 명시적으로 등록한 객체들만 빈이 됩니다.

빈 등록 방법

  1. 애너테이션 기반 (Component Scan): 클래스 위에 @Component를 붙여두면 스프링이 자동으로 찾아서 빈으로 등록합니다.
    • @Controller, @Service, @Repository 등은 모두 @Component를 포함한 특수 목적용 애너테이션입니다.
  2. 직접 등록 (Java Config): @Configuration 클래스 내에서 메서드에 @Bean을 붙여 직접 리턴 값을 빈으로 등록합니다.

3. 빈의 생명주기 (Lifecycle)

빈은 스프링 컨테이너가 시작될 때 생성되어 컨테이너가 종료될 때까지 관리됩니다.

  1. 스프링 컨테이너 생성
  2. 스프링 빈 생성
  3. 의존관계 주입
  4. 초기화 콜백: 빈이 사용 준비가 완료됨
  5. 사용: 애플리케이션 로직 수행
  6. 소멸 전 콜백: 자원 해제 등 마무리
  7. 스프링 종료

4. 빈 스코프 (Bean Scope)

스프링 빈은 기본적으로 싱글톤(Singleton) 으로 관리됩니다. 즉, 컨테이너에 딱 하나만 생성되어 어디서든 공유하여 사용합니다.

  • 싱글톤 (Default): 스프링 컨테이너당 하나의 인스턴스만 생성
  • 프로토타입 (Prototype): 빈을 요청할 때마다 새로운 인스턴스 생성

실무에서는 대부분 싱글톤 방식 을 사용하여 메모리 사용을 최적화하며, 스프링이 객체의 상태를 안전하게 관리할 수 있도록 설계합니다.

Advertisement