반응형
***본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다




class transformer.
클래스 밸리데이터와 클래스 트랜스포머는 항상 같이 가는 존재다.
검증하고 변환하고 항상 같이.
주요 특징.
TS Decorator를 사용해서 클래스를 변환한다 (Validate).
- TypeScript 데코레이터(@Expose, @Transform, @Type 등)를 사용해 평범한 JSON 객체를 클래스 인스턴스로 변환하거나 그 반대로 처리 가능
- class-validator와 함께 쓰면, 검증(Validation) 도 자연스럽게 연동됨
직렬화(Serialization)와 역직렬화(Deserialization)를 담당한다.
- 직렬화: 객체 → JSON 문자열로 변환 (예: 응답을 보낼 때)
- 역직렬화: JSON → 클래스 인스턴스로 변환 (예: 요청을 받을 때)
- NestJS의 DTO(입력 객체)를 실제 클래스 형태로 변환하는 데 사용
중첩된(Nested) 객체에도 쉽게 적용 가능하다.
- 객체 속의 또 다른 객체(DTO 안의 DTO)를 자동으로 클래스 인스턴스로 변환
- 예: @Type(() => UserDto)처럼 중첩 DTO를 지정하면 자동으로 변환
커스텀 Transformer로 어떤 변환이든 가능하다.
- @Transform() 데코레이터를 이용해, 원하는 방식으로 값을 조작 가능
- 예: 문자열을 숫자로 바꾸거나, 날짜 형식을 바꾸거나, 암호화된 값을 복호화하는 등의 사용자 정의 변환 로직을 넣을 수 있음
class-validator를 만든 개발자가 만든 프로젝트다.
- class-transformer는 class-validator와 함께 자주 사용되며, 두 라이브러리는 설계 목적이 잘 맞음
- DTO 클래스에서 유효성 검사와 함께 구조 변환도 함께 다룰 수 있음
중첩 클래스 변환이란?
DTO 내부에 또 다른 객체(클래스)가 포함될 때,
해당 중첩 객체도 자동으로 클래스 인스턴스로 변환되도록 도와주는 기능입니다.
class AddressDto {
street: string;
city: string;
}
class UserDto {
name: string;
address: AddressDto;
}
이 상태에서 아래와 같은 JSON이 요청으로 들어오면:
{
"name": "홍길동",
"address": {
"street": "서초대로",
"city": "서울"
}
}
변환 없이 바로 UserDto로 매핑하면, address는 AddressDto 인스턴스가 아니라 단순한 객체로 처리됩니다.
그래서 유효성 검사(@IsString() 등)가 제대로 동작하지 않게 됩니다.
해결 방법: @Type(() => 클래스명) 사용
class-transformer의 @Type() 데코레이터를 사용하여
중첩 필드가 어떤 타입의 클래스인지 명시해 줘야 합니다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완https://bit.ly/4hTSJNB
반응형