← Lab💡
💡
🚩
🚩
NestJS의 인터셉터(Interceptors)란?
스터디2024.08.07
- NestJS

NestJS에서인터셉터(Interceptors)는요청과응답을 가로채어 추가 처리를 할 수 있게 해주는 기능이다. 주로요청 전/후 로직을 실행하거나 응답데이터를 변환하고, 로깅, 캐싱, 에러 처리등을 수행하는데 사용된다.
💡 인터셉터(Interceptors) 의 특징
요청 및 응답 조작:요청을 처리하기 전에검사하거나 변형하고,응답을 반환하기 전에 데이터를수정하거나 형식을 변경할 수 있다.다양한 용도:로깅,캐싱,성능 모니터링,변환,보안 검사,예외 처리등 다양한 용도로 사용할 수 있다.글로벌,컨트롤러,메소드수준에서 사용 가능 :특정 범위에서만 적용할 수 있다.
💡 인터셉터(Interceptors) 사용법
🚩 인터셉터(Interceptors) 정의하기
→ NestIntercptor 라는 인터페이스를 구현하여 인터셉터를 정의한다.
/* Injectable : NestJS의 DI를 사용하기 위함
* NestInterceptor : 인터셉터를 정의하기 위한 인터페이스
* ExecutionContext : 현재 실행중인 요청 가져오기
* CallHandler : 컨트롤러 메소드 호출
* Observable : RxJS 클래스 호출. 비동기 데이터 스트림을 뜻함. 인터셉터는 해당 스트림을 통해
* 데이터 변환 가능
*/
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable() // 의존성 주입 가능 클래스 지정
export class TransformInterceptor<T> implements NestInterceptor<T, any>{
// intercept를 통해 요청을 가로채고 다음 처리 단계(컨트롤러)로 전달
// context : 현재 실행중인 요청을 말한다.
// next : 컨트롤러를 호출하는 메소드
intercept(context: ExecutionContext, next: CallHandler): Observable<any>{
// next.handle() : 다음 핸들러(컨트롤러 메소드) 호출
return next.handle().pipe( // pipe : 연산자를 연결하여 Observable의 데이터 처리
map(data -> ({ data })), // 응답 데이터를 수정하여 `{ data : originData }`형식으로 변경
);
}
}
🚩 인터셉터(Interceptors) 적용하기
→ 인터셉터를 적용하고자 하는 컨트롤러 혹은 특정 핸들러에 @UseInterceptors 데코레이터를 사용하여 적용하거나, 글로벌 로 적용한다.
import { Controller, Get, UseInterceptors } from '@nestjs/common';
@Controller('dogs')
@UseInterceptors(TransformInterceptor) // 컨트롤러에 인터셉터 적용
export class DogsController{
@Get()
findAll(){
return ['dog1', 'dog2'];
}
}
🤔 글로벌 인터셉터를 적용하기 위해선?
→ 글로벌 인터셉터(Global Interceptors) 를 적용하기 위해선 app.module.ts 에서 설정할 수 있다.
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core'; // 인터셉터 모듈 불러오기
@Module({
providers: [
{
provide: APP_INTERCEPTOR,
useClass: TransformInterceptor, // 정의한 인터셉터 적용
},
],
})
export class AppModule {}
⭐ 요약!
→ NestJS 에서 인터셉터(Interceptors) 는 요청과 응답 을 가로채어 추가 처리를 가능하게 한다.
→ 인터셉터(Interceptors) 는 요청 및 응답 조작 , 로깅, 캐싱, 예외처리 등 다양한 용도로 사용할 수 있고 적용 범위를 지정할 수 있다.
→ 사용법 : NestInterceptor 를 구현하여 정의하고, @UseInterceptors 데코레이터로 적용하거나 글로벌로 설정한다.