-
Nest.js Intercepters(AOP 패턴)FrameWork/Nest.js 2022. 7. 24. 14:02
Intercepters
intercepters는 AOP(Aspect Oriented Programming : 관점 지향 프로그래밍)기술에서 영감을 받은 기능세트이다. AOP는 횡단 관심사의 분리(cross-cutting concern)를 허용하므로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.핵심기능이 위 그림과 같이 4개가 있다고 가정하자, 기능 하나하나는 module안에 있는 controller이다. 쭉 code를 그렇게 짰다고 가정해도, 각각의 핵심기능을 가진 controller에서 재사용 되면서, 공통되는 기능역시 존재한다. 가장 적합한 예로 logging 기능이 있다.
controller가 각각의 핵심기능에 대해서 모듈별로 나눠져 있지만 그 각각의 모듈이 공통적으로 logging이라는 기능을 사용한다. 그렇게 때문에 logging을 middleware로 만들어서 사용했다. 실제로 middleware로 logging을 만들지 않고, Interceptors로 logging 기능을 만들 수 도 있다.
Interceptors는 logging 처럼 각각 존재하는 핵심기능에서 횡단을 하면서, 재사용성이 있는 기능들을 관점지향 방식으로써, 하나로 묶는 것을 의미한다.
그러니까 Interceptor를 통해서 controller가 시작하기 전과 controller가 끝났을 때를 나눠서 코딩을 할 수 있는 것이다.
Interceptors 적용
@ UseInterceptors 데코레이터를 이용해서 controller class에 Interceptors 의존성 주입을 하면, 해당 controller의 메서드가 실행되기 전과 후 한번씩 의존성 주입이된 Interceptor class가 실행된다.
이런 식으로 AOP 프로그래밍 시각으로 모듈화를 시킨 것이다. middlerware와는 실행순서가 다르다는 차이점이 있다.
After Interceptors
map() 매서드는 rxjs에서 속한 것인데, rxjs는 nest와는 별개의 라이브러리이다. 하지만 nest에서 map()메서드를 쓰는 형식이 정해져 있다. 때문에 map()안에 들어가는 인자는 Response에 대한 인자를 받는 것이다. controller가 먼저 실행되기 때문에 controller가 return한 값을 data라는 인자로 받는 것이다.
controller를 통해서 받는 Response에 담긴 값이 After Interceptor에 의해 가공된 것을 확인 할 수 있다.
Before Interceptor에 들어갈 만한 처리는 거의 middleware가 처리를 하기 때문에, Interceptor 같은 경우는 보통 After Interceptor를 많이 사용한다.
'FrameWork > Nest.js' 카테고리의 다른 글
Nest.js 커스텀 Middleware 만들기 (0) 2022.08.04 Multer와 미디어 파일 서비스(img,mp3,mp4) 1 (0) 2022.07.30 Nest.js Pipes(변환, 유효성 검사) (0) 2022.07.11 Nest.js Exception Filter (0) 2022.07.11 Nest.js Logger Middleware(provider,consumer) (0) 2022.07.10