YunDaeHyeon
← Lab

NestJS의 파이프(Pipes)란?

스터디2024.08.07
  • NestJS

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 을 구현하여 정의하고, 전역(글로벌), 컨트롤러 , 메소드 혹은 핸들러 수준에서 적용할 수 있다.