-
[SpringBoot] 싱글톤 컨테이너Web/Java | Spring-boot 2021. 8. 8. 18:10

이 포스팅은 인프런에서 스프링 핵심원리 - 기본편을 듣고 작성한 것입니다.
웹 애플리케이션과 싱글톤
대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 여러 클라이언트가 동시에 요청을 하고, 이때 요청이 올때마다 객체를 만들어낸다면 낭비가 심하다.
순수한 자바코드에서는
-> 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청할 때마다 객체를 새로 생성.
-> 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸됨
-> 메모리 낭비가 심함.
이를 방지하기 위해 사용하는 것이 싱글톤 패턴이다!
싱글톤 패턴
클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴
객체 인스턴스를 2개 이상 생성하지 못하도록 막아야함.
private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야함.
싱글톤 패턴의 문제점
싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다.
의존관계상 클라이언트가 구체 클래스에 의존한다. DIP를 위반한다. 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다.
내부 속성을 변경하거나 초기화 하기 어렵다.
private 생성자로 자식 클래스를 만들기 어렵다.
결론적으로 유연성이 떨어진다.
안티패턴으로 불리기도 한다.이를 해결하기 위해 스프링에서는 스프링컨테이너를 활용하여 싱글톤 패턴의 단점을 제거하면서 객체를 싱글톤으로 관리한다.
이때 스프링컨테이너는 싱글톤 컨테이너의 역할을 하며, 이 기능을 싱글톤 레지스트리라고 한다.

'Web > Java | Spring-boot' 카테고리의 다른 글
[SpringBoot] Maven VS Gradle, 빌드 자동화 도구 (0) 2021.08.15 [SpringBoot] 빈 생명주기 콜백 (Bean Life Cycle Callback) (0) 2021.08.08 [SpringBoot] Spring Container, BeanFactory와 ApplicationContext (0) 2021.08.01 [SpringBoot] 객체 지향 설계, 스프링 (0) 2021.08.01 [SpringBoot] SpringBoot 프로젝트 구조 (0) 2021.07.25