이 전에 사용했던 프로젝트에서는 express를 사용했다.
하지만 처음부터 끝까지 모두 내가 원하는대로 자유롭게 구현했던 express와는 달리 nest는 형식을 요구하며 자유도는 낮지만 코드의 양이 많아질수록 express 보다 훨씬 구조적이다.
nest는 typescript를 언어로 채택하고 있다. typescript는 개발 도중에 실수 및 버그를 잡아주기에 에러를 미연에 방지할 수 있다. 그렇기에 개발에 안정적이다.
https://velog.io/@wlduq0150/01-5.-Nest.js-DI-Dependency-Injection
하나의 module이 controller, provider를 포함한다.
이는 서로 연관있는 속성과 기능들을 하나의 모듈로 묶어 놓으며 imports, exports로 모듈간의 상호작용을 한다. 이는 "캡슐화"를 만족한다.
$ npm i -g @nestjs/cli
nest cli로 초기 세팅
$ nest new "project-name"
프로젝트 폴더를 생성한다.
[main.ts]
...
app.enableCors({
origin: true,//여기에 url을 넣어도된다.
credentials: true,
});
...
Cors는 웹 페이지가 다른 도메인의 접근을 막는 보안 아키텍쳐이다. Cors를 활성화해야 클라이언트에서 서버의 요청을 받을 수 있다.
[main.ts]
...
app.useGlobalPipes(new ValidationPipe({
transform: true,
transformOptions: { enableImplicitConversion: true },
whitelist: true,
forbidNonWhitelisted: true,
}));
...
validationPipe 서버에 Request가 들어올때 유효성 검사를 해주는 nest의 내장 라이브러리이다.
transform: request의 payload가 nest의 dto에 맞게 type를 변환 시켜주는 옵션
enableImplicitConversion: string에서 number, boolean, array 등으로 암시적으로 변환시켜주는 기능
whitelist: payload에서 dto에 없는 속성을 제거시켜주는 옵션
forbidNonWhitelisted: dto에 없는 속성을 제거시켜주는 대신 error를 throw해주는 옵션
[config-project.module.ts]
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: `.${process.env.NODE_ENV}.env`,
isGlobal: true,
}),
],
})
export class ConfigProjectModule {}
envFilePath: .env 파일 경로 설정
isGlobal: ConfigModule은 여러 모듈에서 사용해야 하기 때문에 전역으로 설정
[package.json]
...
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:pro": "cross-env NODE_ENV=production nest start --watch"
...
node 환경에서 process.env.NODE_ENV로 불러올 수 있도록 pacakge.json을 수정한다.
[main.ts]
...
const configService = app.get(ConfigService);
const port: number = configService.get("PORT");
await app.listen(port);
...
isGlobal로 설정해두었기에 app.get()으로 불러와 사용할 수 있다.
환경변수는 다양한 개발 환경에서 변하는 설정들을 편하게 미리 저장해두고 사용하며, api-key, id, pw 등 민감한 정보를 저장하기 위해서도 사용된다.
https://docs.nestjs.com - NestJS 공식 문서
https://nomadcoders.co/nestjs-fundamentals - 노마드코더 nest 무료 강의