- 웹 환경에서만 동작하므로 웹 라이브러리가 필요
implementation 'org.springframework.boot:spring-boot-starter-web'
- 웹 스코프는 여러 종류의 스코프를 가지고 있다
request
: 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프
(하나의 HTTP request가 lifecycle)session
: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프application
: 웹 서블릿 컨텍스와 같은 범위로 유지되는 스코프
[ 로직 이해 그림 ]
- 각 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를 사용해서 실제 request가 들어오는 시점까지 Bean 생성을 지연
- Controller / Service에서 myLogger사용부분에 Provider 적용
(LogDemoController.java)
(LogDemoService.java)
- Proxy 설정을 통해 가짜 myLogger를 올려서 실제 요청이 오기 전까지 생성을 지연 하는 방식
- Controller / Service 에서 Provider로 감싸지 않고 원래 코드 그대로 사용 가능