TypeScript 클래스와 JSON 객체 간의 변환을 쉽게 도와주는 라이브러리입니다.
주로 DTO와 엔티티 변환, 데이터 직렬화 및 역직렬화에서 사용됩니다.
NestJS와 함께 사용할 때 유용하며, 데이터의 변환과 매핑을 간편하게 처리할 수 있습니다.
1. 객체 변환: JSON 객체를 TypeScript 클래스로 변환하거나, TypeScript 클래스를 JSON 객체로 변환할 수 있습니다.
2. 속성 변환: 클래스의 속성 값을 자동으로 변환하거나 포맷할 수 있습니다.
3. 중첩 객체 변환: 중첩된 객체의 변환도 지원합니다.
먼저 class-transformer와 class-validator를 설치해야 합니다.
NestJS 프로젝트에서는 보통 다음과 같이 설치합니다.
npm install class-transformer class-validator
@Type: 중첩 객체의 타입을 정의합니다.
@Expose: 직렬화할 속성을 지정합니다.
@Exclude: 직렬화에서 제외할 속성을 지정합니다.
다음은 class-transformer의 사용 예제입니다.
import { Expose, Transform, Type } from 'class-transformer';
import { IsString, IsInt, Min, Max, IsOptional } from 'class-validator';
export class UserDto {
@Expose()
@IsString()
name: string;
@Expose()
@IsString()
@IsOptional()
email?: string;
@Expose()
@IsInt()
@Min(18)
@Max(100)
age: number;
@Expose()
@Transform(({ value }) => new Date(value), { toClassOnly: true })
createdAt: Date;
}
2. JSON 객체를 클래스 인스턴스로 변환
import { plainToClass } from 'class-transformer';
import { UserDto } from './user.dto';
const json = {
name: 'John Doe',
email: 'john.doe@example.com',
age: 30,
createdAt: '2024-01-01T00:00:00Z'
};
const userDto = plainToClass(UserDto, json);
console.log(userDto);
위 코드는 JSON 객체를 UserDto 클래스 인스턴스로 변환합니다.
createdAt 속성은 문자열에서 Date 객체로 변환됩니다.
import { classToPlain } from 'class-transformer';
import { UserDto } from './user.dto';
const userDto = new UserDto();
userDto.name = 'Jane Doe';
userDto.email = 'jane.doe@example.com';
userDto.age = 25;
userDto.createdAt = new Date();
const json = classToPlain(userDto);
console.log(json);
이 코드는 UserDto 클래스 인스턴스를 JSON 객체로 변환합니다.
기본적으로 @Expose 데코레이터가 붙은 속성만 직렬화됩니다.
import { Transform } from 'class-transformer';
export class UserDto {
@Transform(({ value }) => value.toUpperCase(), { toClassOnly: true })
name: string;
}
이 예제는 name 속성을 변환할 때, 모든 값을 대문자로 변환합니다.
import { Type } from 'class-transformer';
import { IsString, IsInt, Min } from 'class-validator';
class AddressDto {
@IsString()
street: string;
@IsString()
city: string;
}
export class UserDto {
@Type(() => AddressDto)
address: AddressDto;
@IsString()
name: string;
@IsInt()
@Min(18)
age: number;
}
여기서는 UserDto 클래스에 AddressDto를 중첩하여 사용하고,
@Type 데코레이터를 사용하여 address 속성을 AddressDto로 변환합니다.
class-transformer는 JSON과 TypeScript 클래스 간의 변환을 쉽게 해주는 라이브러리입니다.
주요 데코레이터로는 @Type, @Expose, @Exclude, @Transform이 있으며, 이를 통해 속성의 변환과 직렬화를 제어할 수 있습니다.
객체 변환을 통해 JSON을 클래스 인스턴스로 변환하거나, 클래스를 JSON으로 변환할 수 있습니다.
이렇게 class-transformer를 활용하면 데이터 변환 작업을 효율적으로 관리할 수 있다는것을
배웠습니다.