05. Interceptor & AOP 패턴

유현준·2022년 8월 16일
0

hello! Nest

목록 보기
5/17

1. nest의 요청 처리 기본 로직과 AOP 패턴

0. 요청

1. middleware (미들웨어) 

2. guards (가드)

    - 주로 permission (인증) 처리를 할 때 사용합니다.

3. pre-interceptors (인터셉터) 

    - 주로 post-interceptor를 위한 변수 선언, 함수 실행을 합니다. (선택)

4. Pipes (파이프)

    - 변환(요청 바디를 원하는 형식으로 변환), 유효성 검사를 합니다.

5. Controller (컨트롤러)

    - 라우터 역할을 수행합니다. (서비스 로직의 결과를 응답합니다.)

6. Service (서비스 ; 컨트롤러 안에 정의되어 있다면)

    - 해당 요청에 대한 핵심 로직이 수행됩니다.

7. post-interceptor (인터셉터) 

    - 주로 pre-interceptor 로직을 가지고 응답한 데이터를 가공하거나 전체 로직의 속도를 측정합니다. 최종적으로 성공적인 응답 데이터를 보냅니다.

8. exception filters (필터)

    - 예외 처리를 담당합니다. 에러 메세지를 원하는 형태로 가공해서 응답합니다.

9. 응답

2. AOP 패턴(관점지향 프로그래밍)

  • 관점지향 프로그래밍으로 횡단 관심사의 분리를 통해 코드의 모듈성을 증가시킴으로써, 코드의 역할/책임의 분리, 가독성과 그에 따른 생산성 향상을 지향하는 프로그래밍 패러다임이다.
  • nest의 요청 처리 로직 상에서 Interceptor 는 이런 AOP 패턴의 가치에 따른 개념이다.

3. Interceptor

  • 미들웨어와 기능적으로 매우 유사하다고 느낄 수 있다. 다만, nest에서 Interceptor와 middleware의 큰 차이는 로직 처리 순서의 차이라고 볼 수 있다.
  • Interceptor는 예컨대, 컨트롤러가 시작하기 전/후로 상황을 구분하여 다수의 컨트롤러에서 공통적으로 발생하는 로직, 처리를 전담할 수 있다.(컨트롤러 외에 전역/라우터 단에서도 Interceptor는 사용 가능하다)
    ex. 컨트롤러 시작 후, 데이터 가공의 일관성을 위해, interceptor를 활용할 수도 있다.
    ex. 로깅 기능의 경우 Interceptor로 많이 구현한다.
  • interceptor는 관점 지향 패러다임의 관점에 착안하여, 다수의 기능에서 재사용성이 가능한 기능을 하나의 모듈로 묶는 데 사용되는 개념이라고 할 수 있다.

참고자료

profile
차가운에스프레소의 개발블로그입니다. (22.03. ~ 22.12.)

0개의 댓글