해결된 질문
작성
·
341
1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
제가 Provider에 대해 이해한게 맞는지 궁굼해서 질문 드립니다. 강의는 9강 스코프와 Provider입니다!
먼저 Error creating bean with name 'myLogger': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton;
이 오류가 일어나는 이유가 스프링 컨테이너에서 request 스코프 빈에 대한 의존관계를 주입하려고 하는데, 아직 클라이언트가 요청을 하지 않아서 리퀘스트 스코프 빈이 생성되지 않아서 오류가난다라고 이해했습니다
1번이 맞다면..Provider을 사용하는 이유가, Request 스코프 빈이 의존관계 주입 시점에 호출이 안되서 오류가 났었는데, 클라이언트가 요청한 시점에 getObject나 get 메서드를 이용해서 request 스코프 빈을 생성하고 반환하는 DL기능을 써서, 의존관계가 잘 주입되게 해준다라고 이해했습니다
질문은 총 두 개 입니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
ys님의 질문에 대해 이해하신 내용이 맞는지 확인하시는 과정에 도움을 드리고자 합니다. Provider와 관련된 내용과 스코프에 대해 자세히 알아볼 수 있는 유사한 질문과 답변이 있어 링크를 공유드립니다.
“Provider” 질문에서는 스프링의 ObjectProvider에 대한 이해와 ObjectProvider를 이용하여 request 스코프 빈의 생성을 지연하는 방법에 대한 설명이 제공되었습니다. 질문 링크 - 스프링 핵심 원리 - 기본편 강의 중 Provider에 대한 질문
“스코프와 provider 관계” 질문에서는 Provider 사용 전 후의 차이점과 DL(Dependency Lookup)에 대해 설명되어 있으며, request 스코프와의 관계가 자세히 정리되어 있습니다. 질문 링크 - 스코프와 provider 관계에 대한 이해 확인
“request 스코프와 ObjectProvider 이해” 질문에서도 ObjectProvider를 통해 request 스코프의 빈 생성 시점을 제어하는 방법에 대한 설명이 포함되어 있습니다. 질문 링크 - request 스코프와 ObjectProvider에 대한 이해
위 링크들을 참고하시면 ys님께서 이해하신 내용을 더 확실히 다지고, 궁금증을 해소하는데 도움이 될 것입니다.
감사합니다.
그러면 LogDemoController과 LogDemoService는 싱클톤 스코프이니까 스프링 컨테이너에 빈생성과 의존관계가 주입되어있고, 클라이언트가 요청하기 전에는 request 스코프 빈이 생성되지 않아 의존관계를 주입할 수 없으니, Provider을 이용해서 request 스코프 빈이 실제 사용되는(getObject()호출될 때) 순간까지 request 스코프 빈의 생성을 미룬다. Provider에 요청할 때 스프링 컨테이너에서 빈을 조회하는데, 있으면 반환하고 없으면 생성해서 의존관계를 주입한다.(이 시점에는 요청이 되었기 때문에 반환해서 의존관계를 주입) 이렇게 이해해도 좋을까요??