환경 변수 사용에 대해 모든 개발자가 알아야 할 내용
환경 변수를 사용하는 최선의 방법
  • nodejs

환경 변수

환경 변수의 작동 방식, 주요 사용법과 일반적인 함정, Expo React Native 앱에서 환경 변수를 사용하는 최선의 방벙베 대해 알아보자.

image

환경변수란 무엇일까

환경 변수는 프로그램 외부에서 설정되는 값이다. 환경 변수의 목적은 프로그램을 다시 빌드하거나 재배포하지 않고도 프로그램 기능을 변경할 수 있다.

어떻게 동작할까

예를들어 Node.js를 사용하면 프로그램을 실행하기 전에 환경 변수를 인라인으로 설정할 수 있다.

API_URL=https://api.app.com node code.js

여기에서 API_URLhttps://api.app.com 를 설정하면서 code.js 코드를 실행한다. 애플리케이션 초기화 중에 변수가 로드되므로 ocde.js 내 어디에서나 process.env를 통해 API_URL에 액세스할 수 있다. 그리고 그 변수에는 https://api.app.com이 담겨있다.

이제 개발과 프로덕션이라는 두 가지 API 환경이 있다고 가정해보자. code.js 의 코드는 두 가지 모두 동일해야 하며, 유일한 차이점은 개발 버전은 http://localhost:3000으로 요청을 보내야 하고 프로덕션은 https://api.app.com를 사용해야 한다는 것이다.

환경 변수가 없으면 코드베이스에 api URL을 하드코딩해야 하며 개발 및 프로덕션용 파일의 두 가지 별도 버전이 있어야 한다.

그러나 환경 변수를 사용하면 프로그램을 실행하기 전에 API_URL 환경 변수를 올바른 값으로 설정하여 완전히 동일한 code.js 파일을 사용하여 두 환경을 모두 지원할 수 있다.

// dev
API_URL=http://localhost:3000 node code.js

// production
API_URL=https://api.app.com node code.js

환경 변수 및 보안

환경 변수에 secrets 값을 추가해도 안전할까? 우선 secrets 의 정의가 필요하다. secrets 이란것은 다른 사람이 액세스할 수 없어야 한다.

예를들어 OpenAI는 apiKey계정을 만들고 요청별로 비용을 지불해야하는 서비스이기 때문에 apiKeysecrets에 해당할 것이다.

따라서 악의적인 행위자는 당신의 apiKey 에 대해 사용 한도를 모두 소모시킬 수 있다. 그 외에도 모든 자격 증명, 개인 키 또는 ‘데이터베이스 연결 문자열’과 같은 비밀번호도 secrets에 해당한다.

그렇다면 환경 변수에 secrets를 추가하는것은 안전할까?

우선 결론부터 말하면 환경 변수가 사용되는 소스 코드에 사용자가 접근할 수 없는 경우에만 안전하다.

  • 웹사이트: 안전하지 않다. 브라우저에서 페이지 소스를 검사할 수 있다.
  • 모바일 및 데스크탑 앱: 앱 소스를 검사할 수 있으므로 안전하지 않다.
  • 웹 API: 프로그램이 서버에서 실행되고 소스코드가 숨겨져있으므로 안전하다.

요약하자면, 웹사이트나 모바일 앱에 추가하는 모든 코드(환경 변수를 사용하여 추가한 경우라고 하더라도)는 일반 텍스트로 액세스할 수 있으므로 클라이언트 측 코드에 사용되는 환경변수에는 secrets 를 사용해서는 안된다.

환경 변수의 일반적인 용도

특정 애플리케이션 런타임 동작을 변경해야 하는 경우 다양한 시나리오에 환경 변수를 사용할 수 있다.

  1. 기능 전환: 예를들어 Expo 앱을 빌드하는 경우 Expo 명령 앞에 EXPO_DEBUG=true npx expo start 를 통해서 프로세스에서 추가 로깅을 표시할 수 있다.
  2. 환경별 값 설정: 최신 소프트웨어 프로젝트에는 개발 및 프로덕션 API, 결제 제공업체 및 서비스에 각각 연결되어야 하는 개발 및 프로덕션 환경이 있는 것이 일반적이다. 환경 변수를 사용하면 개발자는 관련 값만 대체하여 동일한 앱 또는 웹 사이트 코드를 사용할 수 있다.
  3. 비밀 저장: 위에서 말한 것처럼 클라이언트 측 코드에 secrets을 저장하지 말아야 한다. 그러나 서버 측 코드의 경우 secrets에 대한 환경 변수를 사용하는 것이 가장 중요하다. 이를 통해 개발자는 소스 제어에 코드를 안전하게 저장하고 서버 측 코드가 배포될 때만 꺼내지는 환경 변수에 secrets을 별도로 저장할 수 있다.

.env 파일

.env 파일 에 환경 변수를 저장하는 것은 표준화된 접근방식은 아니지만 널리 사용되고 있다. 이 접근 방식을 사용하면 프로젝트의 루트 디렉토리에 .env라는 파일을 만들고 모든 환경 변수를 키 값 쌍으로 입력한다.

API_URL=https://api.app.com
ANALYTICS_KEY=key
STAGE=production
LANGUAGE=en

그런 다음 이러한 변수를 로드하고 액세스하는 방법은 사용하는 언어와 라이브러리에 따라 달라질 수 있다.

참고