DTO (Data Transfer Object) 란
DTO는 계층간 데이터 교환을 위한 "객체"이다. (데이터 교환 시 사용하는 객체 | 일종의 개발 규칙이다.)
DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.
DTO는 데이터가 네트워크를 통해 전송되는 방법을 정의하는 객체이다.
# DTO 구현 방식
Interface나 Class를 이용해서 정의 될 수 있다.
(하지만, 클래스를 이용하는 것을 NestJS에서 추천하고 있다.)
# DTO (Data Transfer Object)를 쓰는 이유는 무엇인가?
데이터 유효성을 체크하는데 효율적이다.
더 안정적인 코드로 만들어준다. | 타입스크립트의 타입으로도 사용된다.
DTO 구현
게시글 생성 API의 Params DTO로 구성하기
boards 폴더 아래에 dto 폴더를 생성한다.
dto 폴더 아래에 create-board.dto.ts 파일을 생성한다. (params 형태를 dto에 지정함.)
create-board.dto.ts 파일에 게시글 생성 API의 Params를 class 형태로 정의해둔다.
// create-board.dto.ts 파일
export class CreateBoardDto{
title: string;
description: string;
}
게시글 Controller에서 Params를 Body로 받을 때 (형식을) dto를 이용해서 받는다.
@Post()
createBoard(
@Body() createBoaradDto: CreateBoardDto
): Board {
return this.boardsService.createBoard(createBoaradDto);
}
게시글 Service에서도 Controller에게 받아지는 값을 dto를 통해서 받도록 수정한다.
createBoard(createBoaradDto: CreateBoardDto){
const {title, description} = createBoaradDto;
const board: Board = {
// uuid 모듈을 불러와 로컬에서 유니크한 id값으로 지정
id: uuid(),
title,
description,
status: BoardStatus.PUBLIC
}
// 생성된 게시글 정보를 return 한다.
this.boards.push(board);
return board;
}
이렇게 함으로써 살펴볼 수 있는 점은,
게시글 생성 API를 만들고나서 {태그, 카테고리 등}와 같은 정보를 추가 개발하고자 한다면 dto 파일만 수정하여,
게시글 생성 API의 Params를 쉽게 업데이트 할 수 있다. (결국, dto라는 건 Params의 유지보수를 쉽게해주기 위한 도구이다.)
'📚 스터디 > 백엔드' 카테고리의 다른 글
[개인 스터디] NestJS 정복하기 #06 - Pipe 사용법 (0) | 2022.10.29 |
---|---|
[개인 스터디] NestJS 정복하기 #05 - Pipe { Data Transformation & Validation } (0) | 2022.10.29 |
[개인 스터디] NestJS 정복하기 #03 - 게시글 생성 API | Create API (0) | 2022.10.28 |
[개인 스터디] NestJS 정복 - CRUD API 구현 (0) | 2022.10.27 |
[개인 스터디] NestJS 정복하기 #02 - NestJS | src 폴더 로직알아보기 (0) | 2022.10.27 |