Post

Spring[빈 스코프]

빈 스코프

빈 스코프란?

스프링 컨테이너가 빈(Bean)객체를 생성하고 유지하는 범위를 나타냅니다. 또한, 빈의 스코프는 빈이 언제 생성되고 얼마나 오랫동안 유지되는지에 대한 규칙을 정의합니다.

빈 스코프 등록 방법

다음과 같이 지정이 가능 합니다.

컴포넌트 스캔 자동 등록

1
2
3
@Scope("prototype")
@Component
public class ABean {}

수동 등록

1
2
3
4
5
@Scope("prototype")
@Bean
public class ABean {
    return new ABean();
}

다양한 스코프

일반적으로 사용되는 빈 스코프에는 여러가지가 있습니다.

  1. 싱글톤(Singleton) 스코프
    • 스프링 컨테이너의 시작과 종료까지 유지됩니다.
    • 기본 스코프이며, 가장 넓은 범위의 스코프 입니다.
  2. 프로토타입(Prototype) 스코프
    • 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입 까지만 관여합니다.
    • 매우 짧은 범위의 스포크 입니다.
  3. 웹 관련 스포크
    1. request
      • 웹 요청이 들오오고, 나갈때 까지 유지되는 스코프 입니다.
    2. session
      • 웹 세션이 생성되고, 종료될 때 까지 유지되는 스코프 입니다.

싱글톤과 프로토타입의 요청

싱글톤 빈 요청

Spring Singleton png

  • 클라이언트가 싱글톤 스코프의 빈을 스프링 컨테이너에 요청을 합니다.
  • 요청을 받은 스프링 컨테이너는 본인이 관리하는 스프링 빈을 반환시켜 줍니다.
  • 이후에 스프링 컨테이너에 같은 요청이 들어와도, 같은 객체 인스턴스의 스프링 빈을 반환시켜 줍니다.

프로토타입 빈 요청

프로토타입 빈 요청 과정

Spring Singleton png

프로토타입 빈 반환 과정

Spring Singleton png

  • 클라이언트가 프로토타입 스코프의 빈을 스프링 컨테이너에 요청합니다.
  • 요청을 받은 스프링 컨테이너는 이 시점에 프로토타입 빈을 생성하고, 필요한 의존 관계를 주입 합니다.
  • 스프링 컨테이너는 생성한 프로토타입 빈을 클라이언트에 반환시켜 줍니다.
  • 이후에 스프링 컨테이너에 같은 요청이 들어오면 항상 새로운 프로토타입 빈을 생성하여 반환 합니다.

정리

이처럼 싱글톤 스코프는 요청이 들어오면 스프링 컨테이너는 자신이 관리하는 스프링 빈을 반환시켜 주고, 항상 같은 인스턴스의 스프링 빈을 반환 시켜 줍니다.

하지만 프로토 타입의 스코프는 프로토타입 빈은 생성하고, 의존관계 주입, 초기화 까지만 처리 합니다.

클라이언트에 빈을 반환하고 난 다음에는 스프링 컨테이너는 생성된 프로토타입 빈을 관리하지 않는 다는게 핵심입니다.

또한, 프로토타입 스코프는 관리할 책임이 클라이언트에 있다는게 특징입니다.

다음 포스터에서는 웹관련 스코프에 대해 알아가 보겠습니다.

This post is licensed under CC BY 4.0 by the author.