[nestJS] AOP란

Uhan33·2024년 3월 12일
0

TIL

목록 보기
45/72

AOP

AOP(Aspect-Oriented Programming)는 코드에서 여러 부분에 걸쳐서 반복되는 공통 관심사를 분리하고 중앙에서 관리할 수 있게 하는 프로그래밍 기법이다.
이를 통해 코드의 모듈성을 향상시키고 중복을 줄일 수 있다.

  • 프록시 객체
    - 프록시 객체는 JavaScript 내장 객체이다.
    - 다른 객체의 기본 동작을 사용자 정의 동작으로 수정할 수 있게 해준다
    - 로깅이나 인증 및 에러 처리 등을 구현할 수 있다

  • 헬퍼 객체
    • 헬퍼 객체는 특정 작업을 수행하는 메서드만 입맞에 맞게 정의를 하고 이를 통해 코드의 재사용성을 높일 수 있다.
      → 즉, 공통 기능을 모듈화하고 이를 여러 부분에서 호출할 수 있음.

인터셉터

  • 인터셉터는 문자 그대로 가로채다라는 의미를 갖고 있다
  • 즉, 특정 작업을 수행하기 전이나 후에 추가 로직을 실행할 수 있는 코드 블록이다.
    • 특히, HTTP 요청과 응답을 처리할 때 특히 유용
    • 주로 로깅, 에러 처리, 데이터 변환 및 인증과 같은 공통 관심사를 처리하는 데 사용됨.
  • AOP 개념을 구현하는 핵심 요소라고 생각하자

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()이라는 연산자 내에서 응답이 처리된 시간을 로그로 찍는 것.

0개의 댓글