강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

정성민님의 프로필 이미지
정성민

작성한 질문수

스프링 핵심 원리 - 기본편

다음으로

스프링 bean에서 request scope를 어떻게 식별해 같은 객체를 주입하는지 궁금합니다.

작성

·

86

0

안녕하세요? 빈 스코프 관련해 궁금한게 생겨 문의드립니다.

 

request 스코프를 사용하는 경우, 해당 request안에서 실행되는 각종 service들에서 전부 같은 빈 인스턴스를 받을수 있다고 강의에서 알려주셨습니다.

그런데 이것이 어떻게 동작하는지가 궁금합니다.

각 service들은 단순 인스턴스일 뿐이고, request와 관련된 정보는 하나도 가지고 있지 않습니다. 또한 service들으 싱글톤일수도 있고, 특정 scope에 속할수도 있구요. service들은 본인이 A request에 속해 실행되고 있는지, B request에 속해 실행되고 있는지 식별할 방법이 없어보입니다.

매 request마다 다른 쓰레드에서 실행이 된다면, 빈 주입을 시도한 thread의 이름이나 식별정보를 통해서 request를 구분할수도 있지 않을까 생각이 들었는데, 구현부에서 멀티쓰레드를 사용하다면 이 또한 보장하기 힘든 방법이라고 생각이 듭니다.

스프링 bean은 serivce와 같은 여러 인스턴스들에서 request scope를 어떻게 식별해 주입 해주고 있나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 정성민님.

스프링의 request 스코프는 주로 웹 애플리케이션 개발 시 사용되며, 각 HTTP 요청마다 개별적인 빈 인스턴스를 제공하는 역할을 합니다. 스프링은 이런 동작을 실현하기 위해 몇 가지 메커니즘을 사용합니다.

Request 스코프의 동작 원리

  1. ThreadLocal: 스프링은 ThreadLocal 같은 기법을 사용하여 HTTP 요청마다 개별적인 스코프 빈을 할당합니다. ThreadLocal은 각 스레드에서 고유한 객체를 가질 수 있는 방법을 제공하며, 그에 따라 각 HTTP 요청을 처리하는 스레드는 요청 당 고유한 request 스코프 빈을 참조하게 됩니다.

  2. 프록시 객체: 스프링은 request 스코프 빈을 관리하기 위해 프록시 객체를 사용합니다. 스프링은 실제 빈 대신에 프록시를 주입하며, 프록시는 실제 request 스코프 빈을 요청 시점에 동적으로 찾아 반환합니다. 이를 통해 동일한 HTTP 요청 내에서 모든 서비스는 동일한 request 스코프 빈 인스턴스를 받을 수 있게 됩니다.

  3. 스프링 컨텍스트: 요청이 들어오면 스프링 컨텍스트는 요청의 범위를 추적하고 관리할 수 있습니다. 각 요청에 대해 관련된 빈을 생성하고 해제하는 책임을 가지며, HTTP 요청의 시작과 종료를 감지하여 그에 따라 빈 생성을 관리합니다.

관련 링크

  1. request 스코프 문의드립니다..
  2. @Scope(“request”) 에 대한 궁금정 해결

위의 링크들은 다른 수강생의 질문에 대한 답변을 포함하고 있으며, 스프링의 request 스코프에 대한 개념을 이해하는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

정성민님의 프로필 이미지
정성민

작성한 질문수

질문하기