스프링이 제공하는 객체의 스코프.
Bean
(스프링이 관리하는 오브젝트)이 생성되고, 존재하고 적용되는 범위? 이것을Bean
의scope
라 부른다.- 기본적으로 빈의 스코프는 싱글톤스코프다.
- 싱글톤스코프는 컨테이너 내에 한 개의 오브젝트만 만들어져서 강제로 제거하지 않는 한, 컨테이너가 살아있는 한 계속 유지된다.
왜 singleton으로 제공하는가?
일단 스프링은 자바엔터프라이즈개발을 위한 프레임워크다. 이 말인 즉슨, 사용자가 많다는 얘기. 그 많은 사용자가 요청할 때마다 새로운 객체를 생성해서 제공하는 것은 비용이 크기 때문에 기본적으로 싱글톤으로 객체의 갯수를 제한한다.
- 스프링컨테이너는 싱글톤관리 컨테이너이기도 하다! 평범한 자바 클래스를 싱글톤으로 활용하게 해준다는 뜻. 싱글톤 레지스트리 덕분에 싱글톤으로 사용될 클래스라도 public 생성자를 가질 수 있다.
- 고전적인 싱글톤패턴과 달리, 객체지향적인 설계 방식과 원칙, 디자인 패턴(물론 싱글톤패턴은 제외) 등을 적용하는데 제약이 없다!
- 스프링은 IoC컨테이너일 뿐아니라, 싱글톤패턴을 대신해서 싱글톤을 생성하고 관리해주는 싱글톤 레지스트리라는 점 기억해둘 것.
- 빈을 싱글톤으로 만드는 것은 결국 오브젝트의 생성방법을 제어하는 IoC컨테이너로서의 역할.
싱글톤이기 때문에 주의해야할 점
stateless(무상태)방식으로 만들어라.
-
읽기전용 값이라면 초기화시점에서 iv에 저장해두고 공유하는 것은 문제가 없지만,
다중 사용자의 요청을 한꺼번에 처리하는 쓰레드들이 동시에 iv를 건드리는 것은 위험하다.
따라서 stateless방식으로 만들어져야한다. -
파라미터, 로컬변수, 리턴값 등을 이용해, 각각의 값을 iv처럼 공유되는 영역이 아닌, 독립적인 영역에 저장하자.
싱글톤 스코프 외 스코프.
프로토타입 스코프
- 싱글톤스코프와는 다르게 컨테이너에 빈을 요청할 때마다 매번 새로운 오브젝트만든다.
리퀘스트 스코프
- 웹을 통해 새로운 HTTP 요청이 생길때마다 생성된다.
싱글톤 외 스코프는 10장에서 자세히 다룬다니 더 공부해봐야겠다..
'도서 > 토비의 스프링' 카테고리의 다른 글
템플릿 메소드 패턴과 전략패턴의 차이점. (0) | 2019.10.31 |
---|---|
스프링 애플리케이션이란? (0) | 2019.10.09 |
IoC/DI (0) | 2019.09.28 |
스프링이 제공해주는 것들 (0) | 2019.09.28 |