빈 스코프 보충자료
스프링 빈 스코프
스프링 빈의 스코프는 빈이 존재할 수 있는 범위를 정의합니다. 애플리케이션의 요구사항에 따라 적절한 스코프를 설정하여 빈의 생명주기를 효율적으로 관리할 수 있습니다.
1. 주요 빈 스코프
1.1 싱글톤 스코프
스프링 컨테이너 내에서 하나의 인스턴스만 생성됩니다.
애플리케이션의 시작부터 종료까지 유지되며, 가장 넓은 범위를 가집니다.
기본 스코프로, 특별히 설정하지 않으면 싱글톤 스코프로 설정됩니다.
특징
메모리 효율적.
모든 요청에서 동일한 객체를 사용.
상태를 공유하면 문제를 발생시킬 수 있으므로 무상태 설계가 중요.
1.2 프로토타입 스코프
요청 시마다 새로운 인스턴스를 생성합니다.
스프링 컨테이너는 빈의 생성과 의존관계 주입까지만 관리하고, 이후에는 더 이상 관리하지 않습니다.
매우 짧은 생명주기를 가집니다.
특징
매 요청마다 독립된 인스턴스를 제공.
@PreDestroy
와 같은 소멸 콜백 메서드가 호출되지 않음.
예시
1.3 웹 스코프
웹 환경에서 사용되는 빈의 스코프입니다.
종류
Request 스코프
HTTP 요청이 시작될 때 생성되고, 요청이 완료되면 소멸됩니다.
Session 스코프
HTTP 세션이 생성될 때 생성되고, 세션이 종료될 때 소멸됩니다.
Application 스코프
서블릿 컨텍스트와 동일한 생명주기를 가집니다.
예시
2. 프로토타입과 싱글톤의 혼용 문제
문제 상황
싱글톤 빈이 프로토타입 빈을 주입받아 사용할 경우, 싱글톤 빈의 생명주기에 따라 프로토타입 빈이 관리되지 않습니다. 이로 인해 프로토타입 빈이 의도와 달리 재사용되는 문제가 발생합니다.
예시 코드
위 코드에서
SingletonBean
은 생성 시점에 주입받은PrototypeBean
을 계속 사용하게 됩니다.새로운 프로토타입 빈을 사용하려면 직접 요청해야 합니다.
해결 방법: ObjectProvider
또는 ApplicationContext
사용
ObjectProvider
를 사용하여 매번 새로운 프로토타입 빈을 요청합니다.
3. 테스트 코드
3.1 싱글톤 빈 테스트
3.2 프로토타입 빈 테스트
Last updated