#1 Nest 와 데코레이터(Decorator)
Nest Js 공식 설명
Nest(NestJS)는 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크입니다. 이 프레임워크는 프로그레시브 자바스크립트를 사용하며, 타입스크립트로 구축되어 완벽하게 지원하면서도 개발자가 순수 자바스크립트로 코딩할 수 있도록 하며, OOP(객체 지향 프로그래밍), FP(함수형 프로그래밍), FRP(함수형 반응형 프로그래밍)의 요소를 결합합니다. 내부적으로 Nest는 Express(기본값)와 같은 강력한 HTTP 서버 프레임워크를 사용하며 선택적으로 Fastify도 사용하도록 구성할 수 있습니다! Nest는 이러한 일반적인 Node.js 프레임워크(Express/Fastify보다 추상화 수준이 더 높지만 API도 개발자에게 직접 노출합니다. 따라서 개발자는 기본 플랫폼에서 사용할 수 있는 수많은 타사 모듈을 자유롭게 사용할 수 있습니다.
nest js cli를 설치 해서 프로젝트를 만들고 사용 할 수 있다.
$ npm i -g @nestjs/cli
$ nest new project-name
데코레이터(Decorator)
ES2016 데코레이터는 함수를 반환하고 대상, 이름 및 속성 설명자를 인수로 받을 수 있는 표현식입니다. 데코레이터 앞에 @ 문자를 붙이고 데코레이터를 적용하려는 대상의 맨 위에 배치하면 됩니다. 데코레이터는 클래스, 메서드 또는 프로퍼티에 대해 정의할 수 있습니다.
자바스크립트의 오브젝트 프로퍼티에 대해서 알고 있으면 원리에 대하여 좀더 쉽게 접근 할 수있다.
참고 설명:
https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841
Nest에서 커스텀 route 데코레이터 (Custom route decorators) 예시 1 - Param
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const User = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user;
},
);
@Get()
async findOne(@User() user: UserEntity) {
console.log(user);
}
출처:
- https://docs.nestjs.com/
- https://www.typescriptlang.org/ko/docs/handbook/decorators.html
- https://docs.nestjs.com/custom-decorators