웹 스코프
특징
웹 스코프는 웹 환경에서만 동작한다.
웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다.(종료 메소드가 호출된다.)
종류
reqeust : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프
sesssion : HTTP Session과 동일한 생명주기를 가지는 스코프
application : 서블릿 컨텍스트와 동일한 생명주기를 가지는 스코프
websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프
@Scope를 사용해서 request 스코프로 지정했다.
로그를 출력하기 위해 MyLogger 라는 클래스를 만들었다.
빈이 생성되는 시점에 자동으로 @PostConstruct 초기화 메소드를 사용해서 uuid를 생성해서 저장한다.
이 빈은 HTTP 요청 당 하나씩 생성되므로, uuid를 저장해두면 다른 HTTP 요청과 구분할 수 있다.
빈이 소멸되는 시점에 @PreDestroy를 사용해서 종료 메시지를 남긴다.
스프링 애플리케이션을 실행 시키니 오류가 발생하였다.
스프링 애플리케이션을 실행하는 시점에 싱글톤 빈은 생성해서 주입이 가능하지만, request 스코프 빈은 아직 생성되지 않는다. 이 빈은 실제로 고객의 요청이 와야 생성할 수있다.
스코프와 Provider
위와 같은 에러를 해결하는 방안으로 Provider를 쓸 수 있다.
ObjectProvider 를 사용하여 ObjectProvider.getObject()를 호출하는 시점까지 request scope 빈의 생성을 지연 할 수 있다.
스코프와 프록시
두번째로는 프록시 방식이 있다.
적용 대상이 class 면 TARGET_CLASS , interface면 INTERFACES 선택하면 된다.
잘 동작한다.
프록시 동작 원리는 MyLogger 라는 클래스가 스프링 컨테이너에서 CGLIB 라는 바이트 조작 라이브러리를 사용해서
MyLogger 를 상속받은 가짜 프록시 객체를 생성한다.
스프링 컨테이너에 myLogger 라는 이름으로 가짜 프록시 객체가 등록된다.
가짜 프록시 객체는 요청이 오면 그때 내부에서 진짜 빈을 요청하는 위임로직이 들어있다.
가짜 프록시 객체는 싱글톤처럼 동작한다.
주의점
싱글톤을 사용하는 것 같지만 다르게 동작하기 때문에 주의해서 사용해야한다.
이런 특별한 scope는 꼭 필요한 곳에만 최소화해서 사용해야한다. 유지보수가 어려울 수 있음.
'SPRING' 카테고리의 다른 글
김영한 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 2일차 (0) | 2021.12.29 |
---|---|
김영한 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 1일차 (0) | 2021.12.27 |
김영한 SPRING 기본편 6일차 (0) | 2021.12.13 |
김영한 SPRING 기본편 5일차 (0) | 2021.12.13 |
김영한 SPRING 기본편 4일차 (0) | 2021.12.10 |