KSCOLD LogoKSCOLD
Blog
Feed
Product
Admin Night
Vault
Guestbook
Info

Vault 목록

@UsePipes()

연결된 노트와 함께 읽기

@UsePipes()

2026년 5월 17일

Controller-level Pipe

컨트롤러 레벨에서 @UsePipes() 데코레이터(Decorator)를 이용하면 현재 컨트롤러에 정의되어 있는 모든 핸들러에 pipe가 적용된다.

TypeScript

Handler-level Pipe

핸들러 레벨에서 @UesPipes() 데코레이터를 이용하여 사용할 수 있다. 핸들러 레벨에서 pipe를 사용하게 될 경우 핸들러의 모든 파라미터에 적용이 된다.

TypeScript

parameter-level pipe

파라미터 레벨의 pipe이기 대문에 특정한 파라미테에만 적용이 되는pipe이다.

TypeScript

Global-level pipe

애플리케이션이 bootstrap되는 main.ts에서 설정이 가능하다.

TypeScript

위와 같이 app.useGlobalPipes에 ValidationPipe를 생성하여 인스턴스를 넣어주면 된다.

하지만 위의 code의 경우 의존성 주입관점에서 main.ts에 직접 선언해주기 때문에 code가 유연하지 않다. 추 후 GlobalPipes가 변경될 경우 main.ts를 수정해주어야 한다.

NestJs에서는 위와 같은 방법 말고 root Module에서 Custom Provider를 이용하여 GlobalPipes를 등록할 수 있는 방법을 제공해준다.

TypeScript

이렇게 CustomProvider로 정의를 해주게 되면 GlobalPipes로 사용할 pipe가 변경되더라도 유연하게 대채할 수 있게 된다.

Synapse Map Insight

@Controller('cats') @UsePipes(ValidationPipe) export class CatsController { //... }
@Post() @UsePipes(ValidationPipe) saveCatInfo(@Body() req: CreateCatDto) { //... }
@Get('/:id') findById(@Param('id', ParseIntPipe) id: number) { //... }
@filename(main.ts) async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe()) await app.listen(3000); } bootstrap();
@filename(app.module.ts) @Module({ imports: [CatsModule], controllers: [], providers: [ { provide: APP_PIPE, useClass: ValidationPipe } ], }) export class AppModule { }