빈 스코프(2)

웹 스코프

  • 웹 환경에서만 동작하는 스코프
  • 프로토타입과는 달리 스프링이 해당 스코프의 종료시점까지 관리하여 종료 메서드가 호출된다.

웹 스코프 종류

  1. request: HTTP 요청 하나가 들어오고 나갈 때까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다.
  2. session: HTTP Session과 동일한 생명주기를 가지는 스코프
  3. application: ServeltContext와 같은 생명주기를 갖는 스코프
  4. websocket: 웹 소켓과 동일한 생명주기를 가지는 스코프

HTTP request 요청 당 각각 할당되는 request 스코프

  1. Client A와 B가 동시에 요청을 보냈다 가정
  2. 스프링읜 A와 B 각각 별도의 객체를 설정한다.
  3. 요청에 응답이 나가면 객체 destroy

스코프와 프록시

  • @Scope(value = “request”, proxyMode = “TARGET.CLASS”)
  • 가짜 프록시 클래스를 만들어두고 HTTP request와 상관없이 가짜 프록시 클래스를 다른 빈에 미리 주입해둘 수 있다.
  • 스프링 컨테이너는 CGLIB라는 바이트코드 조작 라이브러리를 사용해 가짜 프록시 객체를 생성하고 스프링 컨테이너에 등록한다.
  • 따라서 의존관계 주입도 가짜 프록시 객체가 주입된다.

가짜 프록시 객체는 요청이 오면 내부에서 진짜 빈을 요청하는 로직이 있다.

  • CGLIB라는 라이브러리로 내 클래스를 상속받은 가짜 프록시 객체를 만들어 주입한다.
  • 가짜 프록시 객체는 실제 요청이 오면 그때 내부에서 실제 빈을 요청하는 위임 로직이 있다.
[출처]

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus