빈 스코프란?
빈 스코프는 스프링 빈이 존재할 수 있는 범위를 뜻합니다. 기본적으로 싱글톤 타입으로 생성됩니다.
싱글톤 타입 말고도 프로토 타입과 같은 다양한 스코프들이 존재합니다. 각각의 스코프에 대해서
자세히 알아보도록 하겠습니다.
싱글톤 및 프로토타입 스코프
싱글톤 스코프는 빈에 대한 요청들이 오면 항상 같은 인스턴스의 스프링 빈을 반환합니다.
하지만 프로토 타입 스코프는 요청들이 오면 빈을 생성하고 필요한 의존관계를 주입한 뒤에
반환하고 더 이상 스프링 컨테이너가 관리하지 않습니다. 다시 말해서 각각의 요청마다 새로운
빈을 생성하고 반환한다는 뜻이됩니다.
여기서 잠깐 짚고 넘어가야 되는 부분은 스프링 컨테이너가 관리하지 않는다는 의미는 뭘까요?
자바 객체들을 관리하는 공간인 스프링 컨테이너는 개발자 대신 생성부터 소멸까지를 관리해줍니다.
즉 객체가 소멸하기 전에 @PreDestory 어노테이션을 활용하여 해야할 메서드들을 실행하는 등의
작업들을 스프링 컨테이너가 해주게 됩니다. 스프링 컨테이너가 생성에만 관여하고 더 이상 관리
하지 않는다는 말의 뜻은 @PreDestroy와 같은 빈 종료 메서드가 호출되지 않는 뜻이기도 합니다.
코드를 통해 살펴보도록 하겠습니다.
<싱글톤 타입>
코드를 설명하자면, Scope가 싱글톤으로 설정된 SingletonBean 클래스를 스프링 컨테이너에 등록하고
해당 빈을 스프링 컨테이너를 통해 두번 객체로 받아옵니다. 테스트를 통하여 받아온 두 인스턴스가
동일한지 확인합니다. 또한 SingletonBean 클래스는 @PostConstruct와 @PreDestroy 어노테이션을
활용하여 생성과 소멸 시점에 각각 init, destory를 콘솔로 출력하는 메서드를 지니고 있습니다.
위는 테스트 결과하면입니다. 두 인스턴스가 동일한 결과가 나왔고 생성과 소멸시점과 관련된 메서드가
정상적으로 호출되는 것을 볼 수 있습니다.
<프로토 타입>
싱글톤과 마찬가지로 프로토타입 빈관련 클래스는 생성과 소멸시점에 관련된 메서드를 지니고 있습니다.
프로토타입은 싱글톤과 다르게 요청할 때마다 스프링컨테이너가 새로운 빈 인스턴스를 반환합니다.
결과화면은 다음과 같습니다. 싱글톤 타입과 차이점은 빈 요청이 들어올때마다 새로운 인스턴스를
생성 후 반환하기 때문에 빈 생성과 관련된 init 메서드가 두번 실행된 것을 볼 수 있습니다.
또한 생성 후 반환한 다음 스프링 컨테이너가 더 이상 관리하지 않기 때문에
소멸과 관련된 @destroy 메서드는 실행되지 않는 것을 확인할 수 있습니다.
최종적으로 두 인스턴스가 같지 않다는 테스트 결과화면이 정상적으로 나오는것을 알 수 있습니다.
프로토타입 빈은 실무에서 쓰일까?
공부를 하면서 생각든 점은 프로토타입이 필요한 경우가 있을까? 였습니다.
웹 어플리케이션 개발에선 사실 상 싱글톤 빈으로 모든 문제를 해결할 수 있기 때문에
프로토타입 빈을 직접적으로 사용하는 일은 드물다고 합니다!
웹 스코프
웹 스코프는 웹 환경에서만 동작합니다. 또한 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리를 합니다.
따라서 종료 메서드가 호출됩니다. 웹 스코프의 대표적인 것이 request 스코프가 있습니다.
1. request 스코프
HTTP 요청이 들어오고 나갈 때 까지 유지되는 스코프입니다.
각각의 HTTP요청마다 별도의 빈 인스턴스가 생성되고 관리됩니다.
2. session 스코프
HTTP 세션마다 하나의 빈을 사용합니다. HTTP Session과 동일한 생명주기를 지닙니다.
3. application 스코프
서블릿 컨텍스트와 동일한 생명주기를 지니는 스코프입니다.
이상으로 빈 스코프에 대한 개념 정리를 마치겠습니다.
본 포스팅은 인프런 김영한 님의 <스프링 핵심 원리 - 기본편>을 듣고 정리한 내용입니다.
'Spring' 카테고리의 다른 글
@Transaction에 대하여 (0) | 2023.01.06 |
---|---|
스프링 검증 BindingResult에 대하여 (0) | 2022.12.28 |
Reflection 이란? (0) | 2022.12.16 |
스프링부트에서의 API예외 처리 방법 (1) | 2022.12.02 |
스프링과 스프링부트 무슨 차이가 있을까? (0) | 2022.11.25 |