DTO Definition
Basic Structure
dto:
DTOName:
meta: dto [annotations]
fields:
fieldName: fieldType [annotations]
Meta Annotations
@template(EntityName): 기반 엔티티 지정@searchable(entity=EntityName, pageSize=n): 검색 DTO
Field Annotations
@ref(fieldPath): 원본 필드 참조 (중첩 참조 가능)--: 필드 제외 (템플릿 사용시)
DTO 예시
dto:
ArticleDTO:
meta: dto @template(Article)
fields:
boardName: string @ref(board.name) -- 게시판명
boardType: BoardType @ref(board.boardType) -- 게시판 타입
createDate: -- # 템플릿에서 제외
ArticleSearchDTO:
meta: dto @searchable(entity=Article, pageSize=50)
fields:
title: string @search(like) -- 제목 검색
boardType: List<BoardType> @search(in) @ref(board.boardType) -- 게시판 타입
createDateFrom: date @search(between) -- 생성일 시작
createDateTo: date @search(between) -- 생성일 종료
Template Inheritance
Multiple Template Inheritance
dto:
CarProfileInfoDTO:
meta: dto @template(CarProfileDTO,CarInfoDTO)
fields:
additionalInfo: string -- 추가 정보
여러 DTO를 조합하여 새로운 DTO를 생성할 수 있습니다. @template 어노테이션에 콤마로 구분하여 여러 템플릿을 지정합니다.
Search DTO Details
@searchable 어노테이션
dto:
ArticleSearchDTO:
meta: dto @searchable(entity=Article, pageSize=50)
# 또는
meta: dto @searchable(entity=Article, pageSize=50, pageable=true)
Parameters:
entity: 대상 엔티티명 (필수)pageSize: 페이지 크기 (기본값:100)pageable: 페이징 활성화 여부 (기본값:true, pageSize 지정시 자동 활성화)
Auto-generated Fields:
pageNumber: 페이지 번호 (기본값: 0)pageSize: 페이지 크기 (설정한 값)sortCode: 정렬 필드명
Field Reference (@ref)
DTO에서 관련 엔티티의 필드값을 가져올 때 사용합니다.
# Entity에 board: Board 라는 필드가 정의되어 있을 때
boardName: string @ref(board.name) # 단순 참조
boardTypeName: string @ref(board.boardType.name) # 중첩 참조
DTO Type Specification (@dtype)
articles: List<Article> @dtype(List<ArticleDTO>)
- DTO 전환시 사용할 타입 명시
- 순환 참조 방지 및 타입 안전성 확보
Naming Conventions
DTO
- 클래스명: EntityName + "DTO" (BoardDTO, ArticleDTO)
- 검색 DTO: EntityName + "SearchDTO" (ArticleSearchDTO)
팁
For more detailed information on annotations, see 어노테이션 가이드.