개발/Node & Javascript(34)
-
Nest.js - moduleRef를 활용 해보자
개요 component를 type에 따라서 다르게 처리해야 되는 경우가 생긴다. 이 때 사용하는 것이 moduleRef이다. 이는 spring의 beanFactory와 유사하며 특정 context에 대한 component를 load하는데 도움이 된다. component의 scope에 따라서 다르게 생성될 수 있다는 점에 유의하자. 예제 1 - 기본 예제 1. 시나리오 요즘 차에 관심이 많아서 한번 차랑 연관지어서 한 번 살펴보도록 하자. 기아 차를 생산하는 KiaSCarService와 현대 차를 생산하는 HyundaiCarService를 생성하자. 그리고 moduleRef를 활용해서 query에 맞게 차를 생성해주도록 하자. 2. 코드 코드는 아래와 같이 간단하다. /** * Entity */ expor..
2021.11.05 -
Nest.js - Typescript alias를 사용해보자
개요 Nest.js는 기본적으로 생성할 떄, 프로젝트 셋팅을 쉽게 해준다. 하지만 기능적인 확장을 거듭하다보면 프로젝트 자체를 분리하고 싶은 상황이 생길 수 있다. 이 떄 적용하는 옵션 중에 lerna나 또는 yarn workspace가 될 텐데, 한 번에 전환해도 좋겠지만 점진적으로 적용하고 싶을 때가 있다. 하지만 정리를 할 떄 가로막는 것은 폴더구조에 의해서 디펜던시가 강하게 엮여 있어서 분리가 어려운 상황이 있을 수 있다. 이 때 간접적으로 디펜던시를 분리할 수 있는 방법이 있는데, 이게 path alise를 쓸 수 있다. 테스트 디렉토리 구조 나는 다음과 같이 테스트 디렉토리를 구성을 했다. 나머지는 테스트하다 쓰던거니까 가볍게 무시하고, common이라는 directory가 눈에 들어올 것이다..
2021.10.17 -
Clinic.js를 사용해보자
개요 Clinic.js는 runtime을 분석하여 application의 문제점을 쉽게 찾아낼 수 있게 해주는 module이다. 1. 기존 debugging 1.1. --inspect 또는 --inspect-brk 옵션 사용 1. application 실행 아래의 명령을 통해서 application을 실행해준다. (source map file이 있는 경우 해당 option을 넣어주면 이슈 확인에 편리하다.) node --inspect-brk --enable-source-maps main.js 2. chrome://inspect에 접근해서 inspect를 클릭한다. 3. CPU 또는 memory profile을 이용한다. ( 자세한 사용법은 공식 문서가 더 잘나와 있으므로 참고하는걸 추천한다. ) 2. C..
2021.05.01 -
Lerna, Yarn workspace를 사용해보자.
개요 기존에 있었던 repo를 확장할 일이 생겼다. 이에 따라 자료 조사를 하던 중 Lerna를 알게 되었고, 이를 활용하여 구축 및 활용해보자. Lerna란? Lerna 공식 github를 보면 multiple project를 관리하기 위한 tool이라고 설명되어 있다. multiple packages를 하나의 repo에서 관리하기 위한 기능들을 제공한다. hoist를 통해서 공통으로 사용하는 패키지들을 한데 모아서 관리할 수 있게 도와준다. (이 부분은 추후에 설명하겠지만 yarn의 workspace를 활용하려고 한다.) Basic commands 1. bootstrap 현재 repo에 있는 모든 package들을 bootstraping한다. dependency와 link를 모두 install한다. ..
2021.04.11 -
RxJS - 공부 환경 셋업
개요 미뤄왔던 Reactive stream 관련을 공부해두려고 한다. 현재 node 기반으로 진행 중이니, RXJS를 통해서 한 번 익혀보도록 하자. 무작정 읽기만 하다간 진도가 안나갈 것 같아서 operator별로 살펴보고, 실습을 먼저 해보는 형태로 진행하려고 한다. 환경 우선 내가 설정한 개발 환경은 다음과 같다. Dependencies // package.json 일부 "dependencies": { "rxjs": "6.6.3" }, "devDependencies": { "@types/jest": "26.0.20", "@types/node": "14.14.31", "jest": "26.6.3", "ts-jest": "26.5.2", "ts-node": "9.1.1", "typescript": "4..
2021.03.01 -
Nest.js - query param validation이 잘 안될 때
개요 nest.js에서 query param을 class로 넘길 때, validation을 체크하면 잘 안 이루어진다. 해당 부분에 대해서 해결할 수 있는 방법을 알아보도록 하자. 예제 아래와 같은 API를 작성했다고 가정하자. class Test { @IsOptional() @IsNumber() a? : number; @IsNumber() b!: number; } @Controller('/todos') export class TodosController { @Get('/') test(@Query() custom: Test): string { return "hello world!"; } } 그리고 다음과 같이 curl을 보내보자 curl --location --request ..
2021.02.20