본문 바로가기
개발/nest.js

[nestjs] nestjs : typeorm : configuration 설정

by 아크투어 2023. 8. 18.
반응형

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

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

1. nestjs 프로젝트 생성

# nestjs cli설치
$ npm i -g @nestjs/cli

# 프로젝트생성 - 프로젝트명 직접입력
$ nest new {프로젝트명}
OR
# 프로젝트생성 - 현재 디렉토리에서 생성
$ nest new ./

 

위명령어대로 실행하면 아래와 같이 진행된다. 패키지 관리방식은 npm을 선택하였다.

nestjs 프로젝트생성
nestjs 프로젝트생성

 

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 생성

 

nestjs 폴더구조
nestjs 폴더구조

 

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

 

반응형