Dandy Now!
  • [Nest.js] 여러 환경 변수 설정 및 오류 해결
    2024년 11월 14일 11시 00분 51초에 업로드 된 글입니다.
    작성자: DandyNow
    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
    반응형
    댓글