T_era
Bean Scope의 특징과 사용처 본문
- 싱글톤 (Singleton)
- 기본 스코프로, 스프링 컨테이너당 하나의 인스턴스만 생성됩니다.
- 특징:
- 모든 요청에서 동일한 빈 인스턴스를 공유
- 메모리 효율적
- 상태를 공유하므로 상태 관리에 주의 필요
- 사용처:
- Service Layer
- Repository Layer
- Util Class
- Config Class
- 프로토타입 (Prototype)
- 요청할 때마다 새로운 인스턴스를 생성합니다.
- 특징:
- 매 요청마다 새로운 빈 인스턴스 생성
- 메모리 사용량이 더 많음
- 상태를 독립적으로 관리 가능
- 사용처:
- 사용자별 세션 데이터
- 요청별로 다른 상태를 가져야 하는 컴포넌트
- 멀티스레드 환경에서 독립적인 인스턴스가 필요한 경우
- 리퀘스트 (Request)
- HTTP 요청마다 새로운 인스턴스를 생성합니다.
- 특징:
- 웹 요청마다 새로운 빈 인스턴스 생성
- 요청이 끝나면 인스턴스 소멸
- 웹 애플리케이션에서만 사용 가능
- 사용처:
- 사용자 인증 정보
- 요청별 데이터 처리
- 웹 컨트롤러
- 요청 스코프의 서비스
- 예시 코드
// 싱글톤 스코프 (기본값)
@Service
public class SingletonService {
// 모든 요청에서 동일한 인스턴스 사용
}
// 프로토타입 스코프
@Service
@Scope("prototype")
public class PrototypeService {
// 매 요청마다 새로운 인스턴스 생성
}
// 리퀘스트 스코프
@Service
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestService {
// HTTP 요청마다 새로운 인스턴스 생성
}
주의사항:
1. 싱글톤 빈은 상태를 공유하므로, 상태 변경 시 동시성 문제가 발생할 수 있다.
2. 프로토타입 빈은 메모리 사용량이 많을 수 있으므로, 꼭 필요한 경우에만 사용해야 한다.
3. 리퀘스트 스코프는 웹 애플리케이션에서만 사용 가능하며, 일반적으로 `@Scope` 어노테이션과 함께 `proxyMode`를 지정해야 한다.
이러한 스코프들을 적절히 활용하면 애플리케이션의 성능과 메모리 사용을 최적화할 수 있다.
'Programing > Spring' 카테고리의 다른 글
| API Gateway 구현하기 (0) | 2025.06.16 |
|---|---|
| 나는 QueryDSL을 사용하는데 JPQL도 사용해야할까? (1) | 2025.06.11 |
| 트랜잭션 전파는 상황마다 어떤 속성을 써야할까? (0) | 2025.06.10 |
| 상속매핑 전략과 선택 가이드 (0) | 2025.06.10 |
| 테스트 코드 mock()과 ReflectionTestUtils (0) | 2025.06.09 |