05 싱글톤 컨테이너

수갱22·2023년 5월 20일
0

spring

목록 보기
8/14

1. 웹 애플리케이션과 싱글톤

  • 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생
  • 대부분의 스프링 애플리케이션은 웹 애플리케이션이다.(현대) 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발 가능(객체, 데몬 등..)
  • 웹 애플리케이션은 보통 여러 고객이 동시에 요청

    -세 명이 동시에 요청->A에게 반환, B,C도=>객체 3개 생성됨(문제)

스프링 없는 순수한 DI 컨테이너 테스트

test/java/hello.core/singleton(package)/SingletonTest.java

package hello.core.singleton;
import hello.core.AppConfig;
import hello.core.member.MemberService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;

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);
 
 }
}


-1,2가 다르게 생성된 거 확인 가능
-웹 어플리케이션은 요청이 많은데 그때마다 객체 생성되면 문제

//memberService1 != memberService2
        assertThat(memberService1).isNotSameAs(memberService2);

-스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로
생성
-고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸, 메모리 낭비가 심함.

=>해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. 싱글톤 패턴

2. 싱글톤 패턴

profile
Cyber Security

0개의 댓글