[Node.js] dotenv로 환경변수 (process.env)관리하기
dotenv란?
개발 중에 필요한 API_KEY, SECRET_KEY, 포트 등 보안에 신경 써야 할 정보들을 소스코드 로직에 그대로 작성하거나, 오픈소스와 같은 github 등 외부에 노출되면 불특정 사람들이 사용을 할 수 있게 됩니다.
따라서 이번 시간에는 .env라는 외부 파일을 만들어 중요한 정보를 환경변수로 저장하여 관리할 수 있는 dotenv 라이브러리에 대해서 공부해 보겠습니다.
자세한 설치 방법은 npm dotenv에서 확인할 수 있습니다.
크로스 플랫폼 환경변수 설정
Node.js는 크로스 플랫폼입니다. Windows, OSX, Linux 플랫폼에서 실행이 가능합니다.
개발을 혼자 하기 보다는 여러 개발자들과 Github/SVN을 통해 형상관리를 하면서 프로젝트를 진행 시, 개발자마다 사용하는 컴퓨터에 OS가 다를 수 있습니다.
OS마다 환경 변수를 설정하는 방법이 다르기 때문에 OS에 맞는 환경 변수를 설정해 주어야 합니다.
어떤 OS에서 개발해도 동일한 환경 변수를 생성하고 사용할 수 있게 된다.
dotenv 라이브러리를 활용해보자.
dotenv특징
- dotdenv는 환경변수를 .env파일에 저장 후 process. env로 로드하는 의존성 모듈입니다.
dotenv 라이브러리 설치
# npm
$ npm install dotenv --save
.env 파일 생성
1. 루트 경로에 환경 변수를 관리하는 .env 파일을 만들어 줍니다.
2. .env파일 안에 필요한 환경 변수들을 다음과 같이 키=값의 형식으로 나열합니다.
#.env
S3_BUCKET="YOURS3BUCKET"
SECRET_KEY="YOURSECRETKEYGOESHERE"
위와 같이 .env에 환경변수들을 저장해놓으면 dotenv라이브러리를 활용해 process.env에 설정할 수 있습니다.
require('dotenv').config()
//import dotenv from 'dotenv'
require('dotenv').config();
- .env를 사용하고자 하는 파일 안에 dotenv모듈을 가져온다.
- dotenv.config({ path: 경로 }); 직접 .env에 경로를 지정해줄 수 있다.
- dotenv.config()는 현재 디렉토리에 .env파일을 자동으로 인식해 세팅하여 환경변수를 세팅한다.
활용 예
MongoDB 연동하기 에서 다음과 같이 DB 커넥션 코드를 작성했습니다.
이 문자열에는 몽고DB에 접근할 수 있는 아이디와 패스워드, DB명 등이 적혀있습니다.
해당 정보를 Git-hub(오픈소스)등 취약한 곳에 올리게 되면 해커가 공격할 수 있는 이슈가 있습니다.
따라서, 외부 파일인 .env에 환경변수에 키=값형태로 정의하여 사용합니다.
📁 .env
다음과 같이 PORT와 MONGO_URI 변수를 키값으로 설정하고, 값을 대입합니다.
# .env
PORT=5000
MONGO_URI = mongodb+srv://<id>:<password>@...
📁 app.js
# app.js
require('dotenv').config(); // 현재 디렉토리에 .env파일을 자동으로 인식해 세팅하여 환경변수를 세팅한다.
// db
const connectDB = require('./db/connect');
// start server
const port = process.env.PORT || 3000; // 서버 포트 번호, .env에 PORT값이 있으면 전자, 없을 경우 후자
const start = async() => {
try {
await connectDB(process.env.MONGO_URI); // connectDB함수에 MONGO_URI 값을 세팅
app.listen(port, () => {
console.log(`server is listening on port ${port}`);
});
} catch (e) {
console.log(`error has occured ${e}`);
}
}