본문 바로가기
카테고리 없음

데코레이터

by 개발자doc 2024. 7. 6.
목차
1. 데코레이터란?
2. 주요 데코레이터
1. 데코레이터란?
  • 클래스, 메소드, 접근자 프로퍼티, 매개변수 등에 메타데이터를 추가하여 특정 기능을 제공하는 특별한 선언문

NestJS를 시작하면서 "@" 기호를 사용하는 데코레이터라는 것을  처음 접했을 것이다. 물론 JAVA를 사용하는 프레임워크 중 하나인 Spring에서 어노테이션이라는 같은 문법이 있기에 JAVA사용자는 이미 보았을 수 있다. 

데코레이터는 목적에 따라 다양한 것이 있으며 주로 메타 프로그래밍을 통해 코드의 구조와 동작을 정의하고 관리하는데 사용된다.

 

2. 주요 데코레이터

1 ) Controller

▶ 선언된 클래스가 클래스임을 선언하며 HTTP요청을 처리하는 앤드 포인트를 정의한다.

import {Controller, Get} from '@nestjs/common'

@Controller("user")
class UserController{
    @Get()
    find(){
         return ""
    }
}

2 ) Get, Post, Put, Delete등

▶ HTTP요청에 포함된 메서드를 통해 지정한 메서드를 호출한다.(라우팅)

import {Controller, Get,Post,Put} from '@nestjs/common'

@Controller("user")
class UserController{
    @Get()
    find(){
         return ""
    }
    
    // /user/create로 요청시 호출
    @Post("create")
    createUser(데이터){
        // 유저 추가
    }
    
    @Put
    updateUesr(데이터){
        // 유저정보 변경
    }
    
    @Delete
    deleteUser(데이터){
        // 유저 삭제
    }
}

 

3 ) Injectable

클래스가 의존성 주입 시스템에 의해 관리되는 프로바이더임을 선언한다.

import {Injectable} from "@nestjs/common";

@Injectable()
export class UserService{
    getUser(){
        // 유저정보 반환
    }
}

 

4 ) module

해당 클래스가 모듈임을 선언한다.

애플리케이션의 구조를 정의하고 모듈간의 의존성을 관리한다.

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}

 

5 ) Param, Query, Body, Headers

▶ 매서드의 매개변수에서 특정 부분을 추출한다.

  • Param : URL경로의 파라미터를 추출한다.
  • Query : URL에 포함된 쿼리문자열의 값을 추출한다.
  • Body  : 요청의 본문의 값을 추출한다.
  • Headers : HTTP 헤더의 값을 추출한다.
import {Controller, Get, Post, Query} from "@nestjs/common";

@Controller("user")
export class PostController{
    @Get("/:index")
    // Param의 인자값은 요청시 키값
    findIndex(@Param("index") index:number){
        // 인덱스를 통한 service에 데이터 요청
    }
    @Post("create")
    // Body의 인자값은 클라이언트에서 요청시 정의한 데이터의 키으로 구조분해할당과 같다.
    // 지정하지 않으면 전체 본문을 들고 온다.
    createPost(@Body("title") title:string,@Body("content") content:string){
        // 데이터를 저장하는 서비스로직 호출
    }
}

 

이 외에도 데이터 유효성 검증 및 권한부여 등 여러 데코레이터가 있다.