싱글톤
스프링은 별도의 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 싱글톤으로 만든다.
빈을 싱글톤으로 만드는 이유
스프링이 주로 적용되는 대상이 자바 엔터프라이즈 기술을 사용하는 서버환경 이기 때문이다.
또 하나의 요청을 처리하기 위해 데이터 엑세스 로직, 서비스 로직, 비즈니스 로직, 프레젠테이션 로직 등
다양한 기능을 담당하는 오브젝트 들이 참여하는 계층형 구조로 이루어진 경우가 대부분이다.
그런데 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 생각해보면
요청 한번에 5개의 오브젝트가 만들어지고 초당 50개의 요청이 들어오면 초당 250개의 새로운 오브젝트가 생성되는게 된다.
1분이면 15만개가 만들어진다. 아무리 자바의 오브젝트가 생성과 가비지컬렉션의 성능이 좋다고 해도 서버에 엄청난 부하가 걸릴 것 이다.
그래서 엔터프라이즈 분야에서는 서비스 오브젝트란 개념을 일찍부터 사용해왔다.
서블릿은 자바 엔터프라이즈 기술의 가장 기본이되는 서비스 오브젝트라고 할 수 있다.
서블릿은 대부분 멀티 스레드 환경에서 싱글톤으로 동작한다.
서블릿 클래스당 하나의 오브젝트만 만들어두고, 사용자의 요청을 담당하는 여러 스레드에서 하나의 오브젝트를 공유해서 사용한다.
또 하나의 요청을 처리하기 위해 데이터 엑세스 로직, 서비스 로직, 비즈니스 로직, 프레젠테이션 로직 등
다양한 기능을 담당하는 오브젝트 들이 참여하는 계층형 구조로 이루어진 경우가 대부분이다.
그런데 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 생각해보면
요청 한번에 5개의 오브젝트가 만들어지고 초당 50개의 요청이 들어오면 초당 250개의 새로운 오브젝트가 생성되는게 된다.
1분이면 15만개가 만들어진다. 아무리 자바의 오브젝트가 생성과 가비지컬렉션의 성능이 좋다고 해도 서버에 엄청난 부하가 걸릴 것 이다.
그래서 엔터프라이즈 분야에서는 서비스 오브젝트란 개념을 일찍부터 사용해왔다.
서블릿은 자바 엔터프라이즈 기술의 가장 기본이되는 서비스 오브젝트라고 할 수 있다.
서블릿은 대부분 멀티 스레드 환경에서 싱글톤으로 동작한다.
서블릿 클래스당 하나의 오브젝트만 만들어두고, 사용자의 요청을 담당하는 여러 스레드에서 하나의 오브젝트를 공유해서 사용한다.
싱글톤 레지스트리
자바의 싱글톤 패턴의 구현 방식은 여러가지 단점이 있다.
하지만 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기느을 제공한다.
그것이 싱글톤 레지스트리다.
스프링 컨테이너는 싱글톤을 생성하고, 관리하고, 공급하는 싱글톤 관리 컨테이너이기도 하다.
하지만 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기느을 제공한다.
그것이 싱글톤 레지스트리다.
스프링 컨테이너는 싱글톤을 생성하고, 관리하고, 공급하는 싱글톤 관리 컨테이너이기도 하다.
싱글톤 레지스트리의 장점
static메소드와 private 생성자를 사용해야하는 비 정상적인 클래스가 아니라 평범한 자바클래스를 싱글톤으로 사용하게 해준다는 점이다.
평범한 자바 클래스라도 Ioc 컨테이너를사용해서 생성과 관계설정 사용등에 대한 제어권을 컨테이너에게 넘기면 손 쉽게 싱글톤 방식으로 만들어져 관리되게 할 수 있다.
오브젝트 생성에 관한 모든 권한은 Ioc 기능을 제공하는 애플리케이션 컨텍스트에 있기 때문이다.
스프링이 빈을 싱글톤으로 만들어주는 것은 결국 오브젝트의 생성 방법을 제어하는 Ioc 컨테이너로서의 역할이다.
오브젝트의 상태
기본적으로 싱글톤이 멀티스레드 환경에서 서비스 형태의 오브젝트로 사용되는경우에는 상태정보를 갖고있지 않은 무상태 방식으로 만들어져야 한다.
'Spring Framework' 카테고리의 다른 글
컴포넌트 스캔 (0) | 2021.08.19 |
---|