웹 어플케이션에서 여러 고객이 요청을 할 때마다
DI컨테이너는 새로운 객체를 생성하게 됨
=> 트래픽이 클수록 더 많은 객체 생성과 소멸 반복 == 메모리부하
=> 싱글톤의 필요성
싱글톤 패턴 문제점
스프링 컨테이너는 알아서 싱글톤으로 객체를 관리함
스프링 컨테이너는 객체를 하나만 생성해서 싱글톤 객체로 빈을 관리하는 싱글톤 레지스트리 역할을 함.
설사 하나의 빈 생성자가 여러번 호출될 것 같은 상황에서도 싱글톤을 유지함 -> CGLIB라는 라이브러리를 통해 AppConfig클래스를 상속받은 임의의 다른 클래스를 만들고, 그 클래스를 스프링 빈으로 등록함. 실제로 내가 만든 객체를 인스턴스로 만드는게 아니라는 것.
그래서 AppConfig의 @Configuration을 제거하면
생성자가 중복해서 호출되는 것을 확인할 수 있음
(Test.ConfigurationSingletonTest 확인)
+싱글톤 방식의 주의점