logo

[NestJS] Mapped types로 DTO 상속/재사용하기, Entity를 DTO로 사용하기

language-logoNestJS
language-logoSwagger

• Nest.js에서는 CRUD와 같은 기능을 만들 때 기본 Entity Type에 변형해서 생성하는 것이 유용한 경우를 위해 타입 변환을 수행하는 여러 유틸리티 기능을 제공한다. 이를 Mapped Types라고 하며, PartialType, PickType, OmitType, IntersectionType 등의 함수가 있다.
• PartialType 함수는 다른 DTO를 상속 받아오면서 각 field를 optional하게 가져올 수 있고, PickType 함수는 input type에서 properties 집합을 선택하여 new type을 구성한다. OmitType 함수는 input type에서 모든 properties를 선택한 다음, 특정 keys 집합을 제거하여 type을 구성하며, IntersectionType 함수는 2개의 types을 합쳐서 하나의 새로운 type을 구성한다. 이러한 타입들은 중첩해서 사용하는 것도 가능하다.
• 여러 DTO의 값이 중복되는 문제가 발생했으며, 컨트롤러나 서비스에서 직접적으로 Entity 타입을 사용하여 validation이나 transfer object를 사용하는 문제, Entity 내의 모든 value에 접근 가능한 문제가 있었다.
• 이를 해결하기 위해 UserEntity를 UserDto가 상속하고, UserDto를 CreateUserDto나 UpdateUserDto가 재상속하는 방식으로 리팩토링하였으며, validation은 Entity에 데코레이터로 처리하여 DTO들을 간결하게 정리하였다.

thumbnail
북마크
공유하기
신고하기
5분 분량
조회수 288
profile-imagewq0212
일 년 전
Copyright © 2025. Codenary All Rights Reserved.