Skip to content

Latest commit

 

History

History
179 lines (120 loc) · 5.37 KB

2024-06-09.md

File metadata and controls

179 lines (120 loc) · 5.37 KB

날짜: 2024-06-09


🌤️ 스크럼

  • 학습 목표 1 : 빈 스코프 학습하기

⚡️ 새로 배운 내용

[Spring Boot] 빈 스코프

빈이 생성되고 유지되는 범위

  • 스프링 전체 단위의 스코프 스프링 컨테이너가 실행되고 있는 전체 및 그 이상의 범위


    • 싱글톤(Singleton) 애플리케이션에서 하나의 인스턴스만 생성되는 스코프 → 리소스를 절약하고, 모든 사용자에게 도일한 상태를 제공하기 위해 사용한다.

      • ex. 주방에 있는 하나뿐인 큰 냄비 - 모든 요리사가 공유한다.
      @Component
      public class SingletonBean {
          // ...
      }

      기본적으로 스프링 빈은 싱글톤 스코프로 생성된다.

    • 프로토타입(Prototype)
      요청할 대마다 새로운 인스턴스를 생성하는 스코프 → 각 요청마다 별도의 상태를 유지해야 할 때 사용한다.

      • ex. 주방에 있는 컵 - 요리사마다 서로 다른 컵을 사용한다.
      @Scope("prototype")
      @Component
      public class PrototypeBean {
          // ...
      }

  • 스프링 웹 어플리케이션 단위의 스코프 스프링 웹에서만 유효한 범위 = 유저의 요청(POST, GET 등)으로부터 응답이 나가는 그 순간까지


    • Request
      HTTP 요청마다 새로운 인스턴스를 생성하는 스코프 → 각 HTTP 요청마다 별도의 상태를 유지해야 할 때 사용한다. 하나의 요청에 하나의 빈이 생성되고 소멸된다.

      • ex. 레스토랑에서 각 손님이 따로 제공받는 메뉴판
      @Component
      @ReqeustScope
      public class RequestBean {
          // ...
      }
      @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
      @Component
      public class RequestBean {
          // ...
      }
      • 특정 요청 클래스에 이 클래스를 주입받는 경우, 매 요청마다 RequestBean 객체가 새로 생성된다.
    • Session HTTP 세션마다 새로운 인스턴스를 생성하는 스코프 → 각 사용자 세션마다 별도의 상태를 유지해야 할 때 사용한다.

      • ex. 호텔에서 머무는 동안 손님에게 제공되는 방 - 머무는 동안 상태가 유지된다.
      @Component
      @SessionScope
      public class SessionBean {
          // ...
      }
      @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
      @Component
      public class SessionBean {
          // ...
      }
      • 특정 세션 클래스에 이 클래스를 주입받는 경우, 매 세션마다 SessionBean 객체가 새로 생성된다.
    • Application 웹 어플리케이션 단위에서 하나의 인스턴스를 생성하는 스코프 → 웹 어플리케이션 전체에서 공유해야 할 상태를 유지해야 할 때 사용한다.

      • ex. 호텔 전체에서 공유하는 수영장 - 모든 손님이 공유한다.
      @Component
      @ApplicationScope
      public class ApplicationBean {
          // ...
      }
      @Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS)
      @Component
      public class ApplicationBean {
          // ...
      }
      • 특정 웹 어플리케이션 클래스에 이 클래스를 주입받는 경우, 웹 어플리케이션 전체에서 ApplicationBean 객체가 공유된다.
    • 웹 소켓 단위의 스코프도 있다.


  • ❓ 언제 스코프를 사용할 때 좋은지

    • 싱글톤

      • 스프링 IoC 컨테이너 전체에서 빈이 상태를 가지지 않거나, 상태가 공유되어야 하는 경우
    • 프로토타입

      • 각 사용자가 독립적인 상태를 유지해야 하는 경우
    • 리퀘스트

      • 각 HTTP 요청마다 독립적인 상태를 유지해야 하는 경우
    • 세션

      • 각 사용자 세션마다 독립적인 상태를 유지해야 하는 경우
    • 어플리케이션

      • 웹 어플리케이션 전체 (서블릿 수준에서) 에서 공유해야 하는 상태를 유지해야 하는 경우

        서블릿 이란? 웹 서버에서 동작하는 자바 클래스로, 클라이언트의 요청을 처리하고 동적 콘텐츠를 생성하는 역할을 한다.


🔥 오늘의 도전 과제와 해결 방법


🤔 오늘의 회고

  • 스크럼 중 완료한 작업: 빈 스코프 학습하기

    • 빈 스코프에 대해 이해하고, 각 스코프의 특징과 사용하는 경우를 알게 되었다.

    • 싱글톤, 프로토타입, 리퀘스트, 세션, 어플리케이션 스코프에 대해 알게 되었다.

    • 스프링 빈의 스코프를 설정하는 방법을 알게 되었다.


참고 자료 및 링크

  • 제푸의 강의 자료