웹 백엔드

Node.js - 환경변수(dotenv와 .env 사용)

토리쟁이 2024. 2. 19. 16:39

 

이번 포스팅에서는 node.js에서 환경변수를 사용하는 방법을 공부해 보려고 한다. 


환경변수란 무엇일까?

 

 

개발자들은 개발, 테스트, 운영 등 여러 환경에 애플리케이션을 배포한다. 어느 환경에 배포하느냐에 따라서 다르게 설정되야하는 값들은 보통 운영체제 수준에서 환경 변수를 통해 관리하게 된다. 대표적인 예로, 데이터베이스 설정을 들 수 있다. 운영 환경에서는 데이터 센터나 클라우드 인프라 상의 상용 DB를 사용하고, 개발 환경에서는 개발자의 PC 상에서 돌고 있는 로컬 DB를 사용하는 경우가 많다. 뿐만 아니라, 데이터베이스의 비밀번호나 서드파티(3rd-party) 서비스의 API 키와 같이 민감한 인증 정보는 GitHub와 같은 코드 저장소(repository)에 올리면 상당히 위험할 수 있기 때문에 환경 변수로 저장해놓고 사용하는 것이 권장된다.

 

 

 

 

환경변수

  • 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임
  • 운영체제(OS)나 애플리케이션에서 사용되는 데이터 값을 저장하는 메커니즘
  • 즉, 환경변수는 운영체제가 참조하는 변수
  • 프로그램의 동작을 조정하거나 구성
  • Node.js에서도 이러한 환경변수를 활용하여 애플리케이션의 설정과 동작을 조정

 

 

 

Node.js에서는 process.env 객체를 통해 환경변수에 접근한다. process는 Node.js에 기본적으로 내장된 전역 객체이기 때문에 별도로 import할 필요없이, 프로그램의 어디에서든지 사용이 가능하다.

일부 환경변수들은 개발자가 직접 설정해주지 않더라도 운영체제 수준에서 이미 설정이 되어 있기도 하다. 터미널을 열고 Node.js 인터프리터를 실행하면 어떤 환경 변수들이 이미 설정되어 있는지 간단하게 확인할 수 있다.

 

 

 

 

.env

  • 환경변수를 관리하게 위해 .env파일을 사용하는 것이 일반적
  • 주의) 깃 저장소에 업로드하지 말아야 함
    • .gitignore 파일에 env 파일을 올리지 않기 위한 코드 작성
      */.env
  • 파일질라를 통해 서버에 파일만 업로드

 

 

 

환경변수 설정

 

환경변수를 설정하기 위한 다양한 방법들이 존재하지만, 가장 간단한 방법은 프로그램을 실행할 때 node 명령어 앞에 환경변수를 키=값 형태로 붙여주면 된다. 이렇게, 프로그램 실행시 설정한 환경변수는 프로그램이 실행되는 동안에만 유효하며, 프로그램이 종료되면 사라진다. (자세한 내용은 맨 아래의 링크 참고할 것-)

 

 

 

나는 dotenv를 사용하여 환경변수를  .env 파일로 관리하고자 한다.

 

dotenv를 사용하기 위해서는, dotenv 패키지를 따로 설치하여야 한다.

$ npm install dotenv

 

 

dotenv

  • Node.js에서 환경변수를 좀 더 효과적으로 관리하기 위한 모듈
  • dotenv를 사용하면 .env 파일에 정의된 환경변수를 로드하여 애플리케이션에서 사용할 수 있다.

 

dotenv 패키지를 설치한 후에는, 프로젝트 루트 디렉토리에.env 파일을 생성한다. .

env 파일을 생성하고, 환경 변수를 KEY = VALUE 형식으로 작성한다.

 

.env 파일 예시

MYSQL_PASSWORD = 1234567891231231321313132123
API_KEY = asdfasdasdd12324
PORT = 8089

 

 

그 다음엔, 애플리케이션의 진입점 파일(일반적으로 index.js 또는 app.js 등)에서 dotenv를 로드해야 한다.

 

 

app.js

const express = require("express");
const app = express();
//console.log(process.env);

// .env에서 만들어 둔 환경변수를 읽어오기 위한 설정
const dotenv = require("dotenv");
dotenv.config();
const PORT = process.env.PORT;

app.get("/", (req, res) => {
  console.log("mySQL 패스워드", process.env.MYSQL_PASSWORD);
  console.log("api key", process.env.API_KEY);
  res.send("응답완료");
});

app.listen(PORT, () => {
  console.log(`http://localhost:${PORT}/user`);
});

 

 

  • dotenv 모듈을 불러와서 dotenv 객체를 생성하고
  • dotenv 객체.config(); 를 통해 .env 파일의 환경변수를 읽어옴으로써 환경변수를 사용할 수 있게 되는 것이다.
  •  process.env 객체를 통해 환경변수에 접근할 수 있다.
  • process.env.환경변수명

 

 

 

 


참고

 

https://www.daleseo.com/js-node-process-env/

https://velog.io/@sh_j225/dotenv-%EC%82%AC%EC%9A%A9%EB%B2%95

https://www.daleseo.com/js-dotenv/