개발/Node & Javascript(34)
-
Nest.js 탐험기 - logging을 winston과 함께 사용해보자.
개요 이번 시간에는 logging을 적용해보려고 한다. winston을 사용해보려고 한다. Setup 우선 logging을 적용하기 위해 다음과 같이 설치해준다. yarn add winston winston-daily-rotate-file; winston Node 진영의 대표적인 로깅 라이브러리이다. 다양한 transport layer를 사용할 수 있고, 또한 custom하게 implementation이 가능하다. winston-daily-rotate-file의 경우에는 logrotate를 설정하기 위해서 사용했다. 코드를 작성해보자! 1. configuration 등록 우선적으로 winston을 먼저 셋팅해두자. import * as winston from 'winston'; import..
2021.02.12 -
Javascript arrow function vs function
개요 method decorator를 작성하면서 arrow function에 대해서 파악할 일이 생겼다. 해당 부분을 찾아보면서 정리해보자. 몇가지 사전지식을 위해서 앞에 this, bind(), call(), apply()에 대해서 따로 설명하고 있다. this란? 해당 부분은 execution context를 이해해야 하는데, 그 부분은 해당 Blog 글에 설명된 내용을 참고하면 좋을 것 같다. bind(), call(), apply() javascript에서 몇 가지 글들을 찾아보면 bind(), call(), apply()를 많이 찾아보게 될 것이다. 해당 부분을 설명하는 이유는 arrow function의 몇 가지 특성과 연관이 되기 때문에 따로 설명한다. bind() bind의 경우에는 thi..
2021.01.27 -
Javascript - Array-like objects란?
개요 실제 자바 스크립트에서의 array와 array-like object의 차이점을 알고 이를 해결할 수 있는 방법에 대해서 알아본다. array-like object란? 실제로는 object인데, console.log()를 찍을 때, array로 보이게 하는 것 instanceOf Array나, Array.isArray()를 통해서 판별 가능. length의 속성을 가지면 array처럼 보이는 것을 차용함. 결국 배열도 객체이기 때문에 해당 방식을 사용가능 왜 알아야 하는가? array처럼 보여서 작각하는데, 실제로 forEach 같은 iterator를 사용하지 못함. ( 상위 브라우저는 괜찮으나 하위 브라우저에서 문제 생길 수 있음) 선언 방식 var a = { 0: 'zzz', 1:..
2021.01.22 -
Nest.js 탐험기3 (부록) - cache를 커스텀 해보자
1. 개요 Nest.js에서는 유용한 cache module을 제공하고 있다. 하지만 몇 가지 기능상에 제약이 있다. 예를 들어 실제 운영상에서 쓰인다면 다음과 같은 불편함들이 있다. cache manager를 inject해서 사용하는 경우, get, set 등의 기본적인 기능만 사용 가능하다. (물론 store에 접근하면 mGet이나 mSet을 사용할 수 있지만 불편하다..) 미세 옵션 등등을 조정하고 싶지만 할수가 없다. (retry라던가, showFriendlyErrorStack 등등의 ioredis option들을 자세히 확인할 수 없다.) 그래서 추가적으로 해당 부분들을 사용할 수 있게 바꾸어 보려고 한다. 2. 사용할 수 있는 옵션들 우리가 사용할 수 있는 옵션들은 크게 다음과 같을 것이다. ..
2021.01.22 -
Nest.js 탐험기3 - cache를 써보자
1. 개요 우리가 개발을 할 때, 가장 친숙하게 쓰이는 것이 cache module이 아닐까 생각해본다. 이 때, Cache module을 어떻게 nest.js에서 사용할 수 있을지 체크해보자 본 문서는 redis 기준으로 작성하였고, 따로 호환성을 고려하지 않고 작성해서 latest version으로 작성했다고 보면 된다. 2. 실습 환경 2.1. Redis를 docker container 셋팅 이미 docker 환경이 setup되어 있다면 아래와 같은 명령어를 통해 docker container를 띄우자. # run docker run --name redis-test -p 6379:6379 -d redis:alpine # 나중에 container 죽일 때 쓰면 된다. # kill container d..
2021.01.20 -
Nest.js 탐험 2 - Filter를 등록해보자.
개요 Nest.js에 대한 글을 한동안 올리지 못했는데, 이번에는 Filter에 대해서 다뤄보도록 한다. Filter란? 목적 Exception을 handling할 때 주로 사용한다. Handler 별로 또는 global로 셋팅이 가능하다. 예제 1. Error 정의 다음과 같이 에러를 개략적으로 정의해본다. // malgogiException.ts export class MalgogiException extends Error { status: number; constructor(status: number, message?: string) { super(message); this.status = status; } } 2. Filter 정의 주어진 Exception을 handling할 Filter를 정의한..
2021.01.16