728x90

Node.js/NestJS 7

NestJS 커스텀 데코레이터 사용법

네스트에서의 데코레이터네스트에서는 데코레이터라는 기능을 사용할 수 있다.데코레이터는 다른 언어들에서는 흔하게 사용되는 개념이지만, 자바스크립트 진영에서는 아직은 낯선 편이다.데코레이터의 정의를 간단히 살펴보면 아래와 같다.ES2016에서 데코레이터란 함수를 반환하고, 인자로 대상(target), 이름, 프로퍼티 설명자(property descriptor)를 받을 수 있다. @를 앞에 붙여, 데코레이트하고 싶은 것 위에 위치시킨다. 데코레이터는 클래스, 메서드, 또는 프로퍼티로 정의될 수 있다. 네스트 Param 데코레이터네스트는 http 라우터 핸들러와 사용할 수 있는 파라미터 데코레이터(param decorators)를 제공한다.아래는 네스트에서 제공하는 데코레이터와 그들이 의미하는 Express(혹은..

Node.js/NestJS 2025.02.02

NestJS 커스텀 프로바이더 사용법

커스텀 프로바이더가 필요한 이유종종 Nest에서 제공하는 클래스 프로바이더 형태가 아니라,그 외의 형태로 프로바이더를 사용하고 싶을 때가 있다.네스트는 커스텀 프로바이더라는 기능으로 프로바이더에 다양한 자율성을 주고 있다. 네스트의 일반적인 프로바이더커스텀 프로바이더에 대해 알아보기 전에,먼저 일반적인 형태의 프로바이더를 살펴보자.@Module({ controllers: [CatsController], providers: [CatsService],}) @Module() 데코레이터에서providers는 provider로 구성된 배열을 받는다.우리는 보통 클래스의 이름을 배열에 넣는다.그러나 사실 클래스 이름을 넣는 것은, 간단히 표현한 형태이고, 정석대로 표현하면 아래와 같다.providers: [ ..

Node.js/NestJS 2025.01.05

NestJS API 응답에서 불필요한 프로퍼티를 제외하는 방법

0. 응답에서 일부 프로퍼티를 제외해야 하는 이유서버에서 클라이언트로 응답을 보낼 때,불필요한 프로퍼티를 제외하고 보내거나,민감한 정보를 반드시 제외하고 보내야 하는 상황들이 발생한다. 예를 들어, 유저 정보를 응답할 때비밀번호는 반드시 제외되어야 하는 경우 등이다. 혹은 클라이언트에서는 유저의 닉네임만 필요한데,유저 객체의 프로퍼티가 15개나 된다면나머지를 모두 제외하고 보내고 싶은 상황 등이 있다.1. @Exclude(), @Expose() 데코레이터class-transformer 패키지에서 제공하는@Exclude(), @Expose() 데코레이터를 응답 Dto에서 사용하면응답으로 내보낼 혹은 제외할 프로퍼티를 편리하게 지정할 수 있다. 응답이 직렬화될 때 dto에서 설정한 Exclude, Expos..

Node.js/NestJS 2024.08.03

NestJS 전역 CacheManager로 Redis 사용하기

1. CacheManager 사용 이유NestJS에서 캐싱을 위해 redis를 사용할 때직접 RedisModule과 RedisService를 정의하여 사용할 수도 있지만,@nestjs/cache-manager 와 cache-manager 라이브러리를 사용하면 훨씬 간단하다. service를 정의해서 사용할 때는redis 서버에 command를 보내는 메서드를 모두 직접 구현해 사용해야 한다. 라이브러리를 사용하면get, set, reset, del 등 흔히 사용하는 커맨드들이 제공되어바로 사용할 수 있다. 2. CacheManager 사용 방법캐시 매니저 라이브러리 사용에 대해서는NestJS 공식문서에서도 안내하고 있다. [공식 문서]$ npm install @nestjs/cache-manager cac..

Node.js/NestJS 2024.07.06

[TIL][NestJS] @Param() 데코레이터 사용 시 주의사항 (+Typeorm)

오늘의 삽질... controller에서 아래와 같이 단순한 get요청 처리 함수를 만들고 @Get('brands/:id') getModelsByBrand(@Param() id: number) { return this.carsService.getModelsByBrand(id); } service에서 아래와 같은 단순한 데이터 조회 쿼리문을 작성하는데, async getModelsByBrand(id: number) { const selectedBrand = await this.brandRepository.findOne({ where: { id: id }, relations: ['carModels'], }); return selectedBrand.carModels; } } 아무리 다양한 어떤 방법을 써도 T..

Node.js/NestJS 2023.05.19

[NestJS] 각종 트러블 슈팅

사수님이 코드 리뷰 해주시면서 배운 너무나 많은 정보들. 알찬 것들이 많은데 까먹을 것 같아서 적어두기. 1. Circular Depencies : Module끼리 서로 import할 경우 뭘 우선할 지 알 수 없어 일어나는 오류 forwardRef()=> 를 걸어주자 2. Module import, exoprt Service : 일반적으로 다른 모듈의 service를 사용하고 싶을 때에는 그 모듈에서 export:[Service]를 해주고, 사용하고자 하는 모듈에서 import: [쓰고 싶은 서비스가 있는 Module]을 해줘야 한다. provider에 남의 모듈의 Service를 그대로 넣어버리면 그 service의 clone을 만드는 격으로 둘은 엄격히 보았을 때 다른 두 객체가 된다. 3. Ser..

Node.js/NestJS 2023.05.18

[NestJS, TypeORM] 배열, 객체 데이터를 database에 저장하는 법

* 개발 환경: Typescript, NestJS, Typeorm, MySql NestJS 프레임워크로 Typeorm을 통해 MySql database를 사용하려고 하던 중, entity.ts 파일에서 아래와 같은 에러가 발생했다. 'data type array is not supported by mysql database' //error가 났던 movie.entity.ts 파일 import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Movie { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() year: number; ..

Node.js/NestJS 2023.05.11
728x90