Bean Scope는 스프링 컨테이너에서 빈 객체의 생명 주기와 접근 범위를 결정하는 설정입니다. 스프링에서는 다양한 범위(Scope)를 제공하여 빈을 관리할 수 있으며, 각 스코프는 빈이 생성되고 활용되는 방식을 다르게 정의합니다. 이를 통해 필요한 용도에 따라 빈의 범위를 설정하고, 자원을 효율적으로 사용할 수 있습니다.
[종류]
1. Singleton
- 설명: 하나의 스프링 컨테이너(Application Context) 내에서 단 하나의 인스턴스만 생성됩니다.
- 사용 시점: 애플리케이션 전역에서 공유되는 빈이 필요할 때 사용합니다.
- 장점: 자원을 절약할 수 있으며, 공통된 데이터를 사용할 때 적합합니다.
- 설정 방법: 별도의 설정 없이 기본값으로 사용되며, @Scope("singleton")을 통해 명시적으로 지정할 수도 있습니다.
<bean id="singletonBean" class="com.example.MyBean" scope="singleton"/>
//혹은 @scope("singleton")
2. prototype
- 설명: 빈을 요청할 때마다 새로운 인스턴스를 생성합니다.
- 사용 시점: 상태가 있는 객체나 여러 인스턴스를 독립적으로 관리할 필요가 있을 때 사용합니다.
- 주의점: 스프링 컨테이너는 프로토타입 빈의 생명 주기를 관리하지 않으므로, 빈이 소멸될 때 자원 정리가 필요하면 개발자가 직접 처리해야 합니다.
- 설정 방법: @Scope("prototype") 또는 XML 설정에서 scope="prototype"으로 설정합니다.
<bean id="prototypeBean" class="com.example.MyBean" scope="prototype"/>
//혹은 @Scope("prototype")
3. request
- 설명: 웹 요청 당 하나의 빈 인스턴스를 생성하여, 요청이 끝나면 소멸됩니다.
- 사용 시점: HTTP 요청별로 상태를 유지하는 빈이 필요할 때 적합합니다.
- 주의점: 웹 애플리케이션 컨텍스트에서만 사용 가능하며, 요청이 끝나면 자동으로 소멸됩니다.
- 설정 방법: @Scope("request") 또는 XML 설정에서 scope="request"로 설정합니다.
<bean id="requestBean" class="com.example.MyBean" scope="request"/>
// @Scope("request")
4. session
- 설명: 웹 세션 당 하나의 인스턴스를 생성하며, 세션이 종료될 때 소멸됩니다.
- 사용 시점: 사용자 세션별로 독립적인 빈 인스턴스를 유지할 때 적합합니다.
- 주의점: 웹 환경에서만 사용 가능하며, 세션이 끝날 때 빈이 소멸됩니다.
- 설정 방법: @Scope("session") 또는 XML 설정에서 scope="session"으로 설정합니다.
<bean id="sessionBean" class="com.example.MyBean" scope="session"/>
//@Scope("session")
5. application
- 설명: 서블릿 컨텍스트 범위 내에서 하나의 인스턴스를 생성하여 애플리케이션 전역에서 공유합니다.
- 사용 시점: 애플리케이션 전체에서 동일한 객체를 사용해야 하는 경우에 적합합니다.
- 설정 방법: @Scope("application") 또는 XML 설정에서 scope="application"으로 설정합니다.
<bean id="applicationBean" class="com.example.MyBean" scope="application"/>
6.websocket
- 설명: 웹 소켓 세션 범위 내에서 하나의 빈 인스턴스를 생성하여 사용합니다.
- 사용 시점: 웹 소켓 세션별로 독립적인 빈이 필요할 때 사용합니다.
- 주의점: 웹 소켓 지원 환경에서만 사용 가능합니다.
- 설정 방법: @Scope("websocket")으로 설정합니다.
Bean Scope 활용 시 주의 사항
- 싱글톤 스코프 빈은 애플리케이션 전역에서 사용되는 데이터에 적합하나, 상태가 변하지 않도록 주의해야 합니다.
- 프로토타입 빈은 요청마다 새 인스턴스를 생성하므로, 메모리 사용에 유의해야 합니다.
- Request, Session, Application 스코프는 웹 환경에서만 사용할 수 있으며, 주로 웹 애플리케이션의 상태 유지를 위해 사용됩니다.
[참고]
'Backend > Spring' 카테고리의 다른 글
| Spring AOP (0) | 2024.11.19 |
|---|---|
| @Autowired (1) | 2024.11.15 |
| 'XML 기반' VS 'Java Config 기반' (0) | 2024.11.15 |
| Spring Life Cycle⭐️ (0) | 2024.11.15 |
| IoC(Inversion of Control) : 제어의 역전 (0) | 2024.11.14 |