언어·프레임워크/NestJS

[Nest.js] 여러 환경 변수 설정 및 오류 해결

DandyNow 2024. 11. 14. 11:00
728x90
반응형

1. 여러 환경 변수 설정

Nest.js에서 .env 뿐만 아니라 .env.local도 사용하고자 하였다. 기존 프로젝트에서는 .env만 사용하고 있었고 MySQL과 TypeOrm을  사용하고 있었다. Nest.js에서 여러 .env 설정 방법은 아래와 같다.

1-1. cross-env 패키지 설치

npm install cross-env
npm install @nestjs/config dotenv

 

1-2. package.json 스크립트 수정

"scripts": {
    "start:local": "cross-env NODE_ENV=local nest start --watch",
}

 

1-3. app.module.ts에 아래 코드 추가

import * as dotenv from 'dotenv';

// 명령어에 따라 환경 변수 파일 로드
if (process.env.NODE_ENV === 'local') {
  console.log('.env.local');
  dotenv.config({ path: '.env.local' });
} else {
  dotenv.config();
}

 

1-4. 프로젝트 실행

npm run start:local

 

2. 오류 해결

2-1. MySQL 서버 인증 모드 오류

[TypeOrmModule] Unable to connect to the database. Retrying (1)... Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

MySQL 서버의 인증 모드가 mysql_native_password 대신 caching_sha2_password로 설정되어 있을 때 자주 발생한다. 이 문제를 해결하려면 MySQL 사용자 계정의 인증 모드를 mysql_native_password로 변경하거나, 클라이언트 드라이버를 업그레이드하여 최신 인증 방식을 지원하도록 해야 한다. 나의 경우 클라이언트 드라이버를 mysql에서 mysql2로 업그레이드하여 해결하였다(기존 mysql은 uninstall 진행).

npm install mysql2@latest
npm uninstall mysql

 

2-2. 타임존 설정 오류

Ignoring invalid timezone passed to Connection: UTC. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection

mysql2에서는 타임존 'UTC'의 경우 'Z' 또는 '+00:00'으로 설정해야한다.  따라서 기존 'UTC'에서 'Z'로 변경하여 해결하였다.

TypeOrmModule.forRoot({
  type: 'mysql',
  host: process.env.DB_HOST,
  port: 3306,
  username: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
  timezone: 'Z',  // 또는 '+00:00'
  // ... other options
});
728x90
반응형