환경 변수(environment variable)란?
환경 변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다. OS(ex) 윈도우, 리눅스 등)의 환경변수는 시스템의 실행 파일이 놓여 있는 디렉터리의 지정 등 OS 상세서 동작하는 응용소프트웨어가 참조하기 위한 설정이 기록된다.(운영체제가 굴러 가는데 필요한 변수들의 모임)
응용소프트웨어는 시스템콜(system call)이나 OS의 표준 API 등을 통하여 간단히 값을 얻을수록 되어있다. 쉽게 이야기해서 각자 깊숙이 있는 응용프로그램을 쉽게 꺼내쓰기 위해서 미리 변수로 등록해 놓는 것을 말한다.
API key와 같이 공개할 수 없는 정보가 코드에 포함될 경우, 네트워크를 통해 API key가 공개될 수 있습니다. 이런 일을 방지하기 위해서는, API key를 PC에 저장해두고 사용해야 합니다. JavaScript에서 변수에 문자열을 할당하는 것처럼, API key를 PC에서 사용하는 변수에 할당하고 사용할 수 있습니다.
JavaScript에서 변수는 스코프에 따라 전역변수와 지역변수로 나뉩니다. 그러나 파일 A에서 전역변수로 선언하더라도, 다른 파일 B에서 파일 A의 전역변수에 접근할 수 없습니다. 그러나 파일 A의 전역변수를 export 한다면, 파일 B에서 파일 A의 전역변수에 접근할 수 있습니다.
Linux 기반의 운영체제의 PC에는 시스템 자체에 전역변수를 설정할 수 있습니다. 그리고 시스템에 설정한 전역변수를 환경변수라고 합니다. export 를 이용해 환경변수를 설정할 수 있습니다.
윈도우의 경우 [제어판 > 시스템 및 보안 > 시스템 > 고급 시스템 설정]으로 들어가면 아래와 같이 나오는데 여기서 환경변수를 눌러 주면 관련해서 환경변수를 필요에 따라 추가, 수정, 제거를 수행할 수 있다.
dotenv: 자바스크립트에서 환경변수 사용하기
npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있습니다. npm 모듈을 설치하고 사용하기 위해서, 새로운 폴더를 만들고 npm init 을 입력합니다. 그리고 npm i dotenv 를 입력해 모듈을 설치합니다. 이때 생성된 폴더는 설치할 모듈과 이름이 같아서는 안됩니다.
mkdir environment_variable
cd environment_variable
npm init # 엔터 키를 여러번 입력해 init을 마칩니다.
npm i dotenv # dotenv 모듈을 설치합니다.
[커맨드] npm 모듈 dotenv를 설치합니다.
설치한 dotenv를 이용해 환경변수에 접근할 수 있습니다. 새로운 파일 index.js를 생성하고, process.env 를 출력합니다. Node.js의 내장 객체 process.env를 이용하면, 명령어 export 로 확인한 내용과 동일한 내용을 객체로 출력합니다.
[그림] process.env를 이용해 환경변수를 객체로 받아올 수 있습니다.
- process.env 는 Node.js 환경에서 조회할 수 있습니다.
- dotenv는 이어지는 콘텐츠 .env 파일를 환경변수로 사용할 수 있게 돕습니다.
.env: Node.js에서 환경변수 영구 적용
명령어 export 로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능합니다. 환경변수를 Linux 운영체제에 저장하는 방법은 여러 가지가 있지만, Node.js에서는 파일 .env를 만들어 저장하는 방법을 사용합니다.
먼저 .env 파일을 생성하고, 사용하고자 하는 환경변수를 입력한 뒤 저장합니다.
[그림] .env 파일을 생성하고, 환경변수로 사용할 myname에 "kimcoding"을 할당합니다.
모듈 dotenv를 이용하면, 파일 .env에 저장한 환경변수를 조회할 수 있습니다. index.js를 다음과 같이 수정하고, 저장합니다.
const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.myname);
[코드] index.js에서 dotenv.config 메소드를 이용해, .env를 process.env에 적용할 수 있습니다.
그다음 index.js를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
[그림] index.js 파일을 수정하고, 실행합니다.
환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있습니다. 그뿐만 아니라 서로 다른 PC 또는 여러 .env 파일에서, 같은 변수 이름에 다른 값을 할당할 수 있습니다.
실제 제품(서비스)을 개발하는 과정에는 개발 환경(local 또는 development 등)과 테스트 서버의 환경(test), 그리고 실제 제품을 제공하는 환경(production)이 있습니다. 예를 들어 구글 API를 이용해 웹 애플리케이션을 만드는 경우, 개발 환경에서는 개발자 개인의 API 키를 이용할 수 있습니다. 그러나 제품을 서비스할 때에 개인 API 키를 사용하면, 일일 요청량을 초과하는 경우 제품이 정상적인 동작을 할 수 없습니다. 이런 경우를 방지하기 위해 실제 제품에서는 기업용 API 키를 사용합니다. 이처럼 개발 환경과 제품을 제공하는 환경에서 사용하는 API 키가 다른 경우, 환경변수를 이용해 환경을 구분하여 코드를 작성할 수 있습니다.
데이터베이스도 마찬가지로 개발, 테스트, 제품 환경으로 구분할 수 있습니다. 다음 그림은 각기 다른 환경에, 같은 변수 이름을 사용하여 데이터베이스를 구분한 예시입니다.
[그림] 하나의 변수 이름을 환경에 따라 다르게 설정할 수 있습니다.
- PC에 저장된 환경변수를 확인할 수 있다. export
- PC에 저장된 환경변수를 불러올 수 있다. dotenv
- Node.js에서 환경변수를 영구적용할 수 있다. .env (Node.js 환경에서 process.env 를 통해, 환경변수에 접근할 수 있습니다, .env 파일에 저장한 내용을 불러오기 위해서는, dotenv 모듈이 필요합니다.)