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