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 같은 종료 콜백이 실행되지 않는다. 필요한 경우 클라이언트가 직접 종료 처리를 해야 한다. |
'Dev > Spring Framework' 카테고리의 다른 글
『Spring MVC』 필터, 인터셉터 (0) | 2024.11.26 |
---|---|
『Spring MVC』 메시지, 국제화 (0) | 2024.11.26 |
『Spring Boot』 Spring Boot Annotation 정리 (1) | 2024.11.25 |
『Spring Core』 Bean LifeCycle (2) | 2024.11.07 |
『Spring Core』 DI (Dependency Injection) (0) | 2024.11.07 |