1. IDE
Intellij
2. 오늘 공부 내용
Bean scope
- Bean scope - 빈의 생애 주기(lifeecycle)를 결정하며, 애플리케이션의 요구사항에 따라 빈의 생성 및 관리 방식을 조정
Singleton
- 빈의 단일 인스턴스만 생성, 컨테이너가 관리하는 동안 재사용
- 사용 시점 - 상태가 없는 서비스나 공통적인 기능을 제공하는 경우, 성능상 이점을 위해 사용
Prototype
- 요청할 떄마다 새로운 빈 인스턴스를 생성, 빈의 상태가 서로 독립적이어야 하거나 매번 새로운 객체가 필요한 경우 사용
- 사용 시점 - 상테가 변경되거나 매번 다른 값을 가질 필요가 있는 경우, 각 요청마다 새로운 객체를 제공하기 위해 사용
Request
- HTTP 요청당 하나의 빈 인스턴스가 생성되며, 요청이 완료되면 빈도 소멸
- 사용 시점 - 요청 간에 공유되지 않는 상태가 필요한 경우 사용
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class MyRequestBean {
}
Session
- HTTP 세션당 하나의 빈 인스턴스가 생성되며, 세션이 만료될 때 빈도 소멸, 세션 범위에서 공유될 필요가 있는 데이터를 저장할 때 사용
- 사용 시점 - 사용자 세션 동안 상태를 유지할 필요가 있는 빈에 사용
Application
- 서블릿 컨텍스트(Application Context) 범위에서 빈의 단일 인스턴스가 생성, 애플리케이션 전체에서 공유해야 하는 데이터를 관리할 때 사용
- 사용 시점 - 애플리케이션 범위에서 공통된 객체를 공유할 필요가 있는 경우 사용
WebSocket
- WebSocket 세션당 하나의 빈 인스턴스가 생성, WebSocket 통신에서 세션 범위의 데이터를 유지할 때 사용
- 사용 시점 - WebSocket 연결 동안 특정 데이터를 유지해야 할 떄 사용
빈 스코프 선택 시 고려 사항
- 상태 관리: 빈의 상태가 중요하다면
prototype, request, session 스코프를 고려할 수 있습니다.
- 성능 최적화: 성능이 중요한 경우,
singleton 스코프가 적합합니다.
- 애플리케이션의 요구사항: 애플리케이션의 구조와 요구사항에 따라 적절한 스코프를 선택해야 합니다.
정리
- Singleton: Spring 컨테이너당 하나의 인스턴스를 생성 (기본값).
- Prototype: 요청할 때마다 새로운 인스턴스를 생성.
- Request: HTTP 요청당 하나의 인스턴스를 생성 (웹 애플리케이션).
- Session: HTTP 세션당 하나의 인스턴스를 생성 (웹 애플리케이션).
- Application: 서블릿 컨텍스트 범위에서 하나의 인스턴스를 생성 (웹 애플리케이션).
- WebSocket: WebSocket 세션당 하나의 인스턴스를 생성.