카테고리 없음

Nestjs DTO (Data Transfer Object)

DevilFront 2022. 12. 22. 11:02
반응형

DTO는 데이터가 네트워크를 통해 전송되는 방법을 정의하는 객체다.

 

DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.

 

Interface나 class를 이용해서 정의 할 수 있지만 NestJs 에서는 class를 사용하는 것을 추천하고 있다. 

-> TypeScript의 클래스는 JavaScript ES6 표준을 따르므로 컴파일된 JavaScript에서 실제 엔터티로 보존되는 반면에 인터페이스는 변환 중에 제거되기 때문에 Nest는 런타임에 인터페이스를 참조할 수 없다.

 

 

 

DTO를 사용하는 이유?

 

-> 데이터 유효성을 체크하는데 효율적이다.

 

-> 유지보수 하는데 더욱 용이하다.

     - ex)  많은 서비스, 컨트롤러 파일 등에서 게시물 생성 관련 작업에서 description 프로퍼티를 없애거나 바꿔줘야 하는 상황이 생겼다. DTO 를 만들어 놓고 DTO를 통해서 데이터 처리를 하고 있었다면 DTO파일 하나만 수정하면 되지만 그게 아니라면 description 프로퍼티를 쓰고 있는 모든 파일에 들어가서 없애거나 바꿔줘야 한다. 

 

간단한 사용 방법

 

1. create DTO file

 

// createBoardDto

export class CreateBoardDto {
    title:string;

    description:string;
}

 

// Controller 

// DTO 사용전
@Post('/')
    createBoard(
      @Body('title') title:string,
      @Body('description') description:string,
    ) {
      return this.boardService.createBoard(createBoardDto);
    }


// DTO 사용후
@Post('/')
    createBoard(
      @Body() createBoardDto: CreateBoardDto,
    ) {
      return this.boardService.createBoard(createBoardDto);
    }

 

// Service

// DTO 사용 전
createBoard(title:string, description:string) {
      const board:Board = {
        id: uuid(),
        title,
        description,
        status: BoardStatus.PUBLIC,
      };
      this.boards.push(board);
      return board;
    }


// DTO 사용 후
createBoard(createBoardDto : CreateBoardDto) {
      const { title, description } = createBoardDto;

      const board:Board = {
        id: uuid(),
        title,
        description,
        status: BoardStatus.PUBLIC,
      };
      this.boards.push(board);
      return board;
    }

 

 

 

반응형