본문 바로가기
반응형
Spring

[Spring] 스프링 핵심 원리 - 기본편 > 섹션 5. 싱글톤 컨테이너

by brightGarden02 2024. 4. 10.

인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] > 섹션5. 싱글톤 컨테이너에 대한 요점 정리를 하였다.

 

 

public class AppConfig {

    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

	...
 }

스프링이 없이 순수한 DI 컨테이너인 AppConfig는 클라이언트가 memberServiceImpl을 요청할 때 마다 새로운 memberServiceImpl을 생성하고 반환한다.(-> 메모리 낭비 발생)

이유는 스프링이 없는 순수한 DI 컨테이너는 싱글톤을 보장해주지 않기 때문이다.

 

객체를 1개만 생성하고 공유하도록 설계하는 스프링 컨테이너를 사용하자.

스프링 컨테이너는 객체 인스턴스를 싱글톤으로 관리한다.

이는 DIP, OCP, priavte 생성자로부터 자유로운 싱글톤을 사용할 수 있다.

 

 

 

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }
 
 	...
    
 }

DI 컨테이너 위에 @Configuration을 적용하면 스프링은 바이트코드를 조작하는 CGLIB 기술을 사용하여 AppConfig 클래스를 상속받은 임의의 다른 클래스를 만들고, 생성한 다른 클래스를 스프링 빈으로 등록하여 싱글톤을 보장한다.

 

 

 

주의사항

1. @Bean을 적용하면 스프링 빈으로 등록 되지만 싱글톤은 보장하지 않으니 클래스 위에 @Configuration을 적용하자.

2. 여러 클라이언트가 하나의 객체 인스턴스를 공유하므로 유지상태(stateful)가 아닌 무상태(stateless)로 설계해야한다.

특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다.

 

 

 

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

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

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

www.inflearn.com

 

댓글


반응형
반응형