Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

희디비

[Spring] 싱글톤 컨테이너 본문

Spring

[Spring] 싱글톤 컨테이너

희디비 2024. 5. 1. 17:20

💡 싱글톤 패턴 이란?

 

객체를 하나만 생성 하여 관리 하는 패턴을 말한다.

객체의 생성을 private 생성자를 통해 막고, getInstance()를 통해 객체의 참조를 얻을 수 있다.

 

 

🙄 싱글톤 사용 이유

 

웹 어플리케이션의 경우 사용자의 요청이 매우 많다.

사용자가 요청 할때 마다 객체를 생성하게 되면 리소스가 낭비 되기 때문이다.

 

🤔 자바로 싱글톤을 구현시 문제점

 

자바만을 사용해 모든 객체를 싱글톤 패턴으로 만들게 되면 문제가 있다.

 

1. 싱글톤 객체.getInstance()를 통해 DI    ->   구체 클래스에 의존하게 되어 OCP, DIP를 위반한다.

2. 객체 마다 싱글톤 코드를 추가 해야한다.

3. private 생성자를 이용할 경우 자식 클래스의 생성이 어렵다.

 

 

 

위 설정 클래스를 통해 객체를 가져오면 싱글톤이 보장 되지 않는다.

memberService()   ->  memberRepository()  ->  new MemoryMemberRepository()  호출

orderService()  ->   memberRepository()  ->  new MemoryMemberRepository()  호출

 

자바만으론 싱글톤을 보장 하기 어렵다.

 

 

스프링은 어떻게 자바 코드를 싱글톤을 보장할까?

 

@Configuration

스프링은 위 경우 처럼 수동 빈 등록을 할 경우에 바이트 조작 라이브러리를 사용한다. 

 

설정정보에 @Configuration를 작성 하고 테스트 코드를 돌려보자

 

 

 

스프링은 CGLIB 라이브러리를 통해 싱글톤을 보장한다.

1. AppConfig를 상속받는 CGLIB 클래스를 만든다.

2. 빈을 등록할 때 컨테이너에 있는 빈이라면 재사용 한다.

( 스프링 컨테이너에 자기 자신을 등록하는데 부모타입인 AppConfig로 조회하여 보이는 것이다.) 

 

 

위 내용은 김영한님 스프링 핵심 원리 - 기본편을 참고하여 만들었습니다.

요약 한 내용이므로 자세한 내용은 강의 를 보시는 것을 추천합니다! 

 

스프링 핵심 원리 - 기본편

 

스프링 핵심 원리 - 기본편 | 김영한 - 인프런

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보

www.inflearn.com