스프링에서 Bean은 POJO(Plain Old Java Object) 기반의 객체입니다. 상황과 필요에 따라 Bean을 하나만 만들어 사용해야 할 때도 있고, 여러 개가 필요할 때도 있으며, 특정 시점에서만 사용해야 할 때도 있습니다. 이러한 요구사항을 해결하기 위해 스프링에서는 Bean의 사용 범위를 설정할 수 있는 Bean Scope를 제공합니다.
기본적으로, Bean을 특별히 설정하지 않으면 Spring에서는 Singleton으로 생성됩니다. 싱글톤 패턴처럼 특정 타입의 Bean을 단 하나만 만들어 애플리케이션 전체에서 공유해서 사용하는 방식입니다. 대부분의 경우 Bean을 이렇게 하나만 만들어 사용하는 게 일반적이지만, 다양한 요구사항에 따라 다른 Scope가 필요할 때도 있습니다.
singleton
prototype
request
session
global session
request
,session
,global session
은 MVC 웹 애플리케이션에서만 사용 가능합니다.
Scope는 Bean으로 등록하는 클래스에 어노테이션을 설정해서 사용할 수 있습니다.
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Scope("prototype")
@Component
public class UserController {
// 컨트롤러 로직
}
위의 코드에서는 @Scope("prototype")
어노테이션을 사용하여 UserController
를 요청할 때마다 새로운 인스턴스를 반환하도록 설정하고 있습니다.
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@Scope("singleton") // 기본 값이므로 생략 가능
@Service
public class OrderService {
// 싱글톤으로 관리
}
@Scope("request")
@Component
public class RequestHandler {
// 각 요청마다 새로운 인스턴스
}
@Scope("session")
@Component
public class SessionManager {
// 세션마다 하나의 인스턴스
}
Spring의 Bean Scope를 사용하면 특정 요구사항에 따라 Bean의 생명주기와 사용 범위를 유연하게 설정할 수 있습니다. Bean이 항상 동일한 인스턴스를 사용해야 할 때는 singleton, 요청마다 새로운 인스턴스를 원할 때는 prototype
, request
, session
등을 적절히 활용해 개발 상황에 맞는 최적의 Bean 관리를 할 수 있습니다.