T_era

Bean Scope의 특징과 사용처 본문

Programing/Spring

Bean Scope의 특징과 사용처

블스뜸 2025. 6. 11. 13:32
  • 싱글톤 (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`를 지정해야 한다.

이러한 스코프들을 적절히 활용하면 애플리케이션의 성능과 메모리 사용을 최적화할 수 있다.