AOP(Aspect-Oriented Programming)는 코드에서 여러 부분에 걸쳐서 반복되는 공통 관심사를 분리하고 중앙에서 관리할 수 있게 하는 프로그래밍 기법이다.
이를 통해 코드의 모듈성을 향상시키고 중복을 줄일 수 있다.
ex) 인터셉터 코드 예시
import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; @Injectable() export class LoggingInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const now = Date.now(); return next .handle() .pipe(tap(() => console.log(`완료에 걸린 시간: ${Date.now() - now}ms`))); } }
인터셉터를 만들기 위해서는 NestInterceptor 인터페이스를 구현하는 것이 필수이다.
intercept라는 메소드를 통해 요청을 가로챈 후 next.handle()을 호출한다는 것은 요청을 처리하고 응답을 반환하는 컨트롤러 메소드로 이동을 한다는 뜻이다.
즉, 요청이 처리된 이후임을 뜻함.
그래서 pipe()라는 함수로 요청 처리 파이프라인의 다음단계로 이동을 한 후 tap()이라는 연산자 내에서 응답이 처리된 시간을 로그로 찍는 것.