IT/Nest.js

Nest.js ValidationPipe 사용하여 유효성 검증 강화하기

1am_wish 2023. 4. 2. 21:39
728x90
반응형

ValidationPipe는 Application 수준에서 바인딩해서 모든 엔드포인트가 잘못된 데이터를 수신하지 않도록 보호하는 역할을 한다. 다음과 같이 ValidationPipe를 적용할 수 있다!

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(
    // 유효성 검사를 위한 파이프
    new ValidationPipe({
      whitelist: true,
      forbidNonWhitelisted: true,
      transform: true,
    }),
  );
  await app.listen(3000);
}
bootstrap();
  • whitelist : class-validator의 유효성 검사 데코레이터가 없는 애트리뷰트(속성)는 제거한다. 즉, 무관한, 수집하지 않을 데이터가 수신되면, 무시한다.
  • forbidNonWhitelisted : 데코레이터가 없는 애트리뷰트가 수신되면 에러를 내뱉는다. whitelist에서 보안을 강화한 옵션으로, whitelist만 설정되어있을 경우 데코레이터가 없는 애트리뷰트가 수신되면 에러를 내지 않고 무시하지만, 이 옵션은 에러를 발생시킨다는 차이점이 있다.
    • whitelist 가 true로 적용되어있어야 작동한다.
  • transform : DTO 클래스에 따라 유형이 지정된 객체로 자동으로 변환된다. 기본적으로 애트리뷰트는 string으로 수집되고 옵션이 없으면 string으로 가져오지만, transform 을 활성화 하면 number애트리뷰트는 number로 변환하여 수집한다.

disableErrorMessage 와 같이 에러 메시지 명시를 하지 않는 옵션도 있는데, 자세한 에러 메시지를 비활성화해야하는 일부 프로덕션 서비스에서 사용될 수 있다!

여러 옵션을 적용하여 보안과 편의를 증진시킬 수 있다는 점이 흥미로운 ValidationPipe다!

728x90
반응형