?
사용자
환경변수 .env 파일 vs 시스템 환경변수 차이점 및 활용법 가이드
개발 환경에서 .env 파일과 시스템 환경변수의 차이를 명확히 이해하고, 각각의 장단점과 올바른 사용법을 익혀 효율적인 환경 설정 방법을 배우세요.
#환경변수#dotenv#시스템 환경변수#개발#설정
recipe.sh
## 환경변수: .env 파일 vs 시스템 환경변수
개발 프로젝트를 진행하다 보면 애플리케이션의 동작 방식을 설정하거나 민감한 정보를 관리하기 위해 '환경변수'를 사용하게 됩니다. 환경변수를 설정하는 방식에는 크게 `.env` 파일 사용과 시스템 환경변수 직접 설정 두 가지가 있으며, 각각의 특징과 사용법을 이해하는 것이 중요합니다.
### 1. `.env` 파일이란?
`.env` 파일은 프로젝트 루트 디렉토리에 위치하는 텍스트 파일로, 키-값 쌍 형태로 환경변수를 정의합니다. 주로 개발 환경에서 데이터베이스 접속 정보, API 키, 포트 번호 등 다양한 설정 값을 저장하는 데 사용됩니다.
**왜 `.env` 파일을 사용할까요?**
* **코드 분리:** 민감한 정보(API 키, 비밀번호 등)를 코드에 직접 하드코딩하지 않고 분리하여 보안성을 높입니다.
* **환경별 설정:** 개발, 스테이징, 프로덕션 등 환경에 따라 다른 설정을 쉽게 적용할 수 있습니다.
* **편의성:** 개발자가 별도의 시스템 설정을 건드리지 않고 로컬에서 쉽게 환경변수를 관리할 수 있습니다.
**`.env` 파일 사용법:**
1. **설치:** Node.js 환경에서는 `dotenv`와 같은 라이브러리를 설치합니다.
```bash
npm install dotenv
# 또는
yarn add dotenv
```
2. **파일 생성:** 프로젝트 루트에 `.env` 파일을 생성합니다.
```
# .env 파일 예시
DATABASE_URL=postgresql://user:password@host:port/database
API_KEY=your_secret_api_key
PORT=3000
```
3. **코드 적용:** 애플리케이션 시작 시 `dotenv` 라이브러리를 로드하여 `.env` 파일의 변수를 `process.env` 객체에 로드합니다.
```javascript
// index.js 또는 app.js
require('dotenv').config();
const port = process.env.PORT || 8080;
console.log(`Server running on port ${port}`);
```
4. **`.gitignore` 등록:** `.env` 파일은 민감한 정보를 포함하므로 반드시 `.gitignore` 파일에 추가하여 Git 저장소에 포함되지 않도록 합니다.
```
# .gitignore
.env
.env.*
```
### 2. 시스템 환경변수
시스템 환경변수는 운영체제 수준에서 설정되는 변수입니다. 사용자가 로그인할 때나 시스템이 시작될 때 자동으로 로드되는 변수들도 있으며, 터미널에서 직접 설정하거나 시스템 설정 파일을 통해 관리할 수 있습니다.
**왜 시스템 환경변수를 사용할까요?**
* **전역 설정:** 여러 애플리케이션이나 프로세스에서 공유해야 하는 설정을 전역적으로 관리할 때 유용합니다.
* **프로덕션 환경:** CI/CD 파이프라인이나 클라우드 배포 환경에서 보안 및 관리를 위해 시스템 환경변수를 사용하는 경우가 많습니다.
* **보안:** `.env` 파일보다 더 엄격한 보안 정책이 필요한 경우 시스템 환경변수를 활용합니다.
**시스템 환경변수 설정법 (예시):**
* **Linux/macOS (Bash/Zsh):**
```bash
# 임시 설정 (현재 터미널 세션에서만 유효)
export API_KEY=your_production_api_key
# 영구 설정 (bashrc, zshrc 파일에 추가)
echo 'export API_KEY=your_production_api_key' >> ~/.bashrc
source ~/.bashrc
```
* **Windows (Command Prompt):
```cmd
rem 임시 설정 (현재 명령 프롬프트 세션에서만 유효)
set API_KEY=your_production_api_key
rem 영구 설정 (시스템 속성 -> 고급 -> 환경 변수)
setx API_KEY "your_production_api_key"
```
### 3. `.env` 파일 vs 시스템 환경변수 비교
| 구분 | `.env` 파일 | 시스템 환경변수 |
| :------------- | :---------------------------------------- | :------------------------------------------- |
| **스코프** | 특정 프로젝트 (로컬 개발 환경) | 운영체제 전역 또는 사용자 세션 |
| **보안** | 코드와 분리, `.gitignore` 필수 | OS 수준 관리, 더 엄격한 접근 제어 가능 |
| **관리 용이성** | 개발자가 직접 수정, 쉽고 직관적 | OS 설정 필요, 일부 사용자에게 복잡할 수 있음 |
| **주요 용도** | 로컬 개발 환경 설정, 민감 정보 관리 | 프로덕션 환경 설정, CI/CD, 앱 간 공유 |
| **프로세스** | `dotenv` 라이브러리 등으로 로드 필요 | OS에서 자동 로드 또는 명시적 설정 |
### 4. 언제 무엇을 사용할까?
* **로컬 개발 환경:** `.env` 파일을 사용하여 API 키, 데이터베이스 접속 정보 등을 관리하는 것이 가장 일반적이고 편리합니다.
* **프로덕션/배포 환경:** 실제 서비스가 운영되는 환경에서는 보안 및 관리의 용이성을 위해 시스템 환경변수를 사용하는 것이 권장됩니다. 클라우드 서비스(AWS, GCP, Azure)나 Docker, Kubernetes 등은 자체적인 환경변수 관리 기능을 제공합니다.
### 5. 주의사항
* `.env` 파일에 저장된 정보는 코드와 함께 배포되지 않도록 `.gitignore` 설정을 철저히 하세요.
* 프로덕션 환경에서는 `.env` 파일을 직접 사용하는 것보다 시스템 환경변수 또는 각 클라우드/컨테이너 오케스트레이션 도구의 비밀 관리 기능을 활용하는 것이 더 안전합니다.
* 애플리케이션 시작 시 환경변수를 로드해야 합니다. 그렇지 않으면 변수가 적용되지 않습니다.
이 가이드를 통해 `.env` 파일과 시스템 환경변수의 차이를 명확히 이해하고, 프로젝트의 개발 및 배포 환경에 맞는 최적의 방법으로 환경변수를 관리하시길 바랍니다.2
스크랩
10
좋아요
0
댓글