Spring Boot

[Spring] Spring Bean이란?

kittity 2025. 3. 6. 19:16

목차

  1. Spring Bean이란?
  2. Bean 등록 방법
  3. Bean 생성과정 / 생명주기
  4. Bean Scope

 

1. Spring Bean이란?

  • Spring Bean
    • 빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체로 스프링 컨테이너에 의해 관리된다.
    • 스프링 빈은 싱글톤(Singleton) 패턴으로 관리되어 애플리케이션 전체에서 하나의 인스턴스만 존재하게 된다.
  • Bean 왜 쓸까?
    • Bean을 통해 스프링 컨테이너에 객체 간의 의존 관계를 관리할 수 있다.

 

2. Bean 등록 방법

Bean 등록 방법으로 다음과 같은 방법이 있다.

(1) xml에 직접 등록

(2) @Bean 어노테이션 사용

  • 메서드 위에 @Bean태그를 사용하고 AppConfig 객체 위에 @Configuration, @ComponentScan, @ImportResource 어노테이션을 선언하면 된다.

(3) @Component, @Controller, @Service, @Repository 어노테이션 사용

  • @Component가 특수화된 어노테이션이 @Controller, @Service, @Repository 이다.

 

3. Bean 생성과정 / 생명주기

스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 → 종료
  • 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까?
  • 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 따라서 안전하게 종료 작업을 진행할 수 있다.
  • 초기화 콜백(init) : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
    • 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 기능을 제공한다.
  • 소멸 전 콜백(destroy): 빈이 소멸되기 직전에 호출
    • 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 따라서 안전하게 종료 작업을 진행할 수 있다.
  • 스프링은 빈 생명주기 콜백을 지원하는 방법으로 @PostConstruct, @PreDestory 어노테이션 사용하는 것을 권장한다. (외부 리소스 연결, 임시 파일 삭제 등)

 

4. Bean Scope

  • Bean Scope는 빈이 관리되는 범위를 의미하며, 스프링은 기본적으로 모든 빈을 singleton으로 생성하고 관리한다.
  • Bean Scope의 종류는 다음과 같다.
    • 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.
    • 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.
    • 웹 관련 스코프 (웹 관련 기능이 들어가야 사용 가능하다)
      • request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다.
      • session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다.
      • application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다.
  • 싱글톤 vs 프로토타입
    • 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다.
    • 반면에 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.

 

728x90