본문으로 건너뛰기

Dto

asap.js는 객체지향 프로그래밍을 지원합니다. 안전하고 편리하게 데이터를 처리하기 위해 DTO(Data Transfer Object) 라는 객체를 사용합니다.

asap.js의 DtoTypeIs를 기반으로 각 레이어간 데이터 교환과 Database Query, Swagger 자동 생성 등 다양한 기능에서 편리하게 사용하기 위해 개발됐습니다.

DAO(Data Access Object) 와 유사하게 활용할 수 있도록, asap.js의 DtoTypeIs를 기반으로 데이터를 검증하고, 데이터베이스에 저장하고, 데이터베이스에서 불러오는 등의 기능을 제공합니다.

Dto를 구성하기 위해서는 ExtendableDto를 필수적으로 extends 해야합니다.

import { Dto, ExtendableDto, TypeIs } from "@asapjs/sequelize";

import UsersTable from "@user/domain/entity/UsersTable";

@Dto({
name: "user_info_dto",
defineTable: UsersTable,
})
class UserInfoDto extends ExtendableDto {
@TypeIs.INT({ comment: "아이디" })
id: number;

@TypeIs.STRING({ comment: "이름" })
name: string;

// ...
}

Dto 데코레이터

데코레이터는 해당 Dto를 기반으로 Database Query를 진행하기 위해 적용합니다.

Swagger 문서 자동 생성을 위해 생성된 Dto의 경우 데코레이터가 필요하지 않습니다.

@Dto({
name: "user_info_dto",
defineTable: UsersTable,
})
class UserInfoDto extends ExtendableDto {}

파라미터 살펴보기

이름필수 여부타입비고
nameOstringDto 이름
defineTableOModel해당 Dto를 기반으로 Query할 엔티티

Feature

Swagger 문서 자동 생성

라우터를 구성할 때 매개변수로 전달한 query, body, response에 따라 Swagger 문서를 자동으로 생성합니다.

관련 문서 읽어보기

this.app.get({
// 라우터 이름
title: "게시글 리스트 조회",
// 하위 라우터
path: "/",
// 인증 필수 여부
auth: true,
// 쿼리 DTO
query: GetPostDto,
// 응답 DTO
response: TypeIs.ARRAY(PostDTO),
// 실행 Function
excute: this.GetPostListController,
});

new Dto().map(data)

Source
class Dto extends ExtendableDto {
@TypeIs.INT({ comment: "아이디" })
id: number;

@TypeIs.STRING({ comment: "이름" })
name: string;
}

const data = {
id: "1",
name: "김아삽",
phone: "0269564204",
};

const mappedData = new Dto().map(data);

console.log(JSON.stringify(mappedData));
Output
{
"id": 1,
"name": "김아삽"
}

위의 Source 처럼 Dto에 없는 키에 대한 데이터까지 넘길 경우 해당 키를 제외하고 데이터를 정제합니다.

더불어 TypeIs.INT 타입인 idstring으로 "1"을 넘겼을 경우 자동으로 number로 데이터 형변환을 진행합니다.

데이터 형변환과 관련된 자세한 내용은 아래 링크를 참고하세요.

TypeIs 알아보기