ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 싱클톤 컨테이너
    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 개만 생성되고, 공유하도록 설계하면 된다. -> 싱글톤 패턴

     

     

     

    [출처 : 김영한. 스프링 핵심 원리-기본편. 인프런]

    댓글

Designed by Tistory.