본문 바로가기

Backend14

NestJS에서 validation 관련 설정 방법 (class-validator & class-transformer) 1. Pipe- controller 에서 사용.- NestJS 에서 Pipe 는 먼저 transform 하고 validate 한다.  에러메시지는 "validation failed". @Controller('posts')export class PostsController { constructor(private readonly postsService: PostsService) {} @Get(':id') getPost( @Param('id', ParseIntPipe) id: number ){ return this.postService.getPost(); }} 2. class-validator- Entity 또는 DTO 에서 사용- IsNumber, IsString, IsE.. 2024. 6. 18.
Entity Embadding import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";// Entity 간 중복되는 column 이 있을 경우 아래와 같이 @Entity 데코레이터가 없는 일반 class로 만들어 사용할 수 있다.export class Name { @Column() first: string; @Column() last: string;}@Entity()export class StudentModel { @PrimaryGeneratedColumn() id: number; // 아래와 같이 @Column 데코레이터의 메타데이터로 익명함수의 리턴값으로 // 공통으로 사용되는 column이 들어있는 class 를 반환.. 2024. 6. 7.
다양한 Column 들 (Column Annotation) import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, VersionColumn, Generated } from 'typeorm';export enum Role { USER = 'user', ADMIN = 'admin'}@Entity()export class UserModel { @PrimaryGeneratedColumn() id: number; @Column({ type: 'varchar', name: 'title', length: 300, nullable: true, update: true, // true 면 처음 저장할떄만 값 지정 가능. 이후에는 값 변경 안됨.. 2024. 6. 7.
save 와 upsert MySQL로 작업을 하던 시절 데이터베이스에 데이터를 저장시키기 위해 SQL 키워드 "INSERT"를 사용했다. 그리고 상황에 따라 데이터가 있으면 UPDATE, 없으면 INSERT하는 UPSERT에 대한 개념을 알게되었다. 새로운 직장에서 typeORM을 공부하며 CRUD를 구현하던 중 데이터를 저장하는 상황에서 나는 단순히 INSERT를 먼저 생각하게 되었고, 공식문서에서 Repository API 목록을 살펴보니 INSERT를 실행시킬 수 있는 API가 세 가지가 있더라... ① save ② insert ③ update ④ upsert 공식문서에서 정의하는 내용을 살펴 보면... ① saveSaves a given entity or array of entities. If the entity alre.. 2023. 4. 25.
[class-transformer] plainToInstance & instanceToPlain 모델 매퍼(ModelMapper) 스프링의 경우 DTO와 엔티티간의 변환을 할 때 ModelMapper나 Mapstruct라는 라이브러리를 많이 사용합니다. 그러면, 객체가 가질 수 있는 프로퍼티는 옮겨지게 되고, 아닌 프로퍼티는 버려지게 되죠. JS는 그러한 역할이 없어서 상당히 불편했습니다. Interface를 고집한다는 점과 Class instance와 Literal object 간 변환이 어렵다는 점이 이유입니다. 그나마 쓸만한 라이브러리가 AutoMapper인데 사용하기가 어렵고 유지보수가 중지되었죠. 그래서 최근에 나와서 핫한 라이브러리 중 하나가 class-transformer입니다. 이 라이브러리는 ModelMapper 역할을 훌륭하게 수행할 수 있고, 상당히 강력하고 간단합니다. 최근 c.. 2023. 4. 25.
스칼라 서브쿼리 테이블은 이전 게시글에서 사용해했던 pokemon 과 ability 이다. PRIMARY_ABILITY, SUB_ABILITY 값으로 ability 테이블 NAME 컬럼에서 이름을 가져오고 싶다. 우선 쿼리를 먼저 그려보면, SELECT "NAME", "NUMBER", (SELECT "NAME" FROM ability WHERE ability."ID" = pokemon."PRIMARY_ABILITY" ) AS p_ability, (SELECT "NAME" FROM ability WHERE ability."ID" = pokemon."SUB_ABILITY" ) AS s_abilityFROM pokemon; 이러하다. 정말 간단하지 않은가. 결과는,  원하는 형태로 잘나왔다. 그렇다면 스칼라 서브쿼리를 Ty.. 2023. 4. 7.