프로필

프로필 사진
Popomon
Frontend Developer
(2020/12 ~)

    카테고리

    포스트

    [Node/Rest API] 환경변수 파일 만들기

    2020. 11. 10. 02:18

    꿈가게: To Do List - iOS

    꿈가게: To Do List - Android

    환경변수 파일 만들기(.env)

    다음과 같이 데이터베이스 접속이나 OAuth2 인증에 필요한 변수들을 정의하여 따로 파일로 보관할 수 있습니다.

     

    SSO_DATABASE_URL=...
    
    SSO_GITHUB_CLIENT_ID=...
    SSO_GITHUB_CLIENT_SECRET=...
    SSO_GITHUB_CODE_REDIRECT_URL=...
    SSO_GITHUB_TOKEN_REDIRECT_URL=...
    
    SSO_GITLAB_CLIENT_ID=...
    SSO_GITLAB_CLIENT_SECRET=...
    SSO_GITLAB_CODE_REDIRECT_URL=...
    SSO_GITLAB_TOKEN_REDIRECT_URL=...
    
    SSO_JWT_SECRET=...
    SSO_COOKIE_SECRET=...

     


    환경변수를 로딩하여 모듈 파일 만들기(src/config.js)

    다음과 같이 dotenv 라이브러리를 사용하여 .env 파일에 있는 값들을 불러올 수 있습니다. 원하는 object 형태로 정리하여 사용할 수 있습니다.

     

    const dotenv = require("dotenv");
    dotenv.config();
    
    const config = {
      port: process.env.PORT || 3001,
      db: {
        url: process.env.SSO_DATABASE_URL
      },
      sso: {
        github: {
          clientId: process.env.SSO_GITHUB_CLIENT_ID,
          clientSecret: process.env.SSO_GITHUB_CLIENT_SECRET,
          codeRedirectUrl: process.env.SSO_GITHUB_CODE_REDIRECT_URL,
          tokenRedirectUrl:process.env.SSO_GITHUB_TOKEN_REDIRECT_URL,
        },
        gitlab: {
          clientId: process.env.SSO_GITLAB_CLIENT_ID,
          clientSecret: process.env.SSO_GITLAB_CLIENT_SECRET,
          codeRedirectUrl: process.env.SSO_GITLAB_CODE_REDIRECT_URL,
          tokenRedirectUrl:process.env.SSO_GITLAB_TOKEN_REDIRECT_URL,
        },
      },
      auth: {
        jwtSecret:process.env.SSO_JWT_SECRET,
        cookieSecret:process.env.SSO_COOKIE_SECRET,
      }
    }
    
    module.exports = config;

     

    사용하는 방법은 다음과 같습니다.

     

    const mongoose = require("mongoose");
    const config = require("./config");
    
    const connect = async () => {
      try {
        let connection = await mongoose.connect(config.db.url, {
          useUnifiedTopology: true,
          useNewUrlParser: true,
          useFindAndModify: false,
          useCreateIndex: true
        });
    
        console.log("MongoDB connected");
        return connection;
      } catch (err) {
        console.log(err);
        console.log(`Connection failed with config ${config.db.url}`);
        process.exit(1);
      }
    };
    
    module.exports = connect;