NestJS에서 DTO(Data Transfer Object)는 주로 클라이언트와 서버 간의 데이터를 교환하기 위한 객체다.
즉, 데이터베이스에서 데이터를 얻어 Service나 Controller 사이에서 데이터를 보낼 때 사용되는 객체다.
교환할 데이터가 많은 경우, 프로퍼티가 많아지게 되고, 여러곳에서 사용하게 된다.
만약에 프로퍼티 중 하나를 삭제한다던가 수정이 있을 경우, 해당 프로퍼티를 사용하고 있는 곳의 프로퍼티 역시 직접 수정해야한다.
그렇게되면 오타라던지 실수가 발생할 수 있으며 효율적이지도 않다.
클라이언트로 부터 요청과 함께 데이터를 받을 때 DTO를 사용하게되면,
해당 데이터를 구조화하고, 유효성 검사를 할 수 있다.
이에 따라 올바르지 않은 데이터가 서버로 들어오는 것을 방지할 수 있다.
또한, 타입스크립트의 타입으로도 사용되기 때문에 더 안정적인 코드로 만들어 준다.
DTO는 interface
혹은 class
를 사용해서 정의하는데,
Class
를 사용해서 정의하는 것을 권장하고 있다.
class가 interface보다 프로그램이 실행되는 중에 작동하기 때문에,
파이프와 같은 기능을 사용할 때 더 유용하기 때문이다.
export class CreateBoardDto {
title: string;
content: string;
}
@Post()
createBoard(@Body() createBoardDto: CreateBoardDto): Board{
return this.boardsService.createBoard(createBoardDto);
}
createBoard(createBoardDto: CreateBoardDto) {
const { title, content } = createBoardDto;
const board: Board = {
id: uuid(),
title,
content,
};
this.boards.push(board);
return board;
}