Dandy Now!
  • [개발자의품격][부트캠프][1기][31차시] Node.js #4 | dotenv로 민감정보 깃허브에 푸시되지 않게 | cross-env로 개발 DB와 운영 DB를 분리 관리
    2022년 04월 08일 16시 54분 57초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    | dotenv

    아래 코드는 민감정보를 포함하고 있어 깃허브에 올라가면 안 된다. dotenv 모듈을 이용하면 민감정보를 감출 수 있다.

    // mysql/index.js
    ...
    const pool = mysql.createPool({
      host: "localhost",
      port: 3306,
      user: "dev",
      password: "1234",
      database: "dev",
      connectionLimit: 10,
    });
    ...

     

    dotenv 모듈 설치

    npm i dotenv

     

    .env 파일에 민감 정보들이 있다. .gitignore에 이 파일을 포함시키면 된다.

    // mysql/.env
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USERNAME=dev
    MYSQL_PASSWORD=1234
    MYSQL_DB=dev
    MYSQL_LIMIT=10

     

    // mysql/index.js
    ...
    const pool = mysql.createPool({
      host: process.env.MYSQL_HOST,
      port: process.env.MYSQL_PORT,
      user: process.env.MYSQL_USERNAME,
      password: process.env.MYSQL_PASSWORD,
      database: process.env.MYSQL_DB,
      connectionLimit: process.env.MYSQL_LIMIT,
    });
    ...

     

    // 11_app_mysql.js
    ...
    require("dotenv").config({ path: "mysql/.env" }); // 반드시 "const mysql = require("./mysql");" 코드 위에 작성해야 한다.
    const mysql = require("./mysql");

     


     

    | cross-env

    실무에서는 app.js 파일 하나로 서버를 생성하여 "npm run..." 명령어로 실행한다.

    실무에서 개발한 서버를 운영서버에 이관하면 개발 시 사용하는 DB 계정과 운영시 사용하는 DB 계정이 다르다. cross-env로 환경을 간편하게 변경할 수 있다.

     

    cross-env 모듈 설치(https://www.npmjs.com/package/cross-env)    ※ 윈도우 환경에서는 이 모듈을 설치해야 한다.

    npm install --save-dev cross-env

     

    // package.json
    {
    ...
      "scripts": {
        "test": "cross-env NODE_ENV=test node 11_app_mysql.js",
        "prod": "cross-env NODE_ENV=prod node 11_app_mysql.js"
      },
    ...

     

    // 11_app_mysql.js
    ...
    console.log(app.get("env"));
    ...

     

     

    [그림 1] cross-env 이용

     

    위에서 cross-env가 잘 기능하는 것을 확인했다. 실무에서는 다음과 같이 설정하여 DB접속 환경을 유연한다.

    아래와 같이 두개의 DB접속 정보가 있다. (실무에서는 이 보다 더 많을 수도 있다.)

    // mysql/.envtest
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USERNAME=dev
    MYSQL_PASSWORD=1234
    MYSQL_DB=dev
    MYSQL_LIMIT=10

     

    // mysql/.envprod
    MYSQL_HOST=127.0.12.32
    MYSQL_PORT=3306
    MYSQL_USERNAME=admin
    MYSQL_PASSWORD=admin1234
    MYSQL_DB=dev
    MYSQL_LIMIT=10

     

    "require("dotenv")..." 부분을 다음과 같이 수정한다.

    // 11_app_mysql.js
    ...
    require("dotenv").config({ path: `mysql/.env.${app.get("env")}` }); // 반드시 "const mysql = require("./mysql");" 코드 위에 작성해야 한다.
    ...

     

    728x90
    반응형
    댓글