-
(스프링 기본) 12 - 웹 애플리케이션과 싱글톤개발/Spring 2024. 10. 23. 14:29
스프링은 기업용 온라인 서비스 기술 지원을 위해 탄생했다.
대부분 스프링 애플리케이션은 웹 애플리케이션이다.
웹 애플리케이션은 고객의 요청이 많은데,
스프링 없는 순수 DI 컨테이너인 AppConfig는 요청이 있을 때마다 객체를 생성해 비효율적이다.
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); //merberService != memberService2 Assertions.assertThat(memberService1).isNotSameAs(memberService2); } }
@Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); }
따라서 다음과 같이 만들면 merberService 에서
MemberServiceImpl 과 MemoryMemberRepository 2개씩 2번 총 4개의 객체가 만들어진다.
고객 트래픽이 초당 100 나오면 초당 100개 객체가 생성되고 소멸되며 이는 메모리 낭비가 심하다.
따라서 객체가 딱 1개만 생성되고 공유하도록 설계하는 싱글톤 패턴이 필요하다.
출처 : 김영한 스프링 핵심 원리 - 기본편
'개발 > Spring' 카테고리의 다른 글
(스프링 기본) 14 - 싱글톤 컨테이너 (0) 2024.10.24 (스프링 기본) 13 - 싱글톤 패턴 (0) 2024.10.23 (스프링 기본) 11 - 스프링 빈 설정 메타 정보(BeanDefinition) (2) 2024.10.09 (스프링 기본) 10 - 다양한 설정 형식 지원(자바코드, XML) (0) 2024.10.09 (스프링 기본) 9 - BeanFactory 와 ApplicationContext (0) 2024.10.09