NestJS 의 생명주기
Middleware
-
Middleware 는 라우트 핸들러가 클라이언트 요청을 처리하기 전에 수행하는 컴포넌트이다.
-
로깅, 에러핸들링, 인증/인가 등 어떤 형태로든 사용 가능하다.
-
NestJS에서는 인증/인가는 가드, 에러핸들링은 exception filter를 권장한다.
-
이 외에도 DB 트랜잭션으로도 사용가능하다
참고 : ASSU blog - Middleware
Guard
- middleware와 비슷한 역할을 하지만 guard는 실행콘텍스트 내부 객체의 접근할 수 있으므로 다음 핸들러가 하는 역할을 알고 있다.
- 따라서 인증은 미들웨어, 인가는 가드를 통해서 하는 것이 효율적이다.
참고 : DaleSeo - Guard
Interceptor
- Interceptor 는 요청과 응답을 가로채서 변경을 가할 수 있는 컴포넌트
- 할 수 있는 기능
- 메서드 실행 전/후 추가 로직 바인딩
- 함수에서 반환된 결과 변환
- 함수에서 던져진 예외 변환
- 특정 조건에 따라 기능 재정의 (예: 캐싱)
- 로깅이나 데이터변환 시 유리할 것 같다
참고 : ASSU blog - interceptor
Pipes
- Pipe 는 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환하거나 검사할 수 있도록 한다.
- 보통 변환이나 검증 목적으로 사용한다.
- middleware는 context를 알지 못하므로 사용하기 어렵다.
- class-validator, class-transformer 설치 후 사용
- 라우트마다 혹은 전역적으로 설정 해 사용
참고 : ASSU blog - pipe