반응형
nestjs config 설정
"nestjs configuration yaml 사용"
nestjs configuration
nestjs의 configuration는 쉽게말해서 개발환경과 운영환경 분리를 위한 것이다.
흔히 Spring에서 profile 서버스 같은것이다. local, dev, prod 처럼 환경을 분리한다.
nestjs의 configuration 하는방법은 .env방식 또는 yaml을 사용한다.
본글에서는 yaml을 사용해서 포스팅 하겠다.
아래는 공식 document 사이트이니 추가적인 정보가 필요하면 참고하면된다.
https://docs.nestjs.com/techniques/configuration
1. nestjs 프로젝트 생성
# nestjs cli설치
$ npm i -g @nestjs/cli
# 프로젝트생성 - 프로젝트명 직접입력
$ nest new {프로젝트명}
OR
# 프로젝트생성 - 현재 디렉토리에서 생성
$ nest new ./
위명령어대로 실행하면 아래와 같이 진행된다. 패키지 관리방식은 npm을 선택하였다.
2. nestjs configuration 패키지 설치
# yaml 설치
$ npm i js-yaml
$ npm i -D @types/js-yaml
# config 설치
$ npm i --save @nestjs/config
# cross-env 설치
# cross-env : os에 종속되지 않고, 플랫폼 표준화를 위한 라이브러리
$ npm i --save-dev cross-env
3. 불필요한 샘플파일 삭제
app.controller.spec.ts
app.controller.ts
app.service.ts
4. nestjs폴더구조
생성해야할 파일은 아래와같다.
| src > config > profile > profile.config.ts 생성
| src > config > dev.yaml 생성
| src > config > prod.yaml 생성
5. nestjs 예제소스
profile.config.ts
import { readFileSync } from 'fs';
import * as yaml from 'js-yaml';
import { join } from 'path';
const YAML_CONFIG_PROD = '../prod.yaml';
const YAML_CONFIG_DEV = '../dev.yaml';
export default () => {
return yaml.load(
process.env.NODE_ENV === 'prod'
? readFileSync(join(__dirname, YAML_CONFIG_PROD), 'utf8')
: readFileSync(join(__dirname, YAML_CONFIG_DEV), 'utf8'),
) as Record<string, any>;
};
dev.yaml
server:
port: 3001
url: 'localhost'
prod.yaml
server:
port: 3000
url: 'localhost'
app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import configuration from './config/profile/profile.config';
@Module({
imports: [ConfigModule.forRoot({ load: [configuration] })],
})
export class AppModule {}
main.ts
import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
async function bootstrap() {
const app: NestExpressApplication = await NestFactory.create(AppModule);
const yamlConfig: ConfigService = app.get(ConfigService);
const port: number = yamlConfig.get<number>('server.port');
await app.listen(port, () => {
Logger.log(`Application listening on port ${port}`);
});
}
bootstrap();
nest-cli.json
# assets 부분을 아래처럼 변경한다.
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"assets": [
{ "include": "**/*.yaml", "watchAssets": true, "outDir": "./dist" }
]
}
}
package.json
# start부분을 아래처럼 변경한다.
"scripts": {
...
"start": "cross-env NODE_ENV=prod nest start",
"start:dev": "cross-env NODE_ENV=dev nest start --watch",
...
},
6. nestjs 실행하기
터미널에서 아래명령어를 수행한다.
dev로 실행시 3001번 포트로 실행되고, prod로 실행시 3000번 포트로 실행된다.
# dev인경우
$ npm run start:dev
# prod인경우
$ npm run start
반응형
'개발 > nest.js' 카테고리의 다른 글
[nestjs] nestjs : middleware logger 사용하기 (0) | 2023.08.22 |
---|---|
[nestjs] nestjs : typeorm : 데이터베이스 연동 (0) | 2023.08.21 |
[nvm] node : nvm : 설치 및 여러버전관리 (윈도우,리눅스) (0) | 2023.08.18 |
nestjs + typeorm backend JWT 로그인 / 소스포함 (0) | 2023.03.30 |
nestjs + typeorm backend 회원가입 / 소스포함 (10) (0) | 2023.03.29 |