목차
1. 인터셉터란?
2. 어떤 용도로 쓰일까?
3. 사용하는 방법
1. 인터셉터란?
- 요청과 응답 사이에 추가적인 로직을 삽입할 수 있는 기능으로 컨트롤러의 메서드가 호출되기 전 후 작업을 수행
2. 어떤 용도로 쓰일까?
요청 전 처리 | 컨트롤러 메서드가 호출되기 전에 특정 작업을 할 수 있다. | 요청에 필요한 데이터 추가, 요청의 데이터 검증 등 |
응답 후 처리 | 컨트롤러 메서드가 실행된 후 응답을 수정하거나 처리할 수 있다. | 응답 헤더 추가, 암호화 등 |
로깅 | 요청 및 응답 정보를 기록할 수 있다. | * |
캐싱 | 응답 데이터를 캐싱하여 성능을 향상 시킬 수 있다. | * |
3. 사용하는 방법
nestJS에서 인터셉터를 사용하기 위해서는 NestInterceptor라는 인터페이스를 사용하여야 한다.
import { CallHandler, ExecutionContext, NestInterceptor } from "@nestjs/common";
import { Observable } from 'rxjs';
class 클래스명 implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>> {
// 요청 전 후 필요한 내용 작성
// 다음 핸들러로 제어를 넘김(컨트롤러 실행)
return next.handle();
}
}
이 때 핸들러를 통해 rxjs의 여러 메서드를 통해 Observable 작업을 할 수 있는데 주로 사용되는 메서드가 있다.
1) tap
▶ 데이터를 변경하지 않는 부가적인 작업을 처리할 때 사용하는 메서드
ex) 로그
return next.handle().pipe(tap(()=>{
console.log('tap의 사용');
}));
2) map
▶ 요청에 대한 응답 데이터를 변환할 때 사용하는 메서드
return next.handle.pipe(map((data)=>({msg:"map 호출"})))