?
사용자
환경변수 .env 파일 vs 시스템 환경변수 차이점과 활용법
개발 시 자주 사용되는 .env 파일과 시스템 환경변수의 개념, 사용법, 차이점을 명확히 이해하고 올바르게 활용하여 개발 생산성을 높입니다.
#환경변수#.env#시스템 환경변수#개발#배포
recipe.sh
## 환경변수 `.env` 파일 vs 시스템 환경변수: 개념, 차이점, 활용법
개발 프로젝트를 진행하다 보면 민감한 정보(API 키, 데이터베이스 접속 정보 등)나 설정값을 코드 내에 직접 포함시키지 않고 관리해야 할 필요가 있습니다. 이때 주로 활용되는 것이 환경변수이며, `.env` 파일과 시스템 환경변수라는 두 가지 주요 방식을 이해하고 올바르게 사용하는 것이 중요합니다.
### 1. `.env` 파일이란?
`.env` 파일은 프로젝트 루트 디렉토리에 위치하며, `.env`라는 이름으로 생성되는 일반 텍스트 파일입니다. 이 파일 안에는 `KEY=VALUE` 형식으로 환경변수들을 정의합니다. 주로 개발 환경에서 해당 프로젝트만을 위한 특정 환경변수를 격리하여 관리하는 데 사용됩니다.
* **언제 사용하는가?**
* 로컬 개발 환경에서 빠르게 환경변수를 설정하고 싶을 때
* 프로젝트별로 고유한 설정값이 필요할 때
* Git과 같은 버전 관리 시스템에 민감한 정보를 제외하고 싶을 때
* **왜 사용하는가?**
* 개발 환경과 운영 환경의 설정을 분리하기 용이합니다.
* 코드 수정 없이 환경변수 값을 변경할 수 있습니다.
* `.gitignore`에 `.env` 파일을 추가하여 민감 정보가 유출되는 것을 방지합니다.
* **사용법 (Node.js 환경 예시)**
1. 프로젝트 루트 디렉토리에 `.env` 파일을 생성합니다.
2. 파일 안에 `KEY=VALUE` 형식으로 환경변수를 작성합니다. 예: `DATABASE_URL=postgres://user:password@host:port/dbname`
3. `dotenv`와 같은 라이브러리를 설치합니다. (`npm install dotenv` 또는 `yarn add dotenv`)
4. 애플리케이션의 가장 초기 지점(예: `index.js` 또는 `app.js`)에서 `require('dotenv').config();`를 호출하여 `.env` 파일의 변수들을 `process.env`로 로드합니다.
5. 애플리케이션 코드에서 `process.env.KEY` 형태로 변수에 접근합니다.
### 2. 시스템 환경변수란?
시스템 환경변수는 운영체제(OS) 수준에서 설정되는 환경변수입니다. 컴퓨터나 서버 전체에서 인식하며, 특정 애플리케이션뿐만 아니라 시스템 전반에 걸쳐 사용될 수 있습니다. 배포된 서버 환경 등에서 애플리케이션을 실행할 때 일반적으로 사용됩니다.
* **언제 사용하는가?**
* 배포된 서버 환경에서 애플리케이션을 실행할 때
* 서버 설정, OS 관련 정보 등 시스템 전반에 영향을 미치는 변수를 설정할 때
* CI/CD 파이프라인에서 빌드 또는 배포 시 특정 값을 주입해야 할 때
* **왜 사용하는가?**
* 운영체제 또는 컨테이너 환경에서 직접 관리되므로, 애플리케이션 배포 및 실행 환경을 더욱 안전하고 유연하게 구성할 수 있습니다.
* CI/CD 파이프라인과의 통합이 용이합니다.
* `.env` 파일보다 더 넓은 범위에서 적용될 수 있습니다.
* **사용법 (Linux/macOS 예시)**
* **임시 설정 (현재 세션만 적용)**: `$ export VARIABLE_NAME=value`
* **영구 설정**: `~/.bashrc`, `~/.zshrc` 등 쉘 설정 파일에 `export VARIABLE_NAME=value` 라인을 추가하고, `source ~/.bashrc` 또는 새 터미널을 열어 적용합니다.
* **Windows**: 시스템 속성 -> 고급 -> 환경변수 메뉴에서 설정합니다.
* 애플리케이션에서는 `.env` 파일 로드 없이 `process.env.VARIABLE_NAME` 형태로 직접 접근합니다.
### 3. `.env` 파일 vs 시스템 환경변수: 주요 차이점
| 구분 | `.env` 파일 | 시스템 환경변수 |
| :--------------- | :------------------------------------------- | :--------------------------------------------------- |
| **범위** | 특정 프로젝트/애플리케이션 | 컴퓨터/서버 전체 |
| **관리 주체** | 개발자 (프로젝트 내) | 운영체제 (OS) |
| **주요 사용처** | 로컬 개발 환경 | 배포 환경, 서버, CI/CD |
| **민감 정보 관리** | `.gitignore`로 보안 가능 | OS 수준 보안, 접근 권한 관리 필요 |
| **설정 방식** | 파일 작성, 라이브러리 로드 | OS 설정, 터미널 `export` 명령 |
| **프로세스 상속**| 라이브러리에 의해 `process.env`로 로드됨 | OS에 의해 자동적으로 상속됨 |
### 4. 언제 어떤 것을 사용해야 할까?
* **로컬 개발 환경**: `.env` 파일을 사용하는 것이 일반적입니다. 각 개발자마다 다른 로컬 환경 설정이 필요할 수 있고, `.gitignore`를 통해 민감 정보를 안전하게 관리할 수 있기 때문입니다. `dotenv` 라이브러리를 사용하여 쉽게 로드할 수 있습니다.
* **배포 환경 (서버, 클라우드 등)**: 시스템 환경변수를 사용하는 것이 권장됩니다. 보안, 관리의 용이성, CI/CD 파이프라인과의 연동 등을 고려할 때 더욱 적합합니다. Docker, Kubernetes와 같은 컨테이너 오케스트레이션 환경에서도 컨테이너의 환경변수를 설정하는 방식을 통해 시스템 환경변수를 관리하는 것이 표준입니다.
* **CI/CD 파이프라인**: 빌드 또는 배포 단계에서 필요한 값들은 시스템 환경변수 또는 CI/CD 도구에서 제공하는 비밀 변수(Secrets) 기능을 통해 주입하는 것이 일반적입니다.
### 5. 주의사항
* `.env` 파일은 절대 Git이나 공개된 저장소에 커밋해서는 안 됩니다. `.gitignore`에 `.env`를 반드시 포함시키세요.
* 운영 환경에서는 `.env` 파일보다는 시스템 환경변수 또는 클라우드 서비스에서 제공하는 비밀 관리 기능을 사용하는 것이 보안상 더 안전합니다.
* 애플리케이션에서 환경변수를 로드할 때, `.env` 파일에 정의된 변수와 시스템 환경변수가 충돌하는 경우, 일반적으로 시스템 환경변수가 우선순위를 가집니다. (라이브러리 구현에 따라 다를 수 있음)
* 환경변수 파일(`.env`)을 사용하는 라이브러리(`dotenv` 등)는 애플리케이션 시작 시점에 한 번만 호출되어야 합니다.
이 가이드를 통해 `.env` 파일과 시스템 환경변수의 차이점을 명확히 이해하고, 프로젝트의 개발 및 배포 단계에 맞춰 올바르게 활용하시길 바랍니다.7
스크랩
17
좋아요
0
댓글