Nest.js(15)
-
[Nest.js] class validator 관련 tip
개요 class validator관련 tip들을 정리해보려고 한다. 기본 type checking에 대해서는 잘 활용할꺼라서 여러가지 변형에 대한 케이스들을 적어보려고 한다. 이외에도 class validator에서는 다양한 기능들을 제공하므로 문서를 참조해보자 1. ValidateIf 특수한 decorator라 별도로 추가했다. 해당 validation을 진행할지 여부를 별도로 조건을 설정 가능하다. 예를 들어서 아래와 같이 public한 feed에 대해서 반드시 tag입력이 필요할 경우 아래와 같이 설정할 수 있다. export class FeedRequest { @IsOptional() @IsBoolean() isPublic?: boolean; @ValidateIf((r) => r.isPublic ..
2023.02.14 -
[Nest.js] graceful shutdown을 구현하자.
개요 nest.js에서는 여러 lifecycle-events를 제공한다. 이중에서 shutdown events를 활용해서 graceful shutdown을 구현해보자. 어떨 때 사용할까? 일반적으로 graceful shutdown을 구현할 때 사용한다. consumer는 consume을 중단하고, 현재 남아있는 작업을 처리할 동안 대기한다. log의 경우 buffer에 남아있는 log를 처리하고 종료를 진행한다. 예제 아래의 예제는 log를 buffer에만 쌓아두다가 종료시 한 번에 처리하는 형태로 예제를 구성해보았다. 1. logger 생성 interface BufferLogFormat { level: string; message: string; } // 극단적인 상황을 가정하기 위해서, buffer에..
2022.06.12 -
Nest.js 탐험기 7 - microservice (grpc) 를 사용해보자 - 인터셉터
개요 공통된 로직을 처리해야 할 경우 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 { this.logger.log(..
2022.03.06 -
Nest.js 탐험기 7 - microservice (grpc) 를 사용해보자 - 에러처리
개요 nest.js에서의 grpc의 에러 처리에 대해서 간략하게 알아보도록 하자. grpc status code http status code와 같이 grpc도 상태코드가 존재한다. 자세한 내용은 error code항목을 참조하면 좋다. RpcException nest.js에서는 RpcException을 통해서 쉽게 에러를 보내줄 수 있다. // internal server error throw new RpcException({ code: 13, message: 'malgogi internal server error' }) 결론 http의 status code와 유사하기 때문에 크게 기술할 내용은 없을 것 같다. 문서를 보고 적절한 코드와 메세지로 처리해주면 될 것 같다.
2022.02.27 -
Nest.js 탐험기 6 - microservice (grpc) 를 사용해보자 - Metadata 설정
개요 이전 챕터까지는 통신방식의 구현까지 다루었다. 이제부터는 부가 기능에 대해서 하나씩 다루어 보려고 한다. 우선 이번에는 Metadata를 다루어 보자. Metadata HTTP Header와 같이 GRPC에서는 metadata를 설정할 수 있다. (metadata) 실제적으로 Headers frame을 통해서 통신한다. 예제 예제 1. 서버에서 클라이언트 헤더 값을 받을 때 // HeroesController에 아래와 같이 값을 가져올 수 있다. @GrpcMethod('HeroesService', 'FindOne') findOne(data: HeroById, metadata?: Metadata, call?: ServerUnaryCall): Hero { // console..
2022.02.13 -
Nest.js 탐험기 5 - microservice (grpc) 를 사용해보자 - 통신방식 구현
개요 GRPC의 통신방식은 크게 4가지 방식이 존재한다. (unary, server streaming, client streaming, bidirectional-streaming) 이를 nest.js에서 구현해보도록 하자. 기본적으로 GRPC에 관한 내용은 GRPC 정의 및 통신 방식, 기본 구현은 GRPC 기본 구현을 살펴보고 오면 좋다. 통신방식 1. unary 해당 부분은 GRPC 기본 구현에 구현이 되어 있으므로 해당 내용을 참조하도록 하자. 2. server streaming 해당 방식은 단일 client 요청에 여러 server response를 보낼 때 사용한다. 이전에 구현했던 hero.proto 파일에 추가해보자. cf) repeated는 단일 message안에서 여러개의 item을 보내..
2022.01.23