@ApiPropertyOptional({
    description: '반환할 최대 챌린지 수',
    default: 0,
    type: Number,
  })
  @IsOptional()
  @IsNumber()
  @Transform(({ value }) => Number(value)) // 이게 꼭 필요할까?
  limit?: number;

@Transform이 필요한 이유

Transform 데코레이터는 클라이언트로부터 받은 HTTP 요청 데이터가 DTO 객체로 변환될 때 적용되는 변환 로직을 정의합니다.

여기서 @Transform(({ value }) => Number(value)) 코드는 limit 파라미터를 위해 사용되며, 문자열로 들어온 값을 숫자 타입으로 변환하는 역할을 합니다.

이 Transform이 필요한 이유:

  1. HTTP 요청에서 쿼리 파라미터는 기본적으로 문자열로 전달됩니다(예: ?limit=10의 "10"은 문자열)
  2. @IsNumber() 데코레이터는 값이 숫자 타입인지 검증만 하지만, 자동으로 변환하지는 않습니다
  3. Transform이 없으면 문자열로 들어온 값은 숫자로 변환되지 않아 IsNumber() 검증에 실패하거나, 로직에서 문자열과 숫자 비교 시 문제가 발생할 수 있습니다

만약 Transform을 제거하면:

따라서 클라이언트에서 보내는 문자열 데이터를 자동으로 숫자로 변환하기 위해 Transform 데코레이터가 필요합니다.