파일을 작성하다 보면 코드에 개인정보와 같이 외부로 공개되어서는 안되는 정보들을
다뤄야 할 상황들이 온다. 이런 경우, 직접적으로 파일에 정보를 넣는 대신에
.env 파일을 생성해 파일을 따로 관리하는 것이 유용하다.
// npm i dotenv
require('dotenv').config();
console.log(process.env.DATA);
❓ 만약 .env 파일이 env 값을 사용하는 파일과 같은 디렉토리 상에 있지 않다면?
const path = require('path');
require('dotenv').config({ path: path.join(__dirname + '/../../local.env') });
Env 란 우리가 System 환경 변수를 적용하는 것과 같은 역할을 한다. 시작점을 지정한
것을 기준으로 우리가 그 변수를 어디에서든 사용할 수 있도록 한다.
env 가 정의된 바로 위 상위 폴더를 시작점으로 한다.
start / env 라고 정의 되어 있다면 start 가 시작점이 되는 것이다. 그 아래 파일이라면 env 값을
읽을 수 없게 된다. env 를 정의하는 방법에는 크게 3가지가 있다.
위 3가지에는 우선 순위가 존재하고, 3, 2, 1 순으로 영향력이 강하다. 즉, 3이 2번의 값을 덮고, 2번이 1번의 값을 덮는 다는 의미이다.
env 파일을 작성 할 때에는 USER=cha 와 같이
next 의 경우 아래 중 하나를 찾을 경우 이를 사용하여 build 를 사용한다.
하지만, 다음과 같은 조항이 있다.
Note: The allowed values for NODE_ENV are production, development and test.
이는 .env.production
, .env.development
, .env.test
와 같이 가용할 수 있는 .env
파일의 이름이 제한적이라는 것을 뜻한다. 따라서, 다양한 stage 를 사용하고 싶다면 다른 방법을 통해서 local
, dev
, prod
의 환경 변수를 나누어서 사용해야 한다.
[next build using .env] https://nextjs.org/docs/basic-features/environment-variables#environment-variable-load-order
"build:dev": "cp ./.env.local ./.env.local && next build",
"build:staging": "cp ./.env.dev ./.env.local && next build",
"build:prod": "cp ./.env.prod ./.env.local && next build",
[kakao next.js 환경변수 처리] https://fe-developers.kakaoent.com/2022/220505-runtime-environment/