개발/Node & Javascript(34)
-
[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 -
[RXJS] mergeMap, switchMap 차이
개요 흔히 rx.js를 사용할 때, Promise를 unwrap 할 때, mergeMap 또는 switchMap을 사용한다. 이 때 둘의 차이를 알아보자. mergeMap vs switchMap 우선 가이드 문서를 읽어보자. 우선 mergeMap의 설명은 아래와 같다. Projects each source value to an Observable which is merged in the output Observable.그리고 switchMap은 아래와 같다. Projects each source value to an Observable which is merged in the output Observable, emitting values only from the most recently projected..
2022.08.21 -
[Typescript] typescript 연습하기
개요 typescript를 쓰다보면 실제로 효율적으로 쓰고 있는지 의심이 들 때가 있다. 이를 연습해볼 수 있는 곳이 있는데, type-challenges라는 repo에서 실제로 연습을 해볼 수 있다. 예제 아래는 몇가지 예제를 link를 걸어두었다. Pick ReadOnly 위의 문제들을 풀다보면 typescript의 다른 방식에 대해 애를 먹을 수 있는데, 이 특징과 몇가지 typescript의 문법들을 보면서 문제를 풀기전에 개념을 잡아보려고 한다. typescript 특징 type programming이다. 일단 기본적으로 typescript는 javascript의 runtime 동작을 모델링 하는 언어입니다. 따라서 실제 runtime에서는 type들이 제거되고 javascript로 실행된다. ..
2022.07.17 -
[RXJS] Hot Observable vs Cold Observable
개요 Hot 생성자의 경우에는 하나의 생성자에서 여러개의 구독자가 붙을 수 있다. ( anycast ) Cold의 경우 생성자는 구독할 때마다 각각의 타임라인에서 생성된다. ( unicast ) Hot의 경우 구독을 하더라도, 처리가 이루어지지 않을 수 있다. 기본적으로 Observable은 Cold이다. 따라서 Hot으로 변경하기 위해서는 Connectable Observable/Flowable로의 변환이 필요하다. (아니면 쉽게 subject를 통해 구현이 가능하다.) Cold Observable vs Hot Observable 비교 Hot Cold 데이터 배출 구독하지 않아도 계속 배출 구독하지 않으면 배출하지 않음 example 마우스 이벤트, 키보드 이벤트, 시스템 이벤트 웹 요청, 데이터 베이..
2022.07.10 -
[RXJS] from vs of 차이
개요 from 과 of의 차이를 알아보자. from 먼저 공식 문서를 보면 다음과 같다. Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object. array 또는 array-like object를 observable로 전환해준다. from([1,2,3]) .forEach(item => console.log(`case 1: ${item}`)); // case 1: 1, case 1: 2, case 1: 3 Promise또는 observable like object를 변환해준다. function promisify(item: T): Promise { re..
2022.06.27 -
[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