- 학습 목표 1 : 빈 스코프 학습하기
빈이 생성되고 유지되는 범위
-
스프링 전체 단위의 스코프 스프링 컨테이너가 실행되고 있는 전체 및 그 이상의 범위
-
싱글톤(Singleton)
애플리케이션에서 하나의 인스턴스만 생성되는 스코프 → 리소스를 절약하고, 모든 사용자에게 도일한 상태를 제공하기 위해 사용한다.- ex. 주방에 있는 하나뿐인 큰 냄비 - 모든 요리사가 공유한다.
@Component public class SingletonBean { // ... }
기본적으로 스프링 빈은 싱글톤 스코프로 생성된다.
-
프로토타입(Prototype)
요청할 대마다 새로운 인스턴스를 생성하는 스코프 → 각 요청마다 별도의 상태를 유지해야 할 때 사용한다.- ex. 주방에 있는 컵 - 요리사마다 서로 다른 컵을 사용한다.
@Scope("prototype") @Component public class PrototypeBean { // ... }
-
-
스프링 웹 어플리케이션 단위의 스코프 스프링 웹에서만 유효한 범위 = 유저의 요청(
POST
,GET
등)으로부터 응답이 나가는 그 순간까지
-
Request
HTTP 요청마다 새로운 인스턴스를 생성하는 스코프 → 각 HTTP 요청마다 별도의 상태를 유지해야 할 때 사용한다. 하나의 요청에 하나의 빈이 생성되고 소멸된다.- ex. 레스토랑에서 각 손님이 따로 제공받는 메뉴판
@Component @ReqeustScope public class RequestBean { // ... }
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) @Component public class RequestBean { // ... }
- 특정 요청 클래스에 이 클래스를 주입받는 경우, 매 요청마다 RequestBean 객체가 새로 생성된다.
-
Session
HTTP 세션마다 새로운 인스턴스를 생성하는 스코프 → 각 사용자 세션마다 별도의 상태를 유지해야 할 때 사용한다.- ex. 호텔에서 머무는 동안 손님에게 제공되는 방 - 머무는 동안 상태가 유지된다.
@Component @SessionScope public class SessionBean { // ... }
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) @Component public class SessionBean { // ... }
- 특정 세션 클래스에 이 클래스를 주입받는 경우, 매 세션마다 SessionBean 객체가 새로 생성된다.
-
Application
웹 어플리케이션 단위에서 하나의 인스턴스를 생성하는 스코프 → 웹 어플리케이션 전체에서 공유해야 할 상태를 유지해야 할 때 사용한다.- ex. 호텔 전체에서 공유하는 수영장 - 모든 손님이 공유한다.
@Component @ApplicationScope public class ApplicationBean { // ... }
@Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS) @Component public class ApplicationBean { // ... }
- 특정 웹 어플리케이션 클래스에 이 클래스를 주입받는 경우, 웹 어플리케이션 전체에서 ApplicationBean 객체가 공유된다.
-
웹 소켓 단위의 스코프도 있다.
-
-
❓ 언제 스코프를 사용할 때 좋은지
-
싱글톤
- 스프링 IoC 컨테이너 전체에서 빈이 상태를 가지지 않거나, 상태가 공유되어야 하는 경우
-
프로토타입
- 각 사용자가 독립적인 상태를 유지해야 하는 경우
-
리퀘스트
- 각 HTTP 요청마다 독립적인 상태를 유지해야 하는 경우
-
세션
- 각 사용자 세션마다 독립적인 상태를 유지해야 하는 경우
-
어플리케이션
-
웹 어플리케이션 전체 (
서블릿 수준에서
) 에서 공유해야 하는 상태를 유지해야 하는 경우서블릿 이란? 웹 서버에서 동작하는 자바 클래스로, 클라이언트의 요청을 처리하고 동적 콘텐츠를 생성하는 역할을 한다.
-
-
-
스크럼 중 완료한 작업:
빈 스코프 학습하기
-
빈 스코프에 대해 이해하고, 각 스코프의 특징과 사용하는 경우를 알게 되었다.
-
싱글톤, 프로토타입, 리퀘스트, 세션, 어플리케이션 스코프에 대해 알게 되었다.
-
스프링 빈의 스코프를 설정하는 방법을 알게 되었다.
-
- 제푸의 강의 자료