Search

@Decorator

데코레이터란?

NestJS에서 데코레이터는 메타데이터를 정의하고 클래스, 메서드, 속성 및 매개변수의 동작을 확장하는데 사용된다.
**메타데이터 : 데이터가 가지고 있는 정보(설명, 구조, 속성 등)을 추가적으로 제공하는 데이터
ex) 사진 파일(IMG_001.jpg)의 메타데이터
촬영 날짜: 2025-02-07
해상도: 1920x1080
카메라 모델: Canon EOS 5D

데코레이터의 종류

1.
클래스 데코레이터
클라스 자체에 메타데이터를 추가하는데 사용된다.
@Controller('/users') export class UserController { @Get() getUsers() { return [{ id: 1, name: 'John Doe' }]; } }
TypeScript
복사
위 코드를 실행하면 다음과 같은 과정을 거친다.
a.
UserController 클래스에 @Controller(’/users’) 메타데이터 저장
b.
getUsers() 메서드에 @Get()을 적용하여 라우팅 정보 저장
@Controller의 내부 동작
export function Controller(prefix?: string): ClassDecorator { return (target) => { Reflect.defineMetadata('path', prefix, target); // 컨트롤러가 처리할 URL('/user')을 메타데이터로 저장 Reflect.defineMetadata('isController', true, target); // NestJS가 이 클래스를 Controller로 인식할 수 있게 설정 }; }
TypeScript
복사
NestJS는 위 메타데이터를 바탕으로 HTTP 라우팅을 자동 설정한다.
@Get 같은 HTTP 메서드 데코레이터도 위와 같은 방식으로 getUsers() 메서드가 GET ‘/users’ 요청을 처리하도록 라우팅을 한다.
export function Get(path?: string): MethodDecorator { return (target, key, descriptor) => { Reflect.defineMetadata('method', 'GET', descriptor.value); Reflect.defineMetadata('path', path || '', descriptor.value); }; }
TypeScript
복사