Skip to content

파이프 (Pipes: 검증·변환)

라우트 핸들러에 값이 도달하기 전에 데이터를 검증하거나 변환하는 역할을 NestJS 의 파이프(Pipe) 가 담당합니다. 데이터스케쳐스 실무 관점에서 정리합니다.

파이프란

  • 파이프는 컨트롤러 메서드가 호출되기 직전에 실행되어 두 가지를 합니다.
  • 변환(transformation): 입력을 원하는 타입으로 바꾼다 (예: 문자열 "42"Number).
  • 검증(validation): 입력이 유효하지 않으면 예외를 던져 거부한다.
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) {
  return this.service.findOne(id);
}
  • 위 예의 ParseIntPipeid 를 정수로 변환하고, 실패하면 400 Bad Request 를 반환합니다.

기본 제공 파이프

  • ValidationPipe: DTO(클래스)의 데코레이터 규칙 기반 검증.
  • ParseIntPipe / ParseFloatPipe / ParseBoolPipe: 타입 변환.
  • ParseUUIDPipe: UUID 형식 검증.
  • DefaultValuePipe: 값이 없을 때 기본값 주입.
@Post()
create(@Body(new ValidationPipe()) dto: CreateUserDto) {
  return this.service.create(dto);
}

파이프 바인딩 위치 (범위)

  • 메서드 레벨: 특정 핸들러에만 적용.
  • 컨트롤러 레벨: 해당 컨트롤러 전체에 적용.
  • 전역(글로벌): 앱 전체에 적용.
// 전역 ValidationPipe
app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true }));
  • whitelist: true 는 DTO 에 없는 속성은 자동 제거, transform: true 는 페이로드를 DTO 인스턴스로 변환합니다.

데이터스케쳐스 실무 관점

  • 수집 데이터 검증: D-SKET Events 나 웹훅 수신 시 잘못된 필드가 들어오는 것을 파이프로 차단해, DB 에 오염 데이터가 쌓이는 것을 막습니다.
  • 전역 검증 기본화: 새 엔드포인트마다 검증을 깜빡하지 않도록 전역 ValidationPipe 를 켜두고, 예외만 DTO 로 명시.

확인 필요

  • 버전별 파이프 옵션(transform, whitelist)과 예외 형식은 NestJS 버전에 따라 달라질 수 있으므로 사용 버전 공식 문서를 재확인하세요. (확인 필요)

더 알아보기