Nest.js 탐험기 7 - microservice (grpc) 를 사용해보자 - 인터셉터
2022. 3. 6. 23:58ㆍ개발/Node & Javascript
728x90
반응형
개요
- 공통된 로직을 처리해야 할 경우 interceptor를 활용할 수 있다.
- nest.js grpc의 경우에도 interceptor를 활용할 수 있게 제공이 되는데, 이를 활용해 보도록 하자.
예제
1. Interceptor 생성
아래와 같이 interceptor에 대한 code를 작성해준다.
@Injectable()
export class GrpcLoggingInterceptor implements NestInterceptor {
private readonly logger = new Logger(GrpcLoggingInterceptor.name);
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
this.logger.log('Before...');
const rpcContext = context.switchToRpc(); // context를 rpc로 변경한다.
const metadata: Metadata = rpcContext.getContext(); // context data를 가져온다. rpc의 경우 metadata를 반환한다.
const data = rpcContext.getData(); // data object를 반환한다.
this.logger.log(`${JSON.stringify(metadata.toJSON())}`);
this.logger.log(`${metadata.get('a')[0]}`); // metadata의 value는 array로 가져오게 된다.
this.logger.log(`${JSON.stringify(data)}`);
const now = Date.now();
return next
.handle()
.pipe(
tap(() => this.logger.log(`After... ${Date.now() - now}ms`)),
);
}
}
2. Interceptor 등록
interceptor의 경우 controller 레벨에서도 등록가능하고, application level 단위로 등록이 가능하다.
이번 예제에서는 controller에 등록을 해두도록 하자.
@UseInterceptors(GrpcLoggingInterceptor)
@Controller()
export class HeroesController {
@GrpcMethod('HeroesService', 'FindOne')
findOne(data: HeroById, metadata?: Metadata, call?: ServerUnaryCall<any,any>): Hero {
//...
}
// ...
//
3. 결과 확인
- 아래와 같이 로깅 데이터를 확인할 수 있다.
- 주의점은 metadata의 경우 array로 오는 것을 주의만 하면 된다.
[Nest] 19964 - 03/06/2022, 11:56:44 PM LOG [GrpcLoggingInterceptor] Before...
[Nest] 19964 - 03/06/2022, 11:56:44 PM LOG [GrpcLoggingInterceptor] {"a":["b"],"malgogi":["3"],"user-agent":["grpc-node/1.24.7 grpc-c/8.0.0 (osx; chttp2; ganges)"]}
[Nest] 19964 - 03/06/2022, 11:56:44 PM LOG [GrpcLoggingInterceptor] b
[Nest] 19964 - 03/06/2022, 11:56:44 PM LOG [GrpcLoggingInterceptor] {"id":1}
출처
728x90
반응형
'개발 > Node & Javascript' 카테고리의 다른 글
Sharp.js로 blurhash 이미지 합성하기 (1) | 2022.03.31 |
---|---|
Node.js - trampoline이란? ( tail call, recursion ) (2) | 2022.03.13 |
react-cropper 이미지 퀄리티 낮아지는 현상 (2) | 2022.03.04 |
Node.js - 필요없는 code 정리하는 법 (1) | 2022.03.02 |
Nest.js 탐험기 7 - microservice (grpc) 를 사용해보자 - 에러처리 (6) | 2022.02.27 |