Post

[Lecture - 김영한님(스프링 핵심 원리 - 기본편)] 웹 애플리케이션과 싱글톤

inflearn에서 김영한님 강의를 들으면서 내용을 정리해보자.
스프링 핵심 원리 - 기본편


스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다.
대부분의 스프링 애플리케이션은 웹 애플리케이션이다. (웹이 아닌 애플리케이션 개발도 가능하다.)
웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 웹 애플리케이션 - DI 컨테이너(AppConfig) 위 그림같은 경우 클라이언트가 3번 memberService를 요청하면 memberSevice 객체가 3개 생성되게 된다.
즉, 요청이 늘어날수록 같은 객체가 계속 늘어난다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class SingletonTest {
    @Test
    @DisplayName("스프링 없는 순수한 DI 컨테이너")
    void pureContainer() {
        AppConfig appCofnig = new AppConfig();

        // 1. 조회: 호출할 때 마다 객체 생성
        MemberService memberService1 = appCofnig.memberService();
        // 2. 조회: 호출할 때 마다 객체 생성
        MemberService memberService2 = appCofnig.memberService();

        // 서로 다른 참조값 확인
        System.out.println("memberService1 = " + memberService1);
        System.out.println("memberService2 = " + memberService2);

        // memberService1 != memberService2
        Assertions.assertThat(memberService1).isNotSameAs(memberService2);
    }
}
  • 강의에서 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다.
  • 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸한다.
    • 즉, 메모리 낭비가 심하다.
  • 해결 방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다.
    • 즉, 싱글톤 패턴으로 해결하면 된다.

      싱글톤 : 현재 JVM 안에 객체 인스턴스가 딱 하나만 있어야 되는 패턴

This post is licensed under CC BY 4.0 by the author.

© Yn3. Some rights reserved.