← Lab
💡
👍
[NestJS] PartialType을 사용하여 DTO 만들기
스터디2024.08.14
- NestJS

NestJS에서PartialType은@nestjs/mapped-types패키지에서 제공하는 유틸리티 함수로, 전달된 DTO 클래스의 모든 속성을선택적(optional)으로 만드는 새로운 클래스를 생성한다. 즉,PartialType은 기존 DTO의 모든 속성을선택적변경시켜 새로운 DTO를 생성하도록 도와준다.
PartialType 을 사용하기 위해선 아래와 같은 라이브러리를 설치해야한다.
$ npm i --save @nestjs/mapped-types
💡 PartialType 사용해보기
만약, 아래와 같이 CreateMoveDTO 가 있다 가정한다.
// CreateMoveDTO.ts
import { IsString, IsNumber } from 'class-validator';
export class CreateMoiveDTO {
@IsString()
title: string;
@IsNumber()
year: number;
@IsString({ each: true })
genres: string[];
}
해당 DTO는 title, year, genres 의 필드를 가진다.
종종 DTO를 생성할 때 존재하는 DTO에서 특정 필드를 제거하거나, 모두 선택적(Optional) 화 하거나, 특정 필드만 선택하여 변경하고 싶은 경우가 많이 있다. 이때 사용되는 라이브러리가 @nestjs/mapped-types 의 PartialType 이다.
사용법은 아래와 같이 새롭게 만들고자 하는 DTO를 작성하고 PartialType 를 상속받는다.
import { PartialType } from '@nestjs/mapped-types';
import { CreateMoiveDTO } from './create-movie.dto';
export class UpdateMovieDTO extends PartialType(CreateMoveDTO) {}
PartialType(`Optional`화 시키고 싶은 DTO 클래스)
위와 같이 Optional화 시키고자 하는 클래스를 PartialType 에 사용한다.
위 PartialType 으로 생성된 UpdateMovieDTO 는 아래와 동등하다.
export class UpdateMovieDTO{
title?: string;
year?: number;
genres?: string[];
}
위 DTO는 아래와 같은 동작 방식을 가진다.
- 데이터 생성 요청(Create): 모든 필드(
title,year,genres) 필수로 요청 데이터에 포함되어야 한다. - 데이터 업데이트 요청(Update) : 요청 데이터엔 일부 필드만 포함될 수 있으며 특정 필드만 업데이트할 수 있다. (ex
year필드만 업데이트하려면{ "year": 2024 }와 같이 보낼 수 있다.
👍 PartialType의 장점!
- 코드 재사용성의 증가로 중복된 코드가 작성될 우려 없이 쉽게 DTO를 정의할 수 있다!
- 특정 필드를 선택적으로 변경할 수 있어 클라이언트가 특정 데이터를 업데이트할 시 필요한 필드만 제공할 수 있다!