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




벨리데이션 파이프 주요 옵션 알아보기..
whitelist: true
의미:
- DTO에 정의된 속성만 허용합니다.
- 정의되지 않은 속성은 자동으로 제거됩니다.
사용 이유:
- 클라이언트가 DTO에 없는 쓸모없는 필드를 보낼 경우, 그걸 서버에서 무시하도록 처리
- 예: 아래 요청에서 role은 제거됨
{
"username": "kim",
"password": "1234",
"role": "admin"
}
forbidNonWhitelisted: true
의미:
- whitelist와 함께 사용되며,
- 허용되지 않은 속성이 있으면 요청 자체를 거부합니다 (예외 발생)
사용 이유:
- 이상한 속성 또는 의도치 않은 값이 들어오는 것을 완전히 차단
- 보안상 중요 (예: 프론트에서 admin: true를 몰래 보내는 경우)
transform: true
의미:
- 요청(JSON)을 DTO 클래스 인스턴스로 자동 변환
- 타입스크립트 클래스 기반 유효성 검사를 가능하게 함
변경한 이유:
- class-validator는 클래스 인스턴스에서만 작동
- 따라서 요청 본문을 자동으로 DTO 인스턴스로 바꾸어야 검사가 정상적으로 동작함
transformOptions.enableImplicitConversion: true
의미:
- DTO 속성에 타입만 지정되어 있으면, @Type(() => Number) 같은 데코레이터 없이도 자동 형변환을 수행
변경한 이유:
- 아래처럼 타입만 명시해도 변환이 적용됨
class QueryDto {
limit: number; // 문자열로 들어와도 자동으로 숫자로 변환
}
- 개발자가 @Type(() => Number)를 일일이 쓰지 않아도 돼서 생산성이 향상됨
클래스 벨리데이터(class-validator) 학습하며 느낀 점
1. 명확한 데이터 구조와 안정성 확보의 중요성을 체감했다
NestJS에서 DTO(Data Transfer Object)와 함께 class-validator를 적용해보니, API 요청 데이터가 예상한 구조를 따르고 있는지를 자동으로 검증할 수 있었다.
이를 통해 불필요한 if-check나 예외 처리를 줄일 수 있고, 코드가 훨씬 깔끔하고 견고해지는 경험을 할 수 있었다.
2. 서버 입장에서 "검증 책임"을 명확히 분리할 수 있어 좋았다
기존에는 프론트엔드에서 유효성 검사를 어느 정도 해줘야 했고, 백엔드는 종종 수동으로 예외를 처리해야 했다.
하지만 class-validator를 통해 서버 측에서도 확실하게 데이터 유효성을 책임질 수 있어, 보안적인 면이나 예외 처리 측면에서 더욱 믿음이 갔다.
3. 데코레이터 기반의 선언형 프로그래밍이 직관적이었다
@IsString(), @IsOptional(), @MinLength()처럼 자연어에 가까운 방식으로 조건을 선언할 수 있어서 가독성이 좋고 유지보수가 쉬웠다.
특히 여러 조건을 조합하거나 커스텀 validator를 만드는 과정에서 검증 로직이 명확히 분리된다는 점이 인상적이었다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완https://bit.ly/4hTSJNB
반응형