NestJS
-
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, Prisma - CRUDORM/Prisma 2021. 12. 26. 22:44
Prisma, Mysql 시작하기 Prisma 란? 공식 홈페이지 에서 확인해보면 차세대 오픈 소스 ORM 으로 아래와 같은 구성으로 이뤄져있다고 합니다. Prisma Client : NodeJS 와 TypeScript 전용 Type Safe 및 자동 생성 쿼리빌더 Prisma Migrate : Migration system, 데이터 모델링 Prisma Studio : GUI 를 통해 DB 를 수정할 수 있는 기능 Prisma Client 는 모든 NodeJS 또는 Typescript 백엔드 어플리케이션에서 사용이 가능하다고 합니다. 그리고 PostgreSQL, MySQL, MariaDB, SQLite 등의 데이터베이스를 지원합니다. 왜 Prisma 를 사용할까? Prisma 의 주요 목적은 데이터베이스..
-
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 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 에서 모..
-
Express, NestJS - API 인식 문제Framework/NestJS 2021. 10. 22. 21:07
API 기능 개발 중 user/:id 라는 api 와 user/search api 가 있는데 search 부분을 user/:id의 path variable 로 인식하여 user/search api 가 호출이 안되는 문제가 발생했었습니다. 이유는 코드 상에서 user/search 부분이 user/:id 보다 밑에 있기에 발생한 문제였습니다. 1. 문제발생 코드 // Err @Get(":id") getUserId(@Param('id') userId: string): string { ~~~ } @Get("search") search(){ ~~~ } 2. 문제해결 코드 // OK @Get("search") search(){ ~~~ } @Get(":id") getUserId(@Param('id') userId: ..