Spring 핵심 원리 기본편 (12) - 빈 스코프(Scope) [2] / 웹 스코프, 프록시(Proxy)

김정욱·2021년 2월 23일
0
post-thumbnail
post-custom-banner

웹 스코프(Scope)

  • 웹 환경에서만 동작하므로 웹 라이브러리가 필요
implementation 'org.springframework.boot:spring-boot-starter-web'
  • 웹 스코프는 여러 종류의 스코프를 가지고 있다
    • request
      : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프
        (하나의 HTTP request가 lifecycle)
    • session
      : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프
    • application
      : 웹 서블릿 컨텍스와 같은 범위로 유지되는 스코프

request Scope

[ 로직 이해 그림 ]

  • 각 HTTP request마다 새로운 Bean을 할당받게 되는 Scope!

[ 예제 ]

: request scope를 사용해 특정 url로 들어갔을 때 request별로
[uuid][url] [message]를 출력
하는 예제

(MyLogger.java)


(LogDemoController.java)


(LogDemoService.java)


  • 위 코드를 실행하면 오류가 난다!!
    • 왜?
    • myLogger는 빈을 등록하면서 바로 의존관계 주입이 이루어지는데, request scope라서 현재 request 요청이 없는 상태에서는 존재할수 없음!!
    • 즉, 실제 request 가 올 때 생성될 수 있도록 하는 무언가가 필요!
    • 실제 request가 올 때 까지 지연시킬 수 있도록 Provider or Proxy 필요!

Provider 적용

  • Provider를 사용해서 실제 request가 들어오는 시점까지 Bean 생성을 지연
  • Controller / Service에서 myLogger사용부분에 Provider 적용

(LogDemoController.java)


(LogDemoService.java)


Proxy 적용

  • Proxy 설정을 통해 가짜 myLogger를 올려서 실제 요청이 오기 전까지 생성을 지연 하는 방식
  • Controller / Service 에서 Provider로 감싸지 않고 원래 코드 그대로 사용 가능

profile
Developer & PhotoGrapher
post-custom-banner

0개의 댓글