프레임워크/Nest.js

Nest.js Request Lifecycle 과 기본 아키텍처

Jake Seo 2024. 1. 6. 16:58

Nest.js 기본 아키텍처 살펴보기

  • 아래는 참고용 Request Lifecycle 아키텍처 그림이다.
  • Controller, Service, Repository 가 요청 로직을 실제로 처리하는 부분이다.
    • 나머지는 없어도 동작을 하지만 요청 로직을 실제로 처리하는 부분은 반드시 있어야 한다.

picture 1

미들웨어

  • request 와 resoponse 그리고 next() 함수에 접근할 수 있는 함수를 구성할 때 사용된다.
  • 로깅이나 요청 검증 등에 사용 가능하다.

가드

  • 인증 및 권한 부여에 사용된다.
  • CanActivate 인터페이스를 구현한다.

인터셉터

  • 메서드 실행 전 후에 추가 로직을 바인딩한다.
  • 메서드 결과를 변형한다.
  • 응답을 확장한다.

파이프

  • 라우트 핸들러가 처리할 인수에 대해 작동한다.
  • 데이터 유효성 검사 혹은 변환에 사용된다.
  • PipeTransform 인터페이스를 구현한다.

컨트롤러 (Controller)

  • @Controller 데코레이터가 달린 클래스.
  • 인바운드 요청을 처리하고 응답을 생성한다.
  • HTTP 컨트롤러는 HTTP 메서드와 경로에 따른 처리를 한다.
  • 마이크로서비스 컨트롤러는 다양한 전송을 통해 실행되는 요청과 이벤트에 응답한다.

필터

  • HTTP 요청을 실행하는 동안 발생하는 예외를 처리한다.
  • ExceptionFilter 인터페이스를 구현하여 사용자 정의 예외 필터를 정의 가능하다.

모듈 (Module)

  • @Module 데코레이터가 달린 클래스.
  • 앱 구조를 스코프로 구성하는데 사용.
  • 컨트롤러와 프로바이더는 선언된 모듈에 의해 범위가 지정된다.
  • 모듈과 해당 클래스(Controller 와 Provider)는 Nest.js 가 의존성 주입을 수행하는 방식을 결정하는 그래프를 형성한다.

프로바이더 (Provider)

  • @Injectable() 로 데코레이팅되어 Nest의 의존성 주입 시스템의 일부가 된다.
  • Nest 에 내장된 의존성 주입 시스템 (DI System) 을 사용하여 생성자 매개변수 주입을 통해 다른 클래스에 주입할 수 있다.
  • 주입 시, 주입되는 클래스의 모듈 범위 내에 표시되어야 한다.
    • 프로바이더를 같은 모듈 스코프에 정의한다.
    • 한 모듈 스코프에서 프로바이더를 내보내고 해당 모듈을 주입되는 클래스의 모듈 스코프로 가져오기
    • @Global() 데코레이터를 사용하여 글로벌로 표시된 모듈에서 프로바이더를 내보내기
  • 서비스, 리포지토리, 팩토리, 헬퍼 등을 포괄하는 광범위한 카테고리다.
  • 컨트롤러와 다른 프로바이더에 프로바이더를 주입할 수 있다.

의존성 주입

  • Nest 는 강력한 의존성 주입 시스템을 사용하여 다양한 컴포넌트 간의 종속성을 정의한다.

마이크로서비스

TCP, Redis, MQTT 와 같은 다양한 전송 계층을 사용하는 마이크로 서비스 아키텍처를 지원한다.

반응형