개발/SPRING

Spring Bean의 Scope

지잉지잉 2021. 8. 19. 21:08

출처: https://data-flair.training/blogs/spring-bean-scope/

Spring Bean의 Scope

  • 스프링에서는 Bean으로 지정된 객체는 기본적으로 싱글톤 객체로 관리하게 됩니다. 하지만 요구사항에 따라 싱글톤이 아닌 방법으로 빈을 구성해야 하는 경우가 있는데, 이와 같은 경우를 명시적으로 구분하기 위해 스프링에서는 scope라는 키워드를 사용합니다.

Scope 종류

1. Singleton

  • 하나의 Spring 컨테이너에는 하나의 Bean 객체만 존재할 수 있다. 
  • 장점 : 고정된 메모리 영역을 사용하므로 메모리 절약, 데이터 공유 용이, 데이터 무결성, 접근성 확보
  • 단점 : 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙" 을 위배하게 된다.

 

2. Prototype

  • Bean 호출 시 마다 새로운 인스턴스를 생성함. 하나의 Spring 컨테이너에 다수의 Bean이 존재함.

 

3. Request

  • HTTP 요청별로 인스턴스화 되며 요청이 끝나면 소멸됨.

 

4. Session

  • HTTP 세션별로 인스턴스화 되며 세션이 끝나면 소멸됩니다.

 

5. Global-Session

  • 포틀릿 기반의 웹 애플리케이션 용도로 전역 세션 스코프가 빈과 같은 스프링 MVC를 사용한 포탈 애플리케이션 내의 모든 포틀릿 사이에 공유를 할 수 있습니다.

 

6. Thread

  • 새 스레드에서 요청하면 새로운 bean 인스턴스를 생성합니다. 같은 스레드의 요청에는 항상 같은 인스턴스가 반환됩니다.

 

7. Custom

  • org.pringframework.beans.factory.config.Scope를 구현하고 커스텀 스코프를 스프링의 설정에 등록하여 사용합니다.