개요 쇼핑몰 API 토이 프로젝트를 진행하고 있는데 상품의 이미지 관련 서비스가 필요 했습니다. 이미지를 저장할 서버가 없기에 ImgBB에서 제공하는 API를 통해 이미지를 ImgBB에 업로드하고, 해당 이미지의 정보만 데이터베이스에 저장하려고 합니다. 우선 Multer를 사용하기 위해 프로젝트에 패키지를 설치합니다. $ npm i -D @types/multer 단일 파일 핸들 @UseInterceptors(FileInterceptor('image')) async uploadProduct( @UploadedFile() image: Express.Multer.File, ) { // ... } 파일 핸들을 위해 NestJS에서는 인터셉터를 사용합니다. FileInterceptor의 첫번째 매개변수에 폼 데이..
개요 JWT 인증 에러시 메세지가 "Unauthorized"로 통일 되서 나오는게 싫었다. 스택오버플로우 참고, AuthGuard의 handleRequest 메서드를 사용하여 에러 메세지를 변경하였다. 아래 예제에는 토큰 만료 에러만 분기 처리를 했지만 그 외의 상황도 추가할 예정이다. import { Injectable, UnauthorizedException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { TokenExpiredError } from 'jsonwebtoken'; @Injectable() export class JwtAuthGuard extends AuthGuard('jwt') { handle..
인 메모리 캐싱은 주로 API 요청의 부하를 줄이기 위해 메모리에 데이터를 저장해놓는 것을 의미 합니다. 먼저 프로젝트에 의존성 패키지를 추가합니다. pnpm을 프로젝트 패키지 매니저로 사용하기 때문에 pnpm cli를 사용합니다. 이 게시글에서는 cache-manager-redis-store 2.0 버전을 사용합니다. $ pnpm install cache-manager cache-manager-redis-store@^2.0 도커 컨테이너에 Redis와 Redis Commander를 설치합니다. Redis Commander는 Redis를 편리하게 관리할 수 있게 도와주는 툴입니다. redis: image: 'redis:alpine' env_file: - .env ports: - ${REDIS_PORT}:..
개요 어플리케이션은 종종 다른 환경에서 실행된다. 그리고 환경에 따라 다른 구성을 사용해야 하는 경우가 있다. Node.js 애플리케이션에서는 각 키가 특정 값을 나타내는 키-값 쌍을 포함하는 파일(.env)을 사용하여 각 환경을 나타내는 것이 일반적이다. Nest에서 이 기술을 사용하는 좋은 방법은 적절한 파일을 로드하는 ConfigModule을 사용하는 것이다. 편의를 위해 Nest에서는 내부적으로 dotenv를 사용하는 기본 패키지를 제공한다. 설치 $ npm i --save @nestjs/config 시작하기 설치가 완료되면 ConfigModule을 가져올 수 있게 된다. 일반적으로 어플리케이션의 최상위 레벨 모듈인 AppModule에 임포트하고 forRoot() 메소드를 통해 환경 변수를 읽어올..