-
싱클톤 컨테이너FrameWork/Spring&Spring-boot 2022. 1. 10. 14:17
해당 객체 인스턴스가 나의 JVM안에 하나만 있어야 한다.
웹 애플리케이션과 싱글톤
- 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다.
- 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 물론 앱이 아닌 애플리케이션 개발도 얼마든지 할 수 있다.
- 웹 애플리케이션은 보통 여려 고객이 동시에 요청을 한다.
웹 어플리케이션은 요청이 올때 마다 계속 뭔가 객체를 만들어야 한다.
public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); //1. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberService1 =" +memberService1); System.out.println("memberService2 = "+memberService2); } }
AppConfig에게 memberService 객체 인스턴스를 요청할 때마다 다른게 생성된서 반환 된다.
TPS 5만 -> 초당 5만개의 객체가 생성되야 한다는 뜻
public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); //1. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberService1 =" +memberService1); System.out.println("memberService2 = "+memberService2); //memberService != memberSerivce2 Assertions.assertThat(memberService1).isNotSameAs(memberService2); } }
- 우리가 만들었던 스프링 없는 순수한 DI 컨테이너 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다.
- 고개 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다. -> 메모리 낭비가 심하다.
- 해결방안은 해당 객체가 딱 1 개만 생성되고, 공유하도록 설계하면 된다. -> 싱글톤 패턴
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
싱글톤 컨테이너 (0) 2022.01.10 싱글톤 패턴 (0) 2022.01.10 스프링 빈 설정 메타 정보 - BeanDefinition (0) 2022.01.10 다양한 설정 형식 지원 - 자바 코드, XML (0) 2022.01.09 BeanFactory와 ApplicationContext (0) 2022.01.09