본문 바로가기
Backend

[스프링 핵심 원리 이해] 싱글톤 컨테이너

by 햣둘 2025. 2. 3.

싱글톤 컨테이너

AppConfig와 같은 순수한 DI Contaier와는 다르게,

Spring Container는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리함

지금까지 우리가 학습한 스프링 Bean이 바로 싱글톤으로 관리되는 Bean임

 

- 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리함

- 스프링 컨테이너는 싱글톤 컨테이너 역할을 함

- 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 '싱글톤 레지스트리'라고 함

- 스프링 컨테이너의 이런 기능 덕분에 싱글톤 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있음

 

----> 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 됨

----> DIP, OCP, 테스트, private 생성자로부터 자유롭게 싱글톤을 사용할 수 있음

- 스프링 컨테이너 덕분에 고객의 요청이 올 때마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 재사용할 수 있음

 

참고) 스프링의 기본 Bean 등록 방식은 싱글톤이지만, 싱글톤 방식만 지원하는 건 아님

요청할 때마다 새로운 객체를 생성해서 반환하는 기능도 스프링이 제공함 (뒤에 '빈 스코프' 배울 때 나옴)

아주 가끔 특별한 기능(HTTP request 라이프 사이클에 맞춰서 빈 라이프 사이클을 맞추거나, HTTP 세션 라이프 사이클이랑 맞추거나~ 이런 경우 =  스코프)을 할 때만 싱글톤이 아닌 방식으로 동작하기도 함

근데 스프링에서 99%는 싱글톤 빈만 쓴다고 이해하면 됨