본문 바로가기
Dev/Spring Framework

『Spring Core』 Bean Scopes

by 세대교체 2024. 11. 19.

Bean Scope

스프링 프레임워크에서 빈 스코프빈이 생성되고 유지되는 범위를 의미한다. 빈이 얼마나 오래, 어떤 범위에서 유지될지를 결정한다.

 

스프링은 다음과 같은 빈 스코프를 제공한다.

 

 

싱글톤 (Singleton)

기본 스코프로, 스프링 컨테이너 시작부터 종료까지 빈이 유지된다.

 

프로토타입 (Prototype)

요청 시마다 새로운 빈 인스턴스를 생성하며, 생성과 의존관계 주입까지만 컨테이너가 관리한다.

 

웹 관련 스코프

  • request: HTTP 요청이 시작되고 끝날 때까지 빈이 유지된다.
  • session: 세션이 활성화되는 동안 빈이 유지된다.
  • application: 서블릿 컨텍스트와 동일한 범위로 빈이 유지된다.

 

 

Singleton Scope

  • 싱글톤 스코프는 스프링의 기본 스코프이므로 별도의 설정 없이 사용 가능하다.
  • 컨테이너 내에 단 하나의 인스턴스만 존재하며, 모든 요청에서 공유된다.
  • 메모리 효율적이며 상태를 공유해야 하는 빈에 적합하다.

 

 

Prototype Scope

  • 빈을 요청할 때마다 새로운 인스턴스를 생성한다.
  • 생성 및 의존관계 주입 후 스프링 컨테이너가 빈을 더 이상 관리하지 않는다.
  • 각 요청마다 독립적인 빈이 필요할 때 사용한다.
동작 과정
1. 클라이언트가 프로토타입 빈을 요청한다.
2. 스프링 컨테이너는 새로운 빈을 생성하고 의존관계를 주입한다.
3. 생성된 빈을 반환하고 이후 관리하지 않는다.
4. 동일한 요청 시마다 새로운 빈을 생성한다.

 

 

Prototype Scope 사용법

빈 정의에 @Scope("prototype") 어노테이션을 추가하여 설정한다.

  • getBean() 호출 시마다 init() 메서드가 실행되어 새로운 인스턴스가 생성된다.
  • 두 빈의 메모리 주소가 다르므로 서로 다른 객체임을 알 수 있다.
  • destroy() 메서드는 호출되지 않는데, 이는 프로토타입 빈의 소멸을 스프링이 관리하지 않기 때문이다.

실행 결과

 

 

Singleton Scope VS Prototype Scope

빈 관리 라이프사이클 콜백
싱글톤 빈생성부터 소멸까지 스프링이 전체 라이프사이클을 관리한다.  
프로토타입 빈생성과 의존관계 주입까지만 관리하며, 이후는 클라이언트가 책임진다. 프로토타입 빈@PreDestroy 같은 종료 콜백이 실행되지 않는다. 필요한 경우 클라이언트가 직접 종료 처리를 해야 한다.