본문 바로가기
정리

스프링 Bean의 scope

by dyddyd0 2025. 4. 30.

빈 스코프

말 그대로

스프링 컨테이너가 관리해 주는 객체인 스프링 빈이 존재할 수 있는 범위를 뜻하며

대표적인 종류로는 싱글톤, 프로토타입, request, session, appliction 등이 있다.

 

빈 스코프는 왜 필요할까?

객체의 생명주기를 상황에 맞게 관리하고 최적화하기 위해필요.
스프링 애플리케이션은 다양한 요구사항을 처리하기 때문에,

모든 객체를 무조건 하나만 생성하거나 매번 새로 생성하면 비효율적이거나 기능적으로 문제가 발생할 수 있음.

 

대부분의 서비스나 DAO는 상태 없이 사용되므로 하나만 생성해서 공유하는 것이 가장 효율적이다.

매번 새로 만들면 메모리 낭비 + 성능 저하 발생가능.

→ 메모리 효율을 위해 싱글톤 스코프 적합.

 

어떤 계산 로직에서 매번 다른 값 저장이 필요한 경우처럼

내부에서 요청마다 다른 상태를 가져야 할 때는 매번 새 객체를 만들어야 한다.

→ 프로토타입 스코프 적합.

 

로그인 사용자 정보, 장바구니 와 같이 로그인 한 사용자마다 다른 정보를 가지고 있어야 할 경우

→ request/session 스코프 적합.

 

적절한 빈 스코프를 설정해 효율적인 객체 관리를 하자.

 

Scope 이름 설명 생성 주기 사용 위치
singleton (기본값) 하나의 Bean만 생성되어 공유됨 컨테이너 시작 시 1회 생성 모든 스프링 애플리케이션
prototype 요청할 때마다 새 객체 생성 요청 시마다 새로 생성 일반 애플리케이션
request HTTP 요청마다 새 Bean 생성 웹 요청마다 웹 애플리케이션(Spring MVC)
session HTTP 세션마다 새 Bean 생성 세션 시작 시 웹 애플리케이션
application ServletContext마다 하나 웹 애플리케이션 전역 공유 웹 애플리케이션
websocket WebSocket 세션마다 생성 WebSocket 세션 시작 시 WebSocket 기반 앱

 

 

스코프는 다음과 같이 @Scope 어노테이션으로 지정할 수 있다.

@Component
@Scope("singleton") // 생략 가능 (기본값)
public class SingletonBean {
}

 

@Component
@Scope("prototype")
public class PrototypeBean {
}

 

@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestScopedBean {
}

 

 

반응형