일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring
- 스프링di
- open-session-in-view
- 동적파라미터
- 스프링 포매터
- IOC
- 기능적 요구사항
- 비기능적 요구사항
- 정적팩토리메서드
- jpa lazy
- 소프트웨어의 품격
- 스프링 시큐리티 설정
- spring formatter
- kotlin ::
- 자바 필터
- 도커 이미지 빌드
- kotlin 리팩터링
- 스프링부트 도커
- 그래프큐엘
- 수정자주입
- ioc컨테이너
- Atomicity
- method refetence
- 스프링시큐리티
- jpa no session
- fetch join
- 생성자주입
- java predicate
- 토비의 스프링
- 스프링
Archives
- Today
- Total
공부기록
[토비의 스프링] 스프링이 대부분의 객체를 singleton으로 제공해주는 이유 본문
반응형
스프링이 제공하는 객체의 스코프.
Bean
(스프링이 관리하는 오브젝트)이 생성되고, 존재하고 적용되는 범위? 이것을Bean
의scope
라 부른다.- 기본적으로 빈의 스코프는 싱글톤스코프다.
- 싱글톤스코프는 컨테이너 내에 한 개의 오브젝트만 만들어져서 강제로 제거하지 않는 한, 컨테이너가 살아있는 한 계속 유지된다.
왜 singleton으로 제공하는가?
일단 스프링은 자바엔터프라이즈개발을 위한 프레임워크다. 이 말인 즉슨, 사용자가 많다는 얘기. 그 많은 사용자가 요청할 때마다 새로운 객체를 생성해서 제공하는 것은 비용이 크기 때문에 기본적으로 싱글톤으로 객체의 갯수를 제한한다.
- 스프링컨테이너는 싱글톤관리 컨테이너이기도 하다! 평범한 자바 클래스를 싱글톤으로 활용하게 해준다는 뜻. 싱글톤 레지스트리 덕분에 싱글톤으로 사용될 클래스라도 public 생성자를 가질 수 있다.
- 고전적인 싱글톤패턴과 달리, 객체지향적인 설계 방식과 원칙, 디자인 패턴(물론 싱글톤패턴은 제외) 등을 적용하는데 제약이 없다!
- 스프링은 IoC컨테이너일 뿐아니라, 싱글톤패턴을 대신해서 싱글톤을 생성하고 관리해주는 싱글톤 레지스트리라는 점 기억해둘 것.
- 빈을 싱글톤으로 만드는 것은 결국 오브젝트의 생성방법을 제어하는 IoC컨테이너로서의 역할.
싱글톤이기 때문에 주의해야할 점
stateless(무상태)방식으로 만들어라.
- 읽기전용 값이라면 초기화시점에서 iv에 저장해두고 공유하는 것은 문제가 없지만,
다중 사용자의 요청을 한꺼번에 처리하는 쓰레드들이 동시에 iv를 건드리는 것은 위험하다.
따라서 stateless방식으로 만들어져야한다. - 파라미터, 로컬변수, 리턴값 등을 이용해, 각각의 값을 iv처럼 공유되는 영역이 아닌, 독립적인 영역에 저장하자.
싱글톤 스코프 외 스코프.
프로토타입 스코프
- 싱글톤스코프와는 다르게 컨테이너에 빈을 요청할 때마다 매번 새로운 오브젝트만든다.
리퀘스트 스코프
- 웹을 통해 새로운 HTTP 요청이 생길때마다 생성된다.
싱글톤 외 스코프는 10장에서 자세히 다룬다니 더 공부해봐야겠다..
반응형
'Spring' 카테고리의 다른 글
[SPRING] AOP? 핵심기능과 부가기능의 분리. (1) | 2019.08.04 |
---|---|
[SPRING] 빈 클래스 자동인식 네가지 스테레오타입 어노테이션 (0) | 2019.08.03 |
[SPRING] @Component 사용해서 Bean으로 등록해보자 (1) | 2019.08.03 |
[spring] web.xml 해석. (0) | 2019.07.31 |
[SPRING]MockMvc를 이용한 테스트 (0) | 2019.07.28 |