작성
·
137
0
본 영상에서는 싱글톤 패턴이 적용 되어 memberRepository 를 앞 메서드에서 생성하기 때문에 new memberRepository 가 생성이 안된 것을 알 수 있었는데요, 제가 테스트 코드 돌려보니 @Configuration 어노테이션 붙여도 memberRepository 가 계속 호출 되더라구요. 정상적인 작동인지 궁금합니다.
영상에서 나온 콘솔은
call AppConfig.memberService
call AppConfig.memberRepository
call AppConfig.orderService
입니다.
https://github.com/bukwon/core
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문을 보면 @Configuration
어노테이션을 사용함에도 불구하고 memberRepository
가 예상과 다르게 여러 번 호출되는 상황에 대해 궁금해하시는 것 같습니다. @Configuration
어노테이션이 붙은 클래스에서는 스프링 컨테이너가 싱글턴을 보장하기 위해 CGLIB 라이브러리를 사용하여 클래스의 프록시 객체를 생성합니다. 이 프록시 객체는 해당 빈(bean)의 메서드 호출시 싱글턴이 유지되는지 확인하고, 이미 생성된 빈이 있으면 새로 생성하지 않고 기존에 생성된 빈을 반환합니다.
로그에 나타난 $$EnhancerBySpringCGLIB$$
는 스프링이 CGLIB을 사용하여 해당 클래스의 프록시를 생성했음을 나타냅니다. 이는 스프링이 @Configuration
어노테이션이 붙은 클래스를 통해 빈 생성시 싱글턴이 보장되도록 관리한다는 것을 의미합니다.
그러나, 실제로 메서드가 여러 번 호출되는 경우는 프록시를 통한 싱글턴 보장과 다른 문제일 수 있습니다. 예를 들어, 메서드가 실제로 여러 번 호출되었다면, 이는 스프링 설정이나 코드상의 다른 이슈일 수 있으며, 자세한 원인은 코드의 전체적인 컨텍스트를 확인해야 파악할 수 있습니다.
님께서 올려주신 깃허브 링크나, 영상에서의 설명만으로는 문제의 정확한 원인을 파악하기 어렵습니다. 프록시 생성과 관련된 부분은 정상적으로 작동하는 것으로 보이지만, 실제로 memberRepository
가 여러 번 호출되는 상황은 보다 추가적인 코드 검토가 필요할 것 같습니다.