인프런 커뮤니티 질문&답변
@Scope 관련 질문이 있습니다.
작성
·
281
0
안녕하세요!
항상 좋은 답변 달아주셔서 감사합니다.
한 가지 궁금한 점이 있어 글을 적게 되었습니다.
1. A라는 클래스에 Request Scope를 사용하게 될 경우, 각 HTTP 요청마다 다른 A 클래스가 생성되서 오는 것을 확인했습니다. 이 때, 각 쓰레드별로 다른 Request Scope 빈을 사용하는 것으로 확인이 되었고, @PreDestory 메서드까지 처리되는 것을 확인했습니다.
정리해보면 요청이 올 때마다 새로운 Request 스코프빈이 만들어져서 스프링 컨텍스트에서 관리된다는 것으로 이해를 할 수 있을 것 같습니다!
그럼 요청 10개가 오면, 동시에 10개의 쓰레드가 활동하면서 동일한 빈을 만들고, 스프링 컨테이너에 저장되어있는 것으로 보입니다! 이 때, 각 쓰레드는 어떻게 자기가 처음에 배정받았던 Request Scope 빈을 스프링 컨테이너에서 받아오는지 궁금합니다. 그리고 각 Request Scope 빈은 동일한 타입의 다른 이름으로 저장이 되는 걸까요?
2. Set Proxy 모드로 Request 객체를 만들었습니다 .이 때, Controller 클래스에 @RequiredArgusConstruct를 이용해서 @Controller 클래스가 스프링 빈으로 등록될 때, RequestScope 빈을 DI 받도록 설정했습니다.
이 때, Http 요청을 동시에 10개를 하게 되면 각 쓰레드마다 다른 프록시 객체를 가지는 것을 확인했습니다. 그런데 이 RequestScope는 이미 Controller 빈이 등록될 때, 정해진 빈인데 어떻게 각 쓰레드가 요청할 때 마다 쓰레드별로 다른 빈을 반환해주게 되는 것인가요? 너무 궁금합니다
항상 좋은 답변 주셔서 감사합니다.
좋은 하루 되세요.
퀴즈
Ai chịu trách nhiệm về việc hủy bỏ bean prototype scope?
Spring Container
Client yêu cầu bean
@PreDestroy method
không bị phá hủy
답변 1
0
안녕하세요. 안상혁님
많은 부분이 궁금하시겠지만 이 부분에 대한 궁금증을 해결하려면 ThreadLocal이라는 고급 개념을 이해해야 합니다. ThreadLocal은 스프링 핵심원리 - 고급편에서 다룹니다^^
감사합니다.
안녕하세요. 상혁님^^
다음 질문을 다시 읽어보고 어떤 부분이 궁금하신지 이해가 되었습니다.
Q: 이 때, Http 요청을 동시에 10개를 하게 되면 각 쓰레드마다 다른 프록시 객체를 가지는 것을 확인했습니다. 그런데 이 RequestScope는 이미 Controller 빈이 등록될 때, 정해진 빈인데 어떻게 각 쓰레드가 요청할 때 마다 쓰레드별로 다른 빈을 반환해주게 되는 것인가요? 너무 궁금합니다
-> 이 내용을 읽어보니 빈 스코프에 대해서 아직 이해가 부족하신 것을 확인할 수 있었습니다. 이번 강의에 있는 빈 스코프 전체 내용을 차근차근 복습해보시면 큰 그림이 이해가 되실꺼에요.
감사합니다.






안녕하세요, 영한님. 답변 감사드립니다.
해당 강의를 수강했고, 쓰레드 로컬 개념에 대해 이해를 하고 있습니다.
Request Scope로 만들어진 빈은 싱글톤 빈이 아닌, 각 쓰레드의 쓰레드 로컬에 저장되어 관리되게 될까요? 예를 들어 Request Scope로 만들어진 빈은 싱글톤 빈에서 각 쓰레드의 참조 요청이 왔을 때, 각 쓰레드의 쓰레드 로컬에 저장되어있다가 꺼내서 사용되는 형태가 될까요?
그리고 생성 / 소멸 콜백도 일어나는 것을 확인했는데, 이 경우도 직접 스프링 컨테이너가 이 빈을 가지고관리하는 것이 아닌, 스프링에서 쓰레드 로컬의 Request Scope 객체를 저장할 때, 그리고 쓰레드 로컬에서 불러와서 Request Scope를 지울 때 발생하는 일일까요?
감사합니다!