[Nest] WebSocket 서버 구성하기(feat. Socket.io)
2022. 12. 12. 19:58
라이브러리 & 프레임워크/NestJS
WebSocket이란? WebSocket(ws) 이란 http 프로토콜과 같이 프로토콜의 일종이며, 클라이언트와 서버(브라우저와 서버)를 연결하고 언제든 양방향(주고 받는) 통신 또는 데이터 전송이 가능하도록 하는 기술입니다. 이번 게시글에서는 WebSocket 프로토콜을 기반으로 구축된 Socket.io 라이브러리를 이용하여 WebSocket 서버를 구성 후 연결 테스트를 해보겠습니다. 역시나 NestJS 의 공식문서에 설명이 잘 되어 있어 이를 참고했습니다. https://docs.nestjs.com/websockets/gateways#gateways Documentation | NestJS - A progressive Node.js framework Nest is a framework for bui..
[NestJS] Authentication
2022. 11. 29. 22:42
라이브러리 & 프레임워크/NestJS
들어가며 이번 게시글에서는 Nest.js 에서 로그인 기능을 구현하는 방법에 대해 알아볼 예정입니다. Nest.js 의 공식 문서를 참고하여 이 게시글을 작성할 예정입니다. 공식 문서 : https://docs.nestjs.com/security/authentication Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriente..
Exception filter
2022. 11. 28. 17:44
라이브러리 & 프레임워크/NestJS
예외 필터(Exception filter) Nest 에서 제공하는 전역 예외 필터 이외에 직접 예외 필터 레이어를 두어 원하는 대로 예외를 핸들링할 수 있습니다. 예외 필터(Exception filter)는 예외가 일어났을 때 에러 로그를 남기거나 응답 객체를 원하는 대로 변경하고자 하는 등의 요구사항을 해결하고자 할 때 사용합니다. 예외가 발생했을 때 모든 예외(Error)를 잡아서 원하는 대로 핸들링할 수 있는 예외 필터를 만들어보고자 합니다. import { ArgumentsHost, Catch, ExceptionFilter, HttpException, InternalServerErrorException } from '@nestjs/common'; import { Request, Response }..
Validation
2022. 11. 28. 16:43
라이브러리 & 프레임워크/NestJS
Validation 들어오는 요청에 대해 자동으로 유효성을 검증하기 위해, Nest 는 아래와 같은 몇 가지 파이프를 제공하고 있습니다. - ValidationPipe - ParseIntPipe - ParseBoolPipe - ParseArrayPipe - ParseUUIDPipe ValidationPipe 는 class-validator 패키지와 이 패키지가 제공하는 선언적 유효성 검증 데코레이터를 사용합니다. ValidationPipe 는 모든 클라이언트 페이로드에 대한 유효성 검증 규칙 적용을 강제할 수 있는 편리한 접근 방식을 제공합니다. 내장 ValidationPipe 사용 요구되는 의존성 설치 $ npm i --save class-validator class-transformer 자동 유효성 ..
Mapped Types
2022. 11. 28. 15:49
라이브러리 & 프레임워크/NestJS
Mapped Type CRUD(Create, Read, Update, Delete)와 같은 기능을 구축할 때 기본 항목 유형을 변형하여 사용하면 편리합니다. Nest 는 이 작업을 보다 편리하게 만들기 위해 유형 변환을 수행하는 몇 가지 유틸리티 함수들을 제공합니다. PartialType POST, UPDATE 요청 처리 시 데이터 삽입에 대한 DTO, 데이터 수정에 대한 DTO를 만듭니다. 일반적으로 데이터 수정 DTO는 삽입 시의 DTO에 종속됩니다. 수정 시의 DTO에 들어가는 개체가 삽입 시의 DTO에 들어 있는 개체에 포함된다는 것입니다. 이런 상황에서 사용할 수 있는 것이 PartialType입니다. PartialType() 함수는 입력 유형의 모든 속성이 선택 사항으로 설정된 유형(클래스)을..
[TypeORM] 마이그레이션
2022. 11. 27. 20:31
라이브러리 & 프레임워크/NestJS
들어가며 그동안 프로젝트를 진행하며 마이그레이션에 대해 모른 채 진행하다 보니 주먹구구 식으로 테이블에 대한 변경사항을 업데이트함으로 인해 수많은 사이드 이펙트가 발생했습니다. 예를 들어 현재 테이블의 상태만 파악 가능하고, 어떤 컬럼이 어떤 데이터 형식에서 어떤 데이터 형식으로 바뀌었는지 추적이 불가능하다는 것이었습니다. 뿐만 아니라 TypeORM 의 sync 옵션을 true 로 설정해놓고 개발을 진행했던 당시 테이블에 저장되어 있던 데이터가 모두 날아가버리는 불상사가 발생했던 적도 있었습니다. 이와 같은 상황이 다시는 일어나지 않도록 해결책을 찾던 도중 마이그레이션에 대해 알게 되었고, 이에 대해 공부한 내용을 정리해 게시글로 남겨놉니다. 이 게시글은 필자가 여러 블로그 및 공식 문서를 통해 정리한 ..
[TypeORM] TypeORM 엔티티 상속을 통한 중복 코드 제거
2022. 11. 26. 22:11
라이브러리 & 프레임워크/NestJS
createdAt, updatedAt, deletedAt 이 중복되는 Users, Workspaces 가 존재한다고 가정했을 때 entities/common.ts import { CreateDateColumn, DeleteDateColumn, UpdateDateColumn } from 'typeorm'; export abstract class Timestamp { @CreateDateColumn() createdAt: Date; @UpdateDateColumn() updatedAt: Date; @DeleteDateColumn() deletedAt: Date | null; } entities/Users.ts @Entity({ name: 'users' }) export class Users extends T..
[NestJS] 커스텀 데코레이터 만들기
2022. 11. 21. 22:50
라이브러리 & 프레임워크/NestJS
데코레이터란? 데코레이터는 대다수의 프로그래밍 언어에 사용되는 잘 알려진 개념이지만 JavaScript 세계에서는 도입된지 얼마되지 않은 개념이라고 합니다. 데코레이터에 대해 공식 문서에서는 이렇게 정의하고 있습니다. An ES2016 decorator is an expression which returns a function and can take a target, name and property descriptor as arguments. You apply it by prefixing the decorator with an @ character and placing this at the very top of what you are trying to decorate. Decorators can be d..