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..
[스택/큐] 주식가격
2022. 11. 25. 20:22
알고리즘/프로그래머스
문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] 문제 풀이 1) Brute Force 1: 2, 3, 2, 3 => 끝까지 가격이 떨어지지 않음. => 총 4초동안 가격 하락 X 2: 3, 2, 3 => 끝까지 가격이 떨어지지 않음. => 총 3초동안 가격 하락 X 3: 2 => 1초 후 가격이 2로 떨어짐. => 총 1초동안 가격 하락 X 2: ..
[스택/큐] 올바른 괄호
2022. 11. 23. 15:48
알고리즘/프로그래머스
문제 설명 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 제한사항 문자열 s의 길이 : 100,000 이하의 자연수 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다. 입출력 예시 s answer "()()" true "(())()" true ")()(" false "(()(" false 내 풀이 /..

[스택/큐] 같은 숫자는 싫어
2022. 11. 23. 14:14
알고리즘/프로그래머스
문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 ..