해결된 질문
작성
·
222
·
수정됨
0
안녕하세요, 영한님.
강의 보면서 열심히 배우고 있습니다.
질문 부분은 싱글톤과 관계없이 일단 memberRepository가 몇 번 호출이 될까 하는 부분입니다.
강의를 보았으니 정답은 1번이라고 알고 있는데, 왜 영한님이 3번을 말씀하셨던걸까 궁금해서요.
(강의 요지와는 상관없는 부분인 것 같아 죄송합니다.)
memberService를 호출한다.
MemberServiceImpl이 memberRepository를 호출하면, memberRepository를 bean으로 등록하고 . (1번)
호출을 완료한다. (2번)
orderService를 호출한다.
OrderServiceImpl이 memberRepository를 호출한다. (3번)
이렇게 해서 3번이 호출된다고 말씀하신게 맞을까요?
감사합니다.
답변 2
1
안녕하세요. 김민수님
싱글톤이 아니라면 다음과 같이 memberRepository()가 3번 호출됩니다.
스프링 컨테이너 -> memberService() -> memberRepository() 호출
스프링 컨테이너 -> memberRepository() 호출
스프링 컨테이너 -> orderService() -> memberRepository() 호출
감사합니다.
0
안녕하세요, 김민수님. 인프런 AI 인턴입니다.
김민수님의 질문은 스프링 컨테이너에서 @Bean
메서드들이 호출됨에 따라 memberRepository
가 몇 번 호출되는지를 알고 싶으신 것으로 이해했습니다. 스프링의 싱글톤 스코프는 @Configuration
과 관련이 깊기 때문에 이 부분을 강조드리고 싶습니다.
스프링은 @Configuration
클래스 내에서 @Bean
으로 정의된 메서드들이 일반적인 메서드 호출과는 달리 싱글톤 패턴을 통해 한 번만 해당 객체를 생성하여 관리하게 됩니다. 그 결과, 여러 차례 호출되더라도 항상 동일한 객체를 반환합니다. 주어진 출력 예시와 코드를 기반으로 말씀드리면:
memberService()
메서드가 호출되면서 내부적으로 memberRepository()
메서드를 사용하여 memberRepository
를 필요로 합니다. 이때 memberRepository()
가 호출됩니다. (1번)
이후 memberRepository()
는 싱글톤 빈으로 등록됩니다.
orderService()
에서도 memberRepository()
를 사용하려고 하면서 다시 호출됩니다. 하지만, 이때는 이미 싱글톤 빈으로 등록된 인스턴스를 반환하게 됩니다. (실제 객체 생성은 한 번만 이루어집니다.)
따라서 로그상으로 memberRepository()
메서드가 호출된 것은 맞지만, 스프링의 싱글톤 패턴에 의해 실제로 생성된 객체는 한 번뿐입니다.
유사한 질문과 답변을 다음에서 확인해 보실 수 있습니다:
싱글톤이 안먹히는 것 같습니다 ㅠㅠ - 여기서는 싱글톤 컨텍스트에서 동일 인스턴스를 보장받지 못하는 문제를 해결하는 방법을 알아볼 수 있습니다.
@Configuration과 빈 생성 관련 질문 - 해당 질문에서는 @Configuration
이 적용되지 않을 때 빈이 제대로 관리되지 않는 경우에 대한 논의가 포함되어 있습니다.
이외에도 자세한 설정을 확인하고 오류 없이 작동하도록 구성 코드를 재점검하여, 특히 @Configuration
과 @Bean
어노테이션 사용의 중요성을 강조하여 싱글톤이 제대로 적용되도록 설정해 주셔야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다 :)