NestJS의 데코레이터(Decorator)

Daehyeon Yun·2024년 8월 7일

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) 를 설정하여 예외처리를 수행한다.

profile
열심히 살아야지

0개의 댓글