카테고리 없음

패스트캠퍼스 환급챌린지 25일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기

Laftel 2025. 3. 29. 22:39
반응형

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


벨리데이션 파이프 주요 옵션 알아보기..

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

반응형