본문 바로가기
Spring/Spring core basic

[Spring core basic] 46 - 웹 스코프 (개요)

by Kloong 2022. 5. 3.

참고

더보기

Spring core basic 시리즈는 김영한 님의 "스프링 핵심 원리 - 기본편" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다. 마크다운을 잘 쓰지 못해서 가독성이 조금 떨어지는 점 양해 바랍니다.

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

웹 스코프 - 개요

지금까지 싱글톤 스코프와 프로토타입 스코프를 학습했다.

싱글톤은 스프링 컨테이너의 시작과 끝까지 함께하는 매우 긴 스코프이고, 프로토타입은 생성과 의존관계 주입, 그리고 초기화까지만 진행하는 특별한 스코프이다.

웹 스코프 특징

  • 웹 스코프는 웹 환경에서만 동작한다.
  • 웹 스코프는 프로토타입 스코프와 다르게 스프링이 해당 스코프의 종료 시점까지 관리한다. 따라서 스프링에 의해 종료 메서드가 호출된다.

웹 스코프 종류

  • request: HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프이다. 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다.
  • session: HTTP Session과 동일한 생명주기를 가지는 스코프
  • application: 서블릿 컨텍스트(ServletContext )와 동일한 생명주기를 가지는 스코
  • websocket: 웹 소켓과 동일한 생명주기를 가지는 스코프

Session, application, websocket의 경우는 웹 관련 지식이 부족해서 잘 모르겠는데, reqeuest와 범위만 다를 뿐 동작 방식은 비슷하다고 한다. 따라서 여기서는 예제로 request 스코프만 사용한다.

각각의 HTTP request 당 할당되는 request 스코프 빈

  1. 클라이언트 A가 HTTP request를 하면, Controller가 HTTP request가 왔으므로, request scope에 관련된 빈을 조회를 할 것이다. 여기서는 Controller가 myLoger 빈을 조회한다고 하자.
  2. myLoger 빈은 HTTP request에 관련된 빈이므로, 클라이언트 A의 HTTP request 전용의 request scope 빈이 생성된다.
  3. 만약에 클라이언트 A의 HTTP request가 Service 객체에 관련된 동작을 요구한다면, Service 객체는 이전에 만들어두었던 클라이언트 A의 request 빈을 가지고 작업을 할 것이다.
  4. 클라이언트 B가 클라이언트 A와 완전히 동일한 시점에, 동일한 요청을 하더라도, 두 요청은 엄연히 다른 HTTP request 이므로 클라이언트 B 전용의 request 빈이 생성된다.

프로토타입 빈은 요청할 때 만들어지고, 그 이후로는 관리되지 않는다. 반면에 request 빈은 request가 들어오는 시점에 생성되고, request가 끝날 때 까지 계속 관리되고, 사용된다. 따라서 종료 메서드도 정상적으로 호출된다.

댓글