Post

Nest4 - 데코레이터(Decorator)

NestJs 데코레이터

NestJS는 클래스, 메서드, 속성 등에 메타데이터를 추가하거나 기능을 주입하는데 사용할 수 있도록 데코레이터를 제공한다. 스프링의 Annotation과 동일한 역할을 한다고 보면 된다.

주요 데코레이터

여러가지 데코레이터를 제공하지만 그 중에서도 기본적으로 or 필수적으로 사용되는 데코레이터는 아래와 같다.

@Module

@Module 데코레이터는 NestJS 애플리케이션의 모듈을 정의하며, 모듈의 구조 및 기능 별로 클래스를 그룹화한다.

1
2
3
4
5
@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

@Controller

@Controller 데코레이터는 HTTP 요청을 처리하는 컨트롤러 클래스를 정의한다.

1
2
3
4
@Controller('users')
export class UserController {
  // ...
}

@Injectable

@Injectable 데코레이터는 의존성 주입 가능한 클래스를 정의한다.

1
2
3
4
@Injectable()
export class UserService {
  // ...
}

@Get, @Post, @Put, @Delete, @Patch

컨트롤러 메서드에 사용되며, HTTP 요청 핸들러를 통해 각각 GET, POST, PUT, DELETE HTTP 메서드에 매핑시키는 역할을 한다.

1
2
3
4
5
6
7
@Controller('users')
export class UserController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }
}

@Param, @Query, @Body

HTTP의 다양한 데이터 구조를 추출하기 위해 사용되는 데코레이터이다.

@Param 데코레이터는 경로 매개변수(parameter)를 추출하는데 사용된다. 경로 매개변수는 URL 경로에 포함된 변수들을 의미한다.

1
2
3
4
@Get(':id')
findOne(@Param('id') id: string) {
  // ...
}

@Query 데코레이터는 쿼리 매개변수를 추출하는데 사용된다. 쿼리 매개변수는 URL의 ? 뒤에 오는 변수들을 의미한다.

1
2
3
4
@Get('search')
search(@Query('name') name: string) {
  // ...
}

@Body 데코레이터는 요청의 본문(body)에서 데이터를 추출하는데 사용된다. 주로 POST, PUT, PATCH 메서드에서 사용된다.

1
2
3
4
@Post()
create(@Body() createUserDto: CreateUserDto) {
  // ...
}
This post is licensed under CC BY 4.0 by the author.