@ApiPropertyOptional({
description: '반환할 최대 챌린지 수',
default: 0,
type: Number,
})
@IsOptional()
@IsNumber()
@Transform(({ value }) => Number(value)) // 이게 꼭 필요할까?
limit?: number;
Transform
데코레이터는 클라이언트로부터 받은 HTTP 요청 데이터가 DTO 객체로 변환될 때 적용되는 변환 로직을 정의합니다.
여기서 @Transform(({ value }) => Number(value))
코드는 limit
파라미터를 위해 사용되며, 문자열로 들어온 값을 숫자 타입으로 변환하는 역할을 합니다.
이 Transform이 필요한 이유:
?limit=10
의 "10"은 문자열)@IsNumber()
데코레이터는 값이 숫자 타입인지 검증만 하지만, 자동으로 변환하지는 않습니다IsNumber()
검증에 실패하거나, 로직에서 문자열과 숫자 비교 시 문제가 발생할 수 있습니다만약 Transform을 제거하면:
IsNumber()
검증에 실패하여 400 Bad Request 에러가 발생할 수 있습니다따라서 클라이언트에서 보내는 문자열 데이터를 자동으로 숫자로 변환하기 위해 Transform 데코레이터가 필요합니다.