웹 스코프
- 웹 스코프는 웹 환경에서만 동작한다.
- 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다.
- request
- HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프
- 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다.
- session
- HTTP Session과 동일한 생명주기를 가지는 스코프
- application
- 서블릿 컨텍스트( ServletContext )와 동일한 생명주기를 가지는 스코프
- websocket
- 웹 소켓과 동일한 생명주기를 가지는 스코프
@Scope(value = "request")
- HTTP 요청 당 하나 씩 생성되고, HTTP 요청이 끝나는 시점에 소멸
- requestURL 은 이 빈이 생성되는 시점에는 알 수 없으므로, 외부에서 setter로 입력 받는다.
스코프와 프록시
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyLogger {
}
- CGLIB라는 라이브러리로 내 클래스를 상속 받은 가짜 프록시 객체를 만들어서 주입한다.
동작 정리
- CGLIB라는 라이브러리로 내 클래스를 상속 받은 가짜 프록시 객체를 만들어서 주입한다.
- 이 가짜 프록시 객체는 실제 요청이 오면 그때 내부에서 실제 빈을 요청하는 위임 로직이 들어있다.
- 가짜 프록시 객체는 실제 request scope와는 관계가 없다.
- 그냥 가짜이고, 내부에 단순한 위임 로직만 있고, 싱글톤 처럼 동작한다.
특징 정리
- 프록시 객체 덕분에 클라이언트는 마치 싱글톤 빈을 사용하듯이 편리하게 request scope를 사용할 수 있다.
- 핵심 아이디어는 진짜 객체 조회를 꼭 필요한 시점까지 지연처리 한다는 점이다.
- 단지 애노테이션 설정 변경만으로 원본 객체를 프록시 객체로 대체할 수 있다.
- 이것이 바로 다형성과 DI 컨테이너 가 가진 큰 강점이다.
- 꼭 웹 스코프가 아니어도 프록시는 사용할 수 있다.
'Spring > Basic' 카테고리의 다른 글
[Basic] 간단하게 기억할 내용 (0) | 2024.08.21 |
---|---|
[Basic] Tomcat 직접 등록을 통한 환경 세팅 방법 (0) | 2024.08.09 |
[Basic] 빈 스코프 (0) | 2024.04.07 |
[Basic] 빈 생명주기 (0) | 2024.04.07 |
[Basic] 의존관계 자동 주입 (0) | 2024.04.05 |