Spring Bean Scope

Bean이란?

먼저, Spring Bean에 대해서 간략히 짚고 넘어 가보도록 하겠습니다.

Spring의 3대 요소중에 제어의 역전(IoC)라는 것을 들어봤을 것입니다
Spring은 자바 객체를 쉽게 관리할 수 있도록 Spring IoC 컨테이너에 등록하여 사용하는데요,

이때 등록된 자바 객체를 bean이라고 합니다


Bean Scope

이처럼 스프링은 빈이라는 개념으로 자바객체를 만들고 싱글톤화 시켜 관리하여 줍니다.
이 객체들은 스프링 IoC 컨테이너의 의해 생성되고 소멸되는 등의 관리가 이루어 집니다. 이때 bean이 관리되는 범위를 Bean scope라고 합니다. 여기서 bean이 싱글턴화 되서 관리되는 이유는 spring bean의 기본 scope 전략이 Singleton 이기 때문입니다.

Bean Scope 종류

Spring5.3.13 기준으로 다음과 같이 6개의 scope가 정의 되어 있습니다 1.5 bean scopes

 

Core Technologies

In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do

docs.spring.io

singleton

가방 보편적인 scope로, bean 등록시 따로 설정을 하지 않았다면 싱글턴으로 등록됩니다.

어플리케이션에 오직 하나만 생성되는 일반적인 scope 입니다

@Component, @Configuration + @bean의 조합으로 등록된 bean들의 기본 scope입니다

prototype

프로토타입 스코프는 컨테이너에게 빈을 요청할 때마다 매번 새로운 객체를 생성해줍니다.

프로토타입을 받은 클라이언트가 객체를 관리하여 줍니다

web scope

웹환경에서만 동작하는 스코프입니다 .

종류로는 request, session, application, websocket이 있습니다

1. request

request가 생성되면 bean이 생성되고 종료됩니다.
즉 /store/1 이라는 api가 첫번째 호출되었을때와 두번째 호출되었을때의 bean은 다릅니다.

@Component
@Scope(value = "request")
public class ConvertUtil {
}

@Component
@RequestScope
public class ConvertUtil {
}

Spring 4.3 부터는 @RequestScope 어노테이션을 지원합니다

2. session

session과 동일한 생명 주기를 가지는 스코프입니다

3. application

웹의 서블릿 컨텍스와 동일한 생명주기를 가지는 스코프입니다

4. websocket

웹소켓과 동일한 생명주기를 가지는 스코프입니다


스코프의 선택

따로, 설정을 하지 않는 것이 싱글턴 스코프인데요, 특수한 상황이 아니라면 default 설정을 사용하는게 좋습니다.

싱글턴 스코프는 상태값을 가지지 않을경우 (내부 로직만 존재)에 선택하는 것이 좋습니다.

로직만을 처리할 경우 매번 객체를 생성해줄 필요는 없기 때문입니다.

 

객체가 상태값을 가지고 단순 조회가 아닌 write 작업이 이루어질 경우에는 bean 스코프를 알맞게 선택하여 사용하는 것이 좋습니다.


참조

* 토비의스프링 3.1

* https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes

블로그 이미지

사용자 yhmane

댓글을 달아 주세요