본문 바로가기
카테고리 없음

인터셉터

by 개발자doc 2024. 7. 12.
목차
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 호출"})))