안녕하세요 @realmankwon입니다.
DTO를 사용할때 main.ts 에 선언한 Pipe의 옵션에 따라 더 편하게 사용할 수 있는 기능들이 있습니다.
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
}),
);
- whitelist : true 는 DTO 에 정의된 것들만 통과하도록 하는 것입니다.
- forbidNonWhitelisted : true 는 DTO 에 정의되지 않은 것들은 제한하는 것입니다.
- transform : true 는 사용자로 부터 받은 값의 타입을 시스템에서 사용하는 타입으로 자동 변환해 주는 것입니다.
transform 에 대해서 좀 더 설명을 하자면 가령 DB 에서 id 가 number 로 정의되어 있고 사용자는 string으로 전송을 하였다면 백단에서는 이를 다음과 같이 변환시켜주어야 합니다.
getOne(id: string) : Movie {
const movie = this.movies.find(movie => movie.id === +id);
}
하지만 DTO 의 경우는 정의된 타입이 아니면 타입변환 이전에 이미 exception 일 발생하기 때문에 아예 처리가 불가능하게 됩니다.
이러한 것을 해결하기 위해 transform : true로 설정을 하면 자동으로 타입을 변경하여 처리가 되기 때문에 편리하게 사용할 수 있는 기능입니다.