← Lab
💡
💡
NestJS의 데코레이터(Decorator)
스터디2024.08.07
- NestJS
Reference
📎 https://velog.io/@cocorig/NestJS-데코레이터-개념과-예시-Services-NotFoundException 📎 https://nomadcoders.co/nestjs-fundamentals 📎 https://docs.nestjs.com/
💡 NestJS 의 데코레이터(Decorator) 란?

NestJS의 데코레이터는 클래스, 메소드, 파라미터 등에메타데이터를 부착하여 특정 동작 혹은 로직을 정의하는 기능을 의미한다. 이를 통하여라우팅,요청과 응답 처리,데이터 변환등을 간결하게 설정할 수 있으며 대표적으로@Controller,@Get,@Query등이 있다.
💡 NestJS 에서 자주 쓰이는 데코레이터 및 개념
NestJS에 존재하는 데코레이터는 크게클래스 레벨,메소드 레벨,파라미터 레벨로 나뉜다. 이는 메타데이터가 부착되는 위치를 의미한다.
👍 클래스 레벨 데코레이터(Class Level Decorator)
→ 데코레이터가 클래스 에 사용되는 것을 의미한다.
→ 대표적으로 @Controller 데코레이터가 존재한다.
@Controller:클래스를컨트롤러(Controller)로 정의하는 것을 말한다. 해당 컨트롤러는 특정 라우트 경로를 처리(엔드포인터 처리)하는 데 사용한다.
@Controller('dogs')
export class DogsController {}
👍 메소드 레벨 데코레이터(Method Level Decorator)
→ 데코레이터가 메서드 에서 사용되는 것을 의미한다.
→ 대표적으로 @Get, @Post , @Put , @Delete 등이 있다.
→ 메소드 레벨 데코레이터는 주로 HTTP 요청 을 처리하기 위한 메소드에 매핑된다.
@Controller('dogs')
export class DogController{
@Get()
findAll(){ }
}
👍 파라미터 레벨 데코레이터(Parameter Level Decorator)
→ 데코레이터가 파라미터 에서 사용되는 것을 의미한다.
→ 대표적으로 @Query, @Param , @Body, @Req, @Res 등이 있다.
@Query: 쿼리 파라미터를 메소드 파라미터에 바인딩한다.@Param:URL 매개변수를 메소드 파라미터에 바인딩 한다.@Body: 요청받은본문(Body)를 메소드 파라미터에 바인딩한다.@Req,@Res: 요청 혹은 응답 객체를 메소드 파라미터에 바인딩한다.
@Controller('dogs')
export class DogsController{
@Get()
findAll(@Qeury('name') name : string){
return `강아지의 이름은 ${name}입니다.`;
}
@Get(':id')
findOne(@Param('id') id : string){
return `강아지의 ID는 ${id}입니다.`;
}
@Post()
create(@Body() createDogDto : CreateDogDto){
return `새로운 강아지를 입양했습니다!`;
}
}
🔥 NestJS의 주요 데코레이터 요약 (클래스 , 메소드, 파라미터)
🌟 클래스 레벨 데코레이터
- ⭐
@Controller: 클래스를컨트롤러(Controller)로 정의하여 특정 라우트를 처리한다. - ⭐
@Injectable: 클래스를주입 가능한 서비스(Service)로 정의하여 비즈니스 로직을 처리한다. - ⭐
@Module: 클래스를모듈(Module)로 정의하여NestJS를 구성하는 다양한 모듈들을캡슐화한다. - ⭐
@Catch:예외 필터를 정의하여 특정 예외를 처리한다.
🌟 메소드 레벨 데코레이터
@Get:HTTP GET 요청을 특정 메소드에 매핑한다.@Post:HTTP Post 요청을 특정 메소드에 매핑한다.@Put:HTTP Put 요청을 특정 메소드에 매핑한다.@Delete:HTTP Delete 요청을 특정 메소드에 매핑한다.@Patch:HTTP Patch 요청을 특정 메소드에 매핑한다.
🌟 파라미터 레벨 데코레이터
@Query:쿼리 파라미터를 메소드 파라미터에 바인딩한다.@Param:URL 매개변수를 메소드 파라미터에 바인딩한다.@Body: 클라이언트 요청본문을 메소드 파라미터에 바인딩한다.@Req,@Res: 클라이언트요청, 응답 객체를 메소드 파라미터에 바인딩한다.@Headers:요청 헤더를 메소드 파라미터에 바인딩한다.@Session:세션 객체를 메소드 파라미터에 바인딩한다.@Ip: 클라이언트 요청IP 주소를 메소드 파라미터에 바인딩한다.@HostParam:호스트 매개변수를 메소드 파라미터에 바인딩한다.@UploadedFile:업로드된 파일을 메소드 파라미터에 바인딩한다.@UploadedFiles:여러 업로드된 파일들을 메소드 파라미터에 바인딩한다.- ⭐
@Inject:의존성을 주입(DI)하여 필요한 객체를 인스턴스화한다.
🌟 클래스 + 메소드 레벨 데코레이터
@UseGuards:가드(Guards)를 설정하여 요청을 보호한다.@UseInterceptors:인터셉터(Interceptors)를 설정하여 요청과 응답을 변환하거나 로깅한다.@UsePipes:파이프(Pipes)를 설정하여 데이터 변환 및 유효성 검사를 수행한다.@UseFilters:예외 필터(Exception Filters)를 설정하여 예외처리를 수행한다.