싱글톤 컨테이너
AppConfig와 같은 순수한 DI Contaier와는 다르게,
Spring Container는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리함
지금까지 우리가 학습한 스프링 Bean이 바로 싱글톤으로 관리되는 Bean임
- 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리함
- 스프링 컨테이너는 싱글톤 컨테이너 역할을 함
- 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 '싱글톤 레지스트리'라고 함
- 스프링 컨테이너의 이런 기능 덕분에 싱글톤 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있음
----> 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 됨
----> DIP, OCP, 테스트, private 생성자로부터 자유롭게 싱글톤을 사용할 수 있음
- 스프링 컨테이너 덕분에 고객의 요청이 올 때마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 재사용할 수 있음
참고) 스프링의 기본 Bean 등록 방식은 싱글톤이지만, 싱글톤 방식만 지원하는 건 아님
요청할 때마다 새로운 객체를 생성해서 반환하는 기능도 스프링이 제공함 (뒤에 '빈 스코프' 배울 때 나옴)
아주 가끔 특별한 기능(HTTP request 라이프 사이클에 맞춰서 빈 라이프 사이클을 맞추거나, HTTP 세션 라이프 사이클이랑 맞추거나~ 이런 경우 = 스코프)을 할 때만 싱글톤이 아닌 방식으로 동작하기도 함
근데 스프링에서 99%는 싱글톤 빈만 쓴다고 이해하면 됨
'Backend' 카테고리의 다른 글
[스프링 핵심 원리 이해] @Configuration와 싱글톤, CGLIB 바이트코드 (0) | 2025.02.03 |
---|---|
[스프링 핵심 원리 이해] 싱글톤 방식의 주의점 - Stateless로 설계하자 (0) | 2025.02.03 |
[스프링 핵심 원리 이해] 순수한 DI 컨테이너에서의 싱글톤 구현 및 문제점 (2) | 2025.02.03 |
[스프링 MVC 1편] 자바 백엔드 웹기술 역사 (0) | 2025.02.02 |
[스프링 MVC 1편] HTML, HTTP API, CSR, SSR (0) | 2025.02.02 |