API key와 같이 공개할 수 없는 정보가 코드에 포함될 경우, 네트워크를 통해 API key가 공개될 수 있다.
이런 일을 방지하기 위해서는, API key를 PC에 저장해두고 사용해야 한다.
JavaScript에서 변수에 문자열을 할당하는 것처럼, API key를 PC에서 사용하는 변수에 할당하고 사용할 수 있다.
JavaScript에서 변수는 스코프에 따라 전역변수와 지역변수로 나뉘는데,
파일 A에서 전역변수로 선언하더라도, 다른 파일 B에서 파일 A의 전역변수에 접근할 수 없다.
그러나 파일 A의 전역변수를 export
한다면, 파일 B에서 파일 A의 전역변수에 접근할 수 있다.
Linux 기반의 운영체제의 PC에는 시스템 자체에 전역변수를 설정할 수 있다.
그리고 시스템에 설정한 전역변수를 환경변수라고 하고, export
를 이용해 환경변수를 설정할 수 있다.
Linux 운영체제에는 이미 많은 환경변수가 설정되어 있고, 터미널CLI에 아래의 명령어를 입력한다.
export
설정된 환경변수를 확인할 수 있다.
export 명령어를 통해 새로운 환경변수를 추가할 수 있다.
export urclass="is good"
터미널에 위와같이 입력후
echo $urclass 입력하면
is good
출력
npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있다.
npm 모듈을 설치하고 사용하기 위해서 새로운 폴더를 만들고 npm init 을 입력한다.
입력 후 npm i dotenv를 입력해서 모듈을 설치한다.
생성된 폴더는 설치할 모듈과 이름이 같아서는 안된다.
mkdir enviroment_variable
cd enviroment_variable
npm init
npm i dotenv
설치된 dotenv를 이용해 환경변수에 접근할 수 있다.
새로운 파일 index.js를 만들고 process.env를 출력한다.
Node.js의 내장 객체 precess.env를 이용하면
명령어 export로 확인한 내용과 동일한 내용을 객체로 출력한다.
# index.js파일을 만든다.
nano index.js
# nano로 생성된 index.js에 출력할 내용을 입력하는 창이 나온다.
# 창이 나오면 console.log(process.env)를 입력한다.
#입력 후 cat index.js를 입력하면
cat index.js
console.log(precess.env) #출력완료
# node index.js를 입력하면 환경변수를 객체로 받아올수 있다.
node index.js
명령어 export로 적용한 환경변수는 현재 사용중인 터미널에서만 임시로 사용가능하다.
환경변수를 Linux 운영체제에 저장하는 방법은 여러가지 있지만
Node.js에서는 파일 .env를 만들어 저장하는 방법을 사용한다.
# .env파일을 만든다.
nano .env
# env에 myname = kimcoding을 작성한다.
# cat .env를 작성한다.
cat .env
myname=kimcoding #출력
모듈 dotenv를 이용하면, 파일 .env에 저장한 환경변수를 조회할 수 있다.
index.js를 아래와 같이 수정하고, 저장해보자.
const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);
// nano index.js를 입력하면 수정할수 있는 화면으로 나온다.
nano index.js
/*
1. 위에 작성된 코드를 입력한다.
2. 입력된 코드 저장하고 cat index.js를 입력한다.
*/
const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);
/*
node index.js를 입력하면
.env로 입력된 myname에 할당된 값이 나온다.
*/
node index.js
kimcoding //출력
환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있고 서로 다른 PC 또는 여러 .env 파일에서, 같은 변수 이름에 다른 값을 할당할 수 있다.
실제 제품(서비스)을 개발하는 과정에는 개발 환경(local 또는 development 등)과 테스트 서버의 환경(test), 그리고 실제 제품을 제공하는 환경(production)이 있다.