티스토리 뷰

Spring

Spring Bean Scope

Jodu 2016. 10. 11. 01:15
반응형

스프링에서는 기본적으로 Singleton (이하 싱글톤) & Prototype(이하 프로토타입)의 빈 스코프를 지원한다. 웹 어플리케이션일 경우 추가적으로  요청, 세션, 전역 세션에 대해서 지원하지만 이번 포스팅에서는 싱글톤과 프로토타입에 대해서 언급하며 싱글톤 스코프의 빈이 프로토타입 스코프의 빈을 Autowired 할 경우와 프로토타입 스코프 빈이 프로토타입 빈을 Autowired 할 경우 어떤 일이 발생하는지에 대해서 설명한다.


싱글톤 빈 스코프는 XML설정 파일이나 어노테이션 설정 시 별 다른 설정이 없으면 Default로 잡히는 스코프이다. 싱글톤 스코프는 스프링 컨테이너가 생성 될 때 생성되고, 스프링 컨테이너가 내려가면 같이 없어지는 라이프 사이클을 가진다. 


프로토타입 스코프의 경우에는 스코프가 프로토타입이라는 것을 명시적으로 나타내 주어야 한다. 위에서 싱글톤 스코프는 라이프사이클이 스프링컨테이너와 같았지만 프로토타입의 경우 스프링에서 인스턴스의 라이프 사이클을 관리 하지않는다고 한다.


그렇다면 이렇게 다른 스코프를 가진 두개의 빈을 서로 서로 의존성이 주입되면 어떤 일이 일어 날까?? 이것을 아는 것은 스프링을 사용해서 어플리케이션을 개발 할때 메모리 관리에 있어 수월함을 더해 줄 것이라고 생각한다.


먼저 싱글톤 스코프가 프로토 타입 스코프의 빈을 주입 받는 경우에 대한 내용이다.


1. Singleton Scope Controller




2. Prototype Scope Service



1번 싱글톤 스코프의 컨트롤러에서 프로토타입 스코프의 서비스를 Autowired하고 있을 때.

/scopeTest 호출을 두번 하게 되면 다음과 같은 결과 값을 확일 할 수 있다.


결과를 보면 두번의 호출에서 프로토타입 스코프의 빈의 주소값이 동일한 것을 볼 수 있다.
이 이유는 싱글톤 스코프의 빈 자체가 스프링 컨테이너가 생성될 때 한번 만들어지는데 이때 싱글톤 스코프가 의존하고 있는 프로토 타입 빈의 인스턴스를 한번 생성해서 주입 받기 때문에 싱글톤은 동일한 프로토타입 스코프의 빈을 사용하게 된다.

그럼 다음으로 만약 컨트롤러가 프로토타입 스코프일 때 프로토타입 스코프의 빈에 의존할 경우에 대한 내용이다.



서비스의 스코프는 변경되는 것이 없으므로 초기에 서비스와 똑같고 Controller의 경우 Scope 어노테이션을 추가 해주었다. 
이때 2번의 호출을 하였을 경우 다음과 같은 결과 값을 확일 할 수 있다.



이와 같이 컨트롤러 또한 프로토 타입 스코프 일 경우 서비스에 대한 인스턴스가 계속 생성되게 된다.

마지막으로 싱글톤 스코프와 프로토타입 스코프의 구분을 어떻게 할지 생각해보면 싱글톤 패턴은 하나의 인스턴스만 유지하므로 변화하는 상태값이 있을 경우에는 프로토타입 스코프로 생성하는 것이 맞는 방법이다. 즉, 인스턴스가 상태값을 가지는지 안가지는지에 대한 기준으로 싱글톤. 프로토타입 스코프를 구분하는 것이다.


반응형

'Spring' 카테고리의 다른 글

Spring HttpSessionListener  (2) 2017.03.25
Spring Security Custom EntryPoint  (0) 2016.12.28
JUnit 테스트 시 Spring 구동 및 Autowired하는 방법  (0) 2016.11.15
SVG 이미지 변환 서버 만들기  (0) 2016.09.10
@PostConstruct  (0) 2016.09.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함