Bean

개념

Scope

Singleton

  • 빈의 기본 범위
  • 컨테이너 당 하나의 빈 인스턴스만 생성되며, 전체 에플리케이션에서 공유 및 재사용 된다.
  • 싱글톤 빈은 애플리케이션 전체에서 부작용 없이 공유할 수 있는 상태 없는 서비스나 components에 이상적이다.

Prototype

  • 매 요청될 때마다 새로운 빈인스턴스 생성
  • 각 요청마다 별도의 빈 인스턴스가 필요한 경우에 사용된다.
  • 상태를 유지하거나 다른 사용 사례에 대한 특정 구성이 필요한 경우 등이 있다.

Request(Web-aware ApplicationContext only)

  • 이 범위에서는 각 HTTP 요청에 대해 새 빈 인스턴스가 생성된다.
  • HTTP 요청 라이프사이클 동안 사용가능하지만, 다른 요청 간에 공유되지는 않는다.
  • 요청별 데이터 또는 상태를 저장하는 데 유용

Session(Web-aware ApplicationContext only)

  • 각 사용자 세션에 대해 새 빈 인스턴스가 생성
  • 동일한 사용자 세션 내의 여러 HTTP 요청에서 공유되지만, 다른 세션에는 공유되지 않는다.

Application(Web-aware ApplicationContext only)

  • 단일 인스턴스가 전체 웹 애플리케이션(ServletContext)에서 공유된다.
  • 구성된 설정이나 캐시된 데이터와 같은 애플리케이션 전체 데이터를 저장하는데 유용합니다.

WebSocket(Web-aware ApplicationContext only)

  • 웹소켓 연결의 라이프사이클에 대해 새 빈 인스턴스가 생성된다.

방법

@Scope 어노테이션을 사용하면 된다.

답해보기

1. 빈의 스코프는 무엇인가?

2. 모든 객체를 스프링 빈으로 등록해도 괜찮나? 안된다면 특정 객체만 빈으로 등록해야 하는 이유는 무엇인가?

  • 메모리 사용량과 성능: 모든 객체를 빈으로 등록하면 더 많은 메모리를 사용하고 성능 저하. 컨테이너가 관리할 필요가 없는 객체를 빈으로 등록하면 불필요한 오버 헤드 발생
  • 관리 복잡성: 컨테이너에서 관리되기 때문에 복잡성 증가
  • 빈 간의 관계 결합: 스프링 빈을 사용하면 객체 간의 결합이 느슨해지지만, 의존성 주입이 필요하지 않은 객체를 빈으로 등록하면 불필요한 결합 발생 애플리케이션의 구성 요소와 관련된 객체만 빈으로 등록 유틸 클래스, 도메인 모델, 값 객체 등과 같은 객체는 빈으로 등록하지 않는게 좋음

3. 빈으로 등록하는 것과 스태틱 메서드를 사용하는 것 중 어떤 방법을 선호하는가? 구분하는 기준은 무엇인가?