NestJS의 파이프(Pipes)란?

Daehyeon Yun·2024년 8월 7일

NestJS 에서 파이프(Pipes)요청 데이터를 변환하거나 검증하는데 사용된다. 요청이 처리되기 전에 파이프를 사용하여 데이터 형식을 변경 하거나, 데이터의 유효성을 검사 하여 유효하지 않은 데이터일 경우 예외를 발생시킬 수 있다.

💡 파이프(Pipes) 의 특징

  • 데이터 변환 : 입력 데이터를 원하는 형식으로 변경할 수 있다. (예시 : 문자열을 숫자로 변환)
  • 유효성 검사 : 요청 데이터가 특정 조건을 만족하는지 확인한다. 조건을 만족하지 않으면 예외를 발생시켜 요청을 중지할 수 있다.
  • 자동 적용 : 파이프(Pipes)글로벌 , 컨트롤러, 또는 특정 핸들러에서 파이프를 자동 으로 적용할 수 있다.

💡 파이프(Pipes) 사용법

🚩 파이프(Pipes) 정의하기

PipeTransform 이라는 인터페이스를 구현하여 인터셉터를 정의한다.

/*  Injectable : NestJS의 DI를 사용하기 위함
 *  PipeTransform : 파이프를 정의하기위한 인터페이스. transform을 포함한다.
 *  ArgumentMetadata : 메소드의 파라미터 정보를 포함하며, 메서드로 전달되는 인자의 메타데이터를 나타냄
 *  BadRequestException : 유효성 검사 실패시 던질 예외. HTTP 에러코드 400을 반환
 */
import { Injectable, PipeTransform, ArgumentMetadata, BadRequestException} from '@nestjs/common';

@Injectable() // 의존성 주입 가능 클래스 지정
export class ParseIntPipe implements PipeTransform<string, number>{
	// transform 메소드 구현
	transform(value: string, metadata: ArgumentMetadata): number{
		const val = parseInt(value, 10); // 입력 값을 정수로 변환, 10진수 사용
		if(isNaN(val)){ // '숫자'가 아닌 경우
			throw new BadRequestException('검증에 실패했습니다!'); // 예외처리
		}
		return val; // 변환된 정수 반환
	}
}

🚩 파이프(Pipes) 적용하기

→ 파이프를 적용하고자 하는 컨트롤러 혹은 특정 핸들러 매개변수@UsePipes 데코레이터를 사용하여 적용하거나, 매개변수에 직접 적용 할 수 있다.

import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';

@Controller('dogs')
export class DogsController{
	@Get(':id')
	findOne(@Param('id', parseIntPipe) id: number){
		// 매개변수로 넘어온 id는 ParseIntPipe에 의해 number로 변환
		return `아이디가 ${id}인 강아지를 반환하였습니다!`;
	}
}

🤔 글로벌 파이프를 적용하기 위해선?

글로벌 파이프(Global Pipes) 혹은 애플리케이션 전반에 걸쳐 파이프를 적용하려면 main.ts 에서 설정하한다.

// main.ts
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()); // 글로벌 파이프 적용
  await app.listen(3000);
}
bootstrap();

⭐ 요약!

NestJS 에서 파이프(Pipes)요청 데이터를 변환하고 검증 하는데 사용한다.

파이프(Pipes)데이터 변환 , 유효성 검사 , 예외 처리 등을 수행한다.

→ 사용법 : PipeTransform 을 구현하여 정의하고, 전역(글로벌), 컨트롤러 , 메소드 혹은 핸들러 수준에서 적용할 수 있다.


profile
열심히 살아야지

0개의 댓글