Backend/Node.js (NestJS)
API를 만들다 보면 파일과 같은 바이너리 데이터의 처리를 구현해야 할 수도 있다. 이번에는 NestJS에서 요청으로 받은 파일을 서버 내부에 업로드 하는 과정에 대해서 작성해보려고 한다. 패키지 설치 yarn add @types/multer --dev Express에서는 파일 업로드 관련 모듈을 제공해주는 Multer 패키지를 통해서 파일 업로드를 구현하고는 한다. Multer는 요청과 핸들러 사이에서 파일을 처리해주는 미들웨어이다. NestJS에서도 기본적으로 Multer를 지원한다. 우리는 타입스크립트로 사용하기 위해서 DevDependency로 다음 모듈을 설치해주자. Request에서 파일 받기 ▶ file.controller.ts @Controller('file') export class Fi..
프로젝트를 운영하다 보면 예상치 못한 오류가 발생할 수 있다. 예외를 완전히 막을 수 있다면 좋겠지만 현실적으로는 불가능하다. 그렇다면 우리가 해야 하는 것은 예상치 못한 오류가 발생해도 프로젝트 전체에 악영향을 주지 못하게, 그리고 예외를 추적하여 빠르게 소스코드를 수정할 수 있도록 해야 할 것이다. 이번에는 예외가 발생하는 경우, 자동으로 Catch받아 예외 처리를 해주는 Exception Filter를 적용해 보려고 한다. 필터 작성하기 ▶ /src/commons/filter/http-exception.filter.ts import { ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus, LoggerService, } from '@ne..
NestJS에서도 Express와 같이 미들웨어를 사용할 수 있다. 이전 포스팅에서 Winston을 이용한 Logging에 대해서 알아보았었는데, 이번에는 요청이 들어오기 전 미들웨어를 이용하여 요청들을 로그를 남겨보는 작업을 해보려고 한다. 미들웨어 작성 미들웨어는 클라이언트의 요청을 컨트롤러의 핸들러가 처리하기 전에 로직을 실행하게 할 수 있다. 기본적으로 사용하는 방법은 Express의 미들웨어와 유사하다. ▶ /src/commons/middleware/logger.middleware.ts import { Injectable, Logger, NestMiddleware } from '@nestjs/common'; import { Request, Response } from 'express'; @Inj..
Application을 개발 혹은 배포 후 예상치 못한 오류의 추적이나 사용 히스토리 파악을 위해서는 로그를 남기는 작업을 하게 된다. 이번에는 NestJS에서 Winston을 이용해서 Log를 남기는 작업을 포스팅해보겠다 패키지 설치 yarn add nest-winston winston winston-daily-rotate-file Winston 패키지는 로그의 포멧, 파일 형태로 저장 등 로깅을 도와주는 패키지이다. NestJS에서도 해당 패키지를 사용할 수 있다. 위의 명령어를 통해 패키지를 설치하자. Winston Config ▶ /src/utils/winston.config.ts import { utilities, WinstonModule } from 'nest-winston'; import *..
서비스하고있는 많은 플랫폼들은 결제 프로세스를 사용한다. 이번에는 클라이언트측에서 결제 요청 후 백엔드 서버에서의 처리에 대해서 포스팅해보려고 한다. https://sjh9708.tistory.com/50 [Web] 결제 프로세스 적용을 위한 IamPort 사용해보기 우리는 흔히 웹, 키오스크, 모바일 등에서 결제 시스템을 이용하게 된다. 결제 프로세스에 적용을 위한 개념과 간단한 세팅 하는 것을 다루어보려고 한다. 결제 과정 1. 구매자가 구매 상품과 금 sjh9708.tistory.com 해당 포스팅에서 IamPort를 통한 결제 적용과 간단한 프론트엔드 코드를 작성했었다. 프론트엔드에서 결제 완료 후 결제 정보와 함께 벡엔드 서버로 요청을 하게 되는데, 결제 완료에 대한 기록을 남기고, 사용자에게 ..
많은 웹 서비스들을 보면 페이스북, 카카오, 네이버, 구글 등으로 소셜 로그인을 지원하는 것을 볼 수 있다. 이렇게 다른 믿을만한 플랫폼에 인증을 대신 맡기는 것을 OAuth 인증이라고 하는데 이번 포스팅에서는 구글 OAuth 인증에 대해서 알아보도록 하자. https://sjh9708.tistory.com/46 [Web] 인증과 인가 - JWT 토큰 인증 앞 포스팅에서 세션 방식의 인증과, 성능 개선을 위한 방법들에 대해서 다루어 보았었는데 이번에는 언급했던 토큰 인증 방식에 대해서 알아보려고 한다. 토큰 인증 세션 인증 방식과 달리 인증 sjh9708.tistory.com 패키지 설치 yarn add passport-google-oauth20 Google OAuth의 Passport Strategy를..
이전 포스팅에서는 인증 후 JWT를 발급하는 방법에 대해서 알아보았다. 이번에는 로그인된 사용자에게만 API 접근을 허용하도록 하는 인가에 대해서 다루어보겠다. JWT 토큰 인증 방식에 대해서는 아래의 포스팅을 참고하면 좋을 것 같다. https://sjh9708.tistory.com/46 [Web] 인증과 인가 - JWT 토큰 인증 앞 포스팅에서 세션 방식의 인증과, 성능 개선을 위한 방법들에 대해서 다루어 보았었는데 이번에는 언급했던 토큰 인증 방식에 대해서 알아보려고 한다. 토큰 인증 세션 인증 방식과 달리 인증 sjh9708.tistory.com 패키지 설치 Express에서는 인가의 방법으로 Passport 패키지를 주로 사용했었다. NestJS에서도 Passport를 사용할 수 있다. 다음의 ..
거의 모든 웹 어플리케이션에서 인증과 인가의 구현은 빠질 수 없는 존재이다. 이번 포스팅부터는 JWT 토큰 인증 방식을 NestJS에서 구현해보는 것을 목표로 하려고 한다. JWT 토큰 인증 방식에 대해서는 아래의 포스팅을 참고하면 좋을 것 같다. https://sjh9708.tistory.com/46 [Web] 인증과 인가 - JWT 토큰 인증 앞 포스팅에서 세션 방식의 인증과, 성능 개선을 위한 방법들에 대해서 다루어 보았었는데 이번에는 언급했던 토큰 인증 방식에 대해서 알아보려고 한다. 토큰 인증 세션 인증 방식과 달리 인증 sjh9708.tistory.com 회원 엔티티 생성 및 회원가입 구현 ▶ user.entity.ts import { Column, Entity, PrimaryGenerated..
실무에서 Application의 개발 혹은 유지보수를 하다보면, 다른 데이터베이스를 추가적으로 사용해야 하거나, 타 업체의 데이터베이스를 제공받아서 사용해야 하는 일이 생긴다. 지금까지는 데이터베이스 1개를 연결하는 것을 해보았는데, 이번에는 데이터베이스 여러개를 연결해보는 작업을 한번 해보자. Module ▶ app.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ProductsModule } from './apis/products/products.module'; import { ProductCategoryModule } from './apis/product..