Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
빈 스코프(2)
웹 스코프
- 웹 환경에서만 동작하는 스코프
- 프로토타입과는 달리 스프링이 해당 스코프의 종료시점까지 관리하여 종료 메서드가 호출된다.
웹 스코프 종류
request: HTTP 요청 하나가 들어오고 나갈 때까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다.session: HTTP Session과 동일한 생명주기를 가지는 스코프application: ServeltContext와 같은 생명주기를 갖는 스코프websocket: 웹 소켓과 동일한 생명주기를 가지는 스코프
HTTP request 요청 당 각각 할당되는 request 스코프
- Client A와 B가 동시에 요청을 보냈다 가정
- 스프링읜 A와 B 각각 별도의 객체를 설정한다.
- 요청에 응답이 나가면 객체 destroy
스코프와 프록시
- @Scope(value = “request”, proxyMode = “TARGET.CLASS”)
- 가짜 프록시 클래스를 만들어두고 HTTP request와 상관없이 가짜 프록시 클래스를 다른 빈에 미리 주입해둘 수 있다.
- 스프링 컨테이너는 CGLIB라는 바이트코드 조작 라이브러리를 사용해 가짜 프록시 객체를 생성하고 스프링 컨테이너에 등록한다.
- 따라서 의존관계 주입도 가짜 프록시 객체가 주입된다.
가짜 프록시 객체는 요청이 오면 내부에서 진짜 빈을 요청하는 로직이 있다.
- CGLIB라는 라이브러리로 내 클래스를 상속받은 가짜 프록시 객체를 만들어 주입한다.
- 가짜 프록시 객체는 실제 요청이 오면 그때 내부에서 실제 빈을 요청하는 위임 로직이 있다.
[출처]