Framework
-
[Yarn] Node Version 강제하기Framework/NodeJS 2024. 2. 15. 10:59
회사에서 개발자 간 사용하고 있는 Node 버전이 모두 다르던 때가 있습니다. 따라서 운영되는 서버의 Node 버전을 확인하고, 문서화하여 협업하는 개발자 간에 Node 버전을 일치 시키도록 했습니다.하지만 모든 개발자가 프로젝트 별로 적절한 Node 버전을 사용하고 있다는 것을 신뢰할 수 없고, 다양한 프로젝트 별로 Node 버전을 다를 수 있습니다. 만약 여러 프로젝트를 관리한다면 매번 새로운 Node 버전을 설치해주거나 Node Version Manager Tool(Nvm, Fnm 등) 를 통해 변경해줘야 합니다. 이러한 과정을 매번 반복한다면 Node 버전을 바꾸는 것을 깜빡하고 개발을 하였다가 실환경에 배포된 후에 버전이 일치하지 않아 문제가 발생할 수도 있습니다. 위와 같은 문제들은 packa..
-
NodeJS, NestJS - Cpu Intensive 한 작업 처리하기Framework/NestJS 2022. 9. 20. 00:42
NodeJS, NestJS - Cpu Intensive 한 작업 처리하기 NodeJS 는 싱글 스레드지만 비동기 + Non-Blocking 의 특징을 가지고 있기 때문에 I/O 작업이 빈번한 경우에는 좋지만 싱글스레드이기 때문에 CPU Intensive 한 작업을 처리하기에는 좋지 않다는 특징을 가지고 있습니다. 만약 Node 기반의 서버가 CPU Intensive 한 작업을 할 경우 어떻게 될까요? import { Controller, Get } from '@nestjs/common'; @Controller('cpu-intensive') export class CpuIntensiveController { private calCount(num = 2_000_000_000_000) { let count =..
-
NestJS - Custom ExceptionFramework/NestJS 2022. 9. 18. 01:59
NestJS Custom Exception 기본적으로 예외를 처리하는 방법은 아래 코드의 방법과 같습니다. 표준 예외와 메시지를 통해 충분히 어떤 예외를 발생하는지 추측하고 확인할 수 있습니다. if (!product) { throw new NotFoundException('제품을 찾을 수 없습니다'); } 1. 가독성 하지만 아래처럼 Custom Exception 을 사용한다면 로직상 가독성을 높일 수 있습니다.. Custom Exception 은 클래스의 네이밍을 통해 일차적으로 어떤 예외가 발생했는지 유추가 가능합니다. // exception/product-not-founct-exception.ts import {NotFoundException} from "@nestjs/common"; export..
-
NestJS - Interface Dependency Injection(DI)Framework/NestJS 2022. 8. 25. 00:52
NestJS 는 Spring 처럼 기본적으로 생성자 기반의 DI(Dependency Injection) 을 지원합니다. DI 는 Ioc 컨테이너에 객체의 인스턴스화를 위임하는 역전의 제어(Inversion of Control) 기술입니다. 그리고 의존성 주입(DI) 은 객체지향의 5 대 원칙 중 DIP(의존 관계 역전 원칙) 를 따르는 방법 중에 하나입니다. 또한 중요한 또 다른 원칙이 있는데 바로 OCP(개방폐쇄원칙) 입니다. DIP: "추상화에 의존해야지 구체화에 의존하면 안된다" OCP: "확장에는 열려있으나 변경에는 닫혀있어야 한다" 그렇다면 어떻게 설계해야 이 원칙을 잘 지킬 수 있을까요? 아래의 예제를 통해 알아봅시다. 아래 예제는 기본적으로 NestJS 에서 DI 를 사용하는 방법입니다. M..
-
NestJS - Query String 배열(Array)로 처리하기Framework/NestJS 2022. 2. 14. 23:29
NestJS : Query String 배열로 처리하기 endPoint /test?queryData=asdasd&queryData=bbbbefe ... controller @Get('/test') queryStringArrayTest(@Query('queryData') queryData: string[]) { return queryData; } 우선 위 처럼 할 경우 query String 을 배열로 처리할 수 있습니다. Result [ "asdasd", "bbbbefe" ] endPoint 의 Query String 를 위와 같이 처리한다면 queryData 가 반복돼서 사용되고, 길어질 수록 보기 좋지 않을 수 있습니다. 하지만 class-validator, class-transformer 라이브러리..
-
NodeJS - Event LoopFramework/NodeJS 2021. 12. 10. 00:46
NodeJS 란?공식 사이트에서 확인해보면 "Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다" 라고 되어있습니다.NodeJS 의 대표적인 특징은 비동기, 이벤트 기반, 싱글스레드, Non Blocking, 확장성 등이 있습니다.우선 Javascript 의 동작원리를 먼저 알아야 합니다.Javascript 동작원리Javascript 는 싱글스레드 기반 콜백 큐를 사용합니다.위의 그림처럼 Javascript 는 메모리 힙과 콜 스택으로 구성되어 있습니다.메모리 힙은 메모리 할당이 일어나는 곳이고 콜 스택은 코드가 실행됨에 따라 호출 스택이 쌓이는 곳입니다.Javascript 는 싱글 스레드기반이기 때문에 하나의 메인 스레드와 하나의 콜 스택을 가지고 있습..
-
NestJS - numeric query parameterFramework/NestJS 2021. 11. 30. 21:52
개발을 하던 도중, query parameter 에 대한 validation 처리를 하려고 dto 파일을 만들고 있었는데 아래와 같은 오류가 발생했습니다. // xxx.dto.ts import { IsNumber } from 'class-validator'; export class PaginationDto { @IsNumber() private readonly pageNo: number; @IsNumber() private readonly pageSize: number; getSkip(): number { return (this.pageNo - 1) * this.pageSize; } getTake(): number { return this.pageSize; } } 분명히 query parameter 에 ..
-
NestJS - 의존성 주입Framework/NestJS 2021. 11. 28. 15:37
NestJS - 의존성 주입이란 NestJS 의 핵심 중 하나는 바로 의존성 주입(Defendency Injection) 입니다. 의존성 주입(Defendency Injection) 의존성 주입은 제어의 역전(Inversion of Control) 의 기술중 하나입니다. 제어의 역전: 개발자가 제어해야할 영역을 프레임워크에게 믿고 맏기는 것. 의존성 주입: 개발자가 필요한 자원(클래스, 함수..)들을 외부에서 생성자를 통해 넣어준다. 위키피디아에 실려있는 5살에게 의존성을 설명하는 내용이 있어서 가져와봤습니다.링크 아이가 냉장고에서 스스로 물건을 꺼낼 때 문제가 발생할 수 있습니다. 문을 열어두거나 엄마나 아빠가 원하지 않는 것을 얻게 될 수도 있습니다. 냉장고에 있지 않거나 유통기한이 지난 것을 찾고 ..