NestJS Injection Scopes

paduck·2024년 6월 15일
0

NestJS

목록 보기
15/24

거의 모든 것이 요청 간에 공유

  • 각 요청이 별도의 스레드에 의해 처리되는 요청/응답 멀티 스레드 무상태 모델을 따르지 않음
  • 싱글톤 인스턴스 사용에 무리가 없음
DEFAULT 애플리케이션 전체에서 provider의 단일 인스턴스가 공유됩니다. 인스턴스 수명은 애플리케이션 수명 주기와 직접적으로 연결됩니다. 애플리케이션이 부트스트랩된 후 모든 싱글톤 provider가 인스턴스화됩니다. 싱글톤 스코프는 기본적으로 사용됩니다.
REQUEST 들어오는 각 요청마다 provider의 새 인스턴스가 생성됩니다. 요청이 처리된 후 인스턴스는 가비지 컬렉션됩니다.
TRANSIENT 트랜지언트 provider는 소비자 간에 공유되지 않습니다. 트랜지언트 provider를 주입하는 각 소비자는 새로 전용 인스턴스를 받게 됩니다.

@Injectable() 데코레이터에 scope 속성을 전달해 정의 가능

  • custom provider 에서도 마찬가지
  1. REQUEST Scope

자체적으로 요청 스코프

  • 의존성 여부에 따라 스코프가 전달될 수 있음

  • 성능에 굉장한 영향을 미침

    • Durable provider 를 통해 매 요청에 따른 생성 해결
      durable 속성을 전달해야 하며,
      요청에 상응하는 하위 구조에 전략을 구현해야 함
  1. TRANSIENT Scope
    요청에 따른 새로운 인스턴스를 반환받기 때문에 전달되거나 종속되지 않음

INQUIRER 토큰을 주입해 provider 가 생성된 클래스를 알 수 있음

profile
학습 velog

0개의 댓글