본문 바로가기
Dev/Spring

[Spring] 스프링이 빈 스코프를 싱클톤으로 만드는 이유

by ssyoni 2022. 1. 17.
반응형

스프링 싱글톤

스프링은 여러 번에 걸쳐 빈을 요청하더라도 매번 동일한 오브젝트를 돌려준다.

getBean() 메서드를 실행할 때마다 매번 new에 의해 새로운 오브젝트를 생성하지 않는다는 뜻

도대체 왜?



👩‍💻 싱글톤 레지스트리로서의 애플리케이션 컨텍스트

애플리케이션 컨텍스트?

싱글톤을 저장하고 관리하는 싱글톤 레지스트리이자 IoC 컨테이너이다.

스프링은 기본적으로 별다른 설정을 하지 않으면 생성하는 빈 오브젝트를 싱글톤으로 만든다.

 

💡 스프링이 빈을 싱글톤으로 만드는 이유

: 스프링이 주로 적용되는 대상이 자바 엔터프라이즈 기술을 사용하는 서버 환경이기 때문.

태생적으로 스프링은 엔터프라이즈 시스템을 위해 고안된 시스템. 실제로 대부분 스프링은 서버 환경에서 사용된다.

서버 하나당 브라우저나 여타 시스템으로부터 초당 수십수백 개의 요청을 받아 처리할 수 있는 높은 성능이 요구되는 환경이었음.

 

그런데 매번 클라이언트로부터 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용하게 된다면 서버가 감당하기 힘들어짐.

그래서 엔터프라이즈 분야에서는 서비스 오브젝트라는 개념을 도입해왔었으며 대표적인 게 서블릿이다.

서블릿은 대부분 멀티스레드 환경에서 싱글톤으로 동작함. 서블릿 클래스당 하다의 오브젝트만 만들고 이를 여러 스레드에서 공유해 동시에 사용하는 방식.

그러나 자바에서 기본적인 싱글톤 구현 방식은 여러 가지 단점이 있기 때문에 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공함.  싱글톤 레지스트리



💡 스프링 싱글톤 레지스트리의 장점

스태틱 메서드와 private 생성자를 사용하지 않아도 평범한 자바 클래스를 싱글톤으로 활용하게 해 준다.

싱글톤 방식으로 사용될 애플리케이션 클래스라도 public 생성자를 가질 수 있다.

테스트 환경에서 자유롭게 오브젝트를 만들 수 있고, 테스트를 위한 목 오브젝트로 대체하는 것이 가능하다.




출처 : 토비의 스프링 3.1 Vol.1 스프링의 이해와 원리

반응형

'Dev > Spring' 카테고리의 다른 글

[Spring] AOP(Aspected-Oriented Programming)  (0) 2022.02.05
[Spring] Singleton / Prototype  (0) 2022.01.17
[Spring] Bean 생명 주기  (0) 2022.01.17
[Spring] 빈 등록방법, 의존관계 자동주입, lombok  (0) 2021.12.25
[Spring]DI, IoC, SOLID  (0) 2021.12.25

댓글