본문 바로가기
IT/Frontend

Javascript 환경변수 처리하기 process.env (dotenv)

by DOSGamer 2019. 8. 5.
반응형

.env 환경변수 처리하기

문제상황

람다로 환경변수를 설정하고 사용하는데

로컬에서는 환경변수가 없기 때문에 소스에서 환경변수 없을 경우 처리해주는 구문을 추가해서 사용

하지만 보안을 강화하기 위해서 환경변수를 소스에서 제외하려고 합니다

if(!process.env.PUSH_TABLE) process.env.PUSH_TABLE = 'DynamoDB-Name';
if(!process.env.AWS_DEPLOY_REGION) process.env.AWS_DEPLOY_REGION = 'ap-northeast-2';

 

해결방법

dotenv 를 이용해서 환경변수를 .env 파일로 빼고

.env 파일을 .gitignore 에서 제외시켜준다

 

사용방법

로컬에서만 사용할 것이니 save-dev 로 dotenv 설치

npm install --save-dev dotenv

.gitignore 파일에 .env 파일 추가

//.gitignore

# package directories
node_modules
jspm_packages

# Serverless directories
.serverless

#Environment Variables
.env

.env 파일을 소스 루트폴더에 만들고 환경변수 추가

//.env
PUSH_TABLE = 'DynomaDB-Name'
AWS_DEPLOY_REGION = 'ap-northeast-2'

 

소스 수정

'use strict';
//dotenv 추가
require('dotenv/config');
const AWS = require('aws-sdk');

//환경변수 설정부분 삭제
//if(!process.env.PUSH_TABLE) process.env.PUSH_TABLE = 'AppPushUser-dev';
//if(!process.env.AWS_DEPLOY_REGION) process.env.AWS_DEPLOY_REGION = 'ap-northeast-2';

 

실행결과

require('dotenv/config'); 실행되면서 .env 파일의 변수 설정 값을 process.env 환경변수로 만들어 주기 때문에 

이전과 동일하게 정상적으로 실행이 잘 된다

로컬 PC 에서는 말이다

 

람다로 배포 후 실행결과

2019-08-05T01:12:07.138Z	undefined	ERROR	Uncaught Exception
{
    "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module 'dotenv/config'",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module 'dotenv/config'",
        "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
        "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
        "    at Object.<anonymous> (/var/runtime/index.js:36:30)",
        "    at Module._compile (internal/modules/cjs/loader.js:776:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)",
        "    at Module.load (internal/modules/cjs/loader.js:653:32)",
        "    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
        "    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)",
        "    at startup (internal/bootstrap/node.js:283:19)"
    ]
}

역시나 오류가 난다

이유는 save-dev 로 개발환경만 dotenv 설치했으니 배포 라이브러리에는 dotenv 가 없다

 

해결방법

dotenv 를 소스에서 사용하지 않는다

require('dotenv/config'); 를 소스에서 제거하고

테스트 실행시에 CLI 에서 dotenv/config 를 설정해준다

소스 수정

'use strict';
//dotenv 제거
//require('dotenv/config');
const AWS = require('aws-sdk');

테스트 실행시

//dotenv 적용전
node localtest/historys.test.js

//dotenv 적용하여 실행
node -r dotenv/config localtest/historys.test.js

//dotenv .env 파일의 위치 지정
node -r dotenv/config localtest/historys.test.js dotenv_config_path=/파일위치/.env

dotenv 관련되어 환경변수로 설정도 가능합니다

//dotenv 환경변수 설정 (windows)
set DOTENV_CONFIG_PATH=/.env/
set DOTENV_CONFIG_ENCODING=latin1
set DOTENV_CONFIG_DEBUG=true

 

 

결론

dotenv 를 활용해서 환경변수를 소스에서 제거 하고

테스트 js 파일에서 dotenv/config 를 사용해서 환경변수를 처리하자

아래는 테스트 파일의 예제

'use strict';
require('dotenv/config');
const lambda = require("../src/handlers/historys");

let event = {
    "pathParameters" : {
        "id" : "1634021"
    }
}

lambda.handler(event);

 

 

반응형

'IT > Frontend' 카테고리의 다른 글

Our Next Web Framework is Vue  (0) 2020.02.13
AWS Lambda 를 이용한 Nuxt.js 프로젝트 구현  (0) 2019.12.03
갤럭시 S 시리즈 출시일  (0) 2019.10.29
Frontend 웹개발 연습환경  (0) 2019.08.16
이미지 라이브러리 sharp  (0) 2019.08.04
java vs javascript 차이  (0) 2019.08.04
var let const  (0) 2019.08.04
Javascript 날짜에 타임존 적용  (1) 2019.08.02