Framework/NestJS
-
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 라이브러리..
-
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살에게 의존성을 설명하는 내용이 있어서 가져와봤습니다.링크 아이가 냉장고에서 스스로 물건을 꺼낼 때 문제가 발생할 수 있습니다. 문을 열어두거나 엄마나 아빠가 원하지 않는 것을 얻게 될 수도 있습니다. 냉장고에 있지 않거나 유통기한이 지난 것을 찾고 ..
-
NestJS, TypeORM - Entity 상속(inheritance)Framework/NestJS 2021. 11. 22. 14:19
NestJS, TypeORM - Entity inheritance 프로젝트를 진행하면서 entity 를 개발하던 도중 entity 별로 중복되는 컬럼들(idx, createdAt, updatedAt, status...)이 있었다. 이를 해결할 방법을 찾아보니 Entity inheritance(Entity 상속) 이라는 것이 있었다. 해결 방법 1 - Concrete Table Inheritance 공통 되는 필드를 추상 클래스를 두고 상속을 통해 사용하는 방식이다. common.entity.ts 파일을 만든 후, 다른 Entity 들을 개발할 때는 상속해서 사용할려고 한다. common.entity.ts import { Column, CreateDateColumn, PrimaryGeneratedColum..
-
NestJS Circular Dependency(순환 종속성) 문제Framework/NestJS 2021. 11. 22. 13:17
Nest.JS Circular Dependency(순환 종속성) 문제 NestJS 를 통해 프로젝트 구현중에 아래 사진과 같은 문제가 발생했다. Circular Dependency(순환 종속성) 공식문서 를 확인해보면 순환 종속성은 클래스 A 에 클래스 B 가 필요하고, 클래스 B 에 클래스 A 가 필요할 때 발생한다고 합니다. 가능한 최대한 순환종속성은 피해야 하지만 항상 그렇게 개발할 수는 없기에 NestJS 에서는 해결 방안을 제공해줍니다. 해결방법: 전달 참조(Forward Reference) @nestjs/common 에서 패키지로 제공해주는 forwardRef() 기능을 사용하면 해결할 수 있습니다. 클래스에 중첩을 허용할 수 있도록 하는 유틸리티 기능입니다. xxx.module.ts 에서 모..