프레임워크마다 환경 변수 파일을 관리하는 방식에는 차이가 있습니다. 이 글에서는 주요 프레임워크에서 어떻게 .env 파일을 지원하고 활용하는지 비교해 봅니다.
프레임워크별 환경 변수 파일 지원 방식
각 프레임워크는 자체적인 환경 변수 파일 명명 규칙과 우선순위, 로딩 방식을 가지고 있습니다. 프로젝트에 사용할 프레임워크를 선택할 때 이러한 차이점을 이해하는 것이 중요합니다.
Node.js와 dotenv
Node.js 애플리케이션에서는 일반적으로 dotenv
패키지를 사용하여 환경 변수를 관리합니다.
지원 파일명:
- 기본적으로
.env
- 커스텀 이름도 지정 가능
사용 방법:
javascript// 기본 파일명(.env) 사용
require('dotenv').config()
// 커스텀 파일명 지정
require('dotenv').config({ path: './config/.env.production' })
// 환경 변수 사용
const apiKey = process.env.API_KEY;
const port = process.env.PORT || 3000;
특징:
- 간단하고 유연한 설정
- 다양한 환경 설정을 위한 여러 파일 로드 가능
- 환경 변수 오버라이드 옵션 제공
React (Create React App)
Create React App은 빌드 타임에 환경 변수를 처리하는 내장 기능을 제공합니다.
지원 파일명:
.env
: 모든 환경에서 적용.env.local
: 로컬 개발 환경에서만 적용되며 git에 포함되지 않음.env.development
: 개발 모드(npm start
)에서만 적용.env.development.local
: 개발 모드의 로컬 오버라이드.env.test
: 테스트 환경(npm test
)에서만 적용.env.test.local
: 테스트 환경의 로컬 오버라이드.env.production
: 프로덕션 빌드(npm run build
)에서만 적용.env.production.local
: 프로덕션 빌드의 로컬 오버라이드
특징:
- 환경 변수는
REACT_APP_
접두사를 가져야 함 - 파일 우선순위:
.env.{environment}.local
>.env.{environment}
>.env.local
>.env
- 빌드 시 환경 변수가 JavaScript 코드에 삽입됨
javascript// 리액트 컴포넌트에서 사용
function App() {
return (
<div>
<h1>{process.env.REACT_APP_TITLE}</h1>
<p>API URL: {process.env.REACT_APP_API_URL}</p>
</div>
);
}
Next.js
Next.js는 더 풍부한 환경 변수 관리 기능을 제공합니다.
지원 파일명:
.env
: 모든 환경에서 적용.env.local
: 모든 환경에서 적용되지만 테스트 환경은 제외.env.development
: 개발 환경에서만 적용.env.production
: 프로덕션 환경에서만 적용.env.test
: 테스트 환경에서만 적용
특징:
- 파일 우선순위:
.env.{environment}.local
>.env.local
>.env.{environment}
>.env
- 환경 변수 타입:
NEXT_PUBLIC_
: 클라이언트와 서버 모두에서 접근 가능- 접두사 없음: 서버 사이드에서만 접근 가능
javascript// 서버 사이드에서만 접근 가능
console.log(process.env.DATABASE_URL);
// 클라이언트에서도 접근 가능
console.log(process.env.NEXT_PUBLIC_API_URL);
Vue CLI
Vue CLI는 React와 유사한 환경 변수 시스템을 제공합니다.
지원 파일명:
.env
: 모든 모드에서 로드.env.local
: 모든 모드에서 로드되지만 git에 포함되지 않음.env.[mode]
: 특정 모드에서만 로드 (예:.env.development
,.env.production
).env.[mode].local
: 특정 모드의 로컬 오버라이드
특징:
- 환경 변수는
VUE_APP_
접두사를 가져야 함 - 파일 우선순위:
.env.[mode].local
>.env.[mode]
>.env.local
>.env
javascript// Vue 컴포넌트에서 사용
export default {
mounted() {
console.log(process.env.VUE_APP_API_URL);
}
}
Python 생태계
Python에서는 환경 변수를 관리하는 여러 방법이 있으며, 표준 라이브러리와 추가 패키지를 통해 구현합니다.
python-dotenv
Python에서 가장 널리 사용되는 환경 변수 관리 라이브러리입니다.
지원 파일명:
- 기본적으로
.env
- 커스텀 파일명 지정 가능
사용 방법:
pythonfrom dotenv import load_dotenv
import os
# 기본 .env 파일 로드
load_dotenv()
# 또는 커스텀 파일 지정
load_dotenv(".env.production")
# 환경 변수 사용
database_url = os.getenv("DATABASE_URL")
api_key = os.getenv("API_KEY")
다중 파일 지원:
pythonfrom dotenv import load_dotenv
# 우선순위: .env.local(높음) -> .env.development -> .env(낮음)
load_dotenv(".env")
load_dotenv(".env.development", override=True)
load_dotenv(".env.local", override=True)
Django
Django는 자체적으로 환경 변수 파일을 지원하지 않지만, django-environ
과 같은 패키지를 통해 관리할 수 있습니다.
지원 파일명:
- 기본적으로 특정 파일명 규칙은 없음
- 일반적으로
.env
사용
사용 방법:
python# settings.py
import environ
import os
# 프로젝트 기본 디렉토리 설정
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# env 객체 초기화
env = environ.Env(
# 기본값 설정
DEBUG=(bool, False),
ALLOWED_HOSTS=(list, ["localhost"]),
)
# .env 파일 위치 (BASE_DIR/.env)
environ.Env.read_env(os.path.join(BASE_DIR, ".env"))
# settings.py에서 사용
DEBUG = env("DEBUG")
SECRET_KEY = env("SECRET_KEY")
DATABASES = {
"default": env.db(), # DATABASE_URL 환경 변수에서 자동으로 파싱
}
Flask
Flask는 .flaskenv
와 .env
파일을 지원합니다.
지원 파일명:
.env
: 비밀 환경 변수용 (API 키 등).flaskenv
: Flask 특정 설정용 (비밀이 아닌 설정)
사용 방법:
python# Flask 개발 서버 실행 시 자동으로 로드됨 (python-dotenv 설치 필요)
# app.py
from flask import Flask
import os
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
app.config["API_KEY"] = os.getenv("API_KEY")
FastAPI
FastAPI는 직접적인 환경 변수 파일 지원은 없지만, pydantic
과 python-dotenv
를 함께 사용하여 강력한 환경 변수 관리가 가능합니다.
지원 파일명:
.env
(관행적으로 사용)
사용 방법:
pythonfrom pydantic_settings import BaseSettings
from dotenv import load_dotenv
# .env 파일 로드
load_dotenv()
class Settings(BaseSettings):
app_name: str = "My FastAPI App"
debug: bool = False
database_url: str
api_key: str
class Config:
env_file = ".env" # 환경 변수 파일 지정
settings = Settings()
Laravel (PHP)
Laravel은 .env
파일을 기본적으로 지원합니다.
지원 파일명:
.env
: 기본 환경 파일.env.example
: 예제 파일 (실제 값을 포함하지 않음).env.testing
: 테스트 환경용
사용 방법:
php// 환경 변수 접근
$apiKey = env('API_KEY');
// 기본값 지정
$debug = env('APP_DEBUG', false);
Ruby on Rails
Ruby on Rails는 dotenv-rails
gem을 통해 환경 변수 파일을 지원합니다.
지원 파일명:
.env
.env.development
.env.test
.env.production
사용 방법:
ruby# Gemfile
gem 'dotenv-rails', groups: [:development, :test]
# 환경 변수 접근
api_key = ENV['API_KEY']
프레임워크 선택 시 고려사항
프레임워크의 환경 변수 관리 방식을 고려할 때 다음 사항을 검토하세요:
- 환경 구분 방식: 프레임워크가 개발, 테스트, 프로덕션 등의 환경을 어떻게 구분하는지
- 파일 우선순위: 여러 환경 변수 파일이 있을 때 어떤 순서로 적용되는지
- 클라이언트/서버 구분: 프론트엔드 프레임워크의 경우, 클라이언트에 노출되는 변수와 서버에서만 사용되는 변수를 어떻게 구분하는지
- 타입 지원: 환경 변수 값의 타입 변환이나 유효성 검사를 지원하는지
- 통합 용이성: CI/CD 파이프라인이나 클라우드 서비스와의 통합이 쉬운지
마무리
각 프레임워크는 자체적인 환경 변수 관리 방식을 가지고 있습니다. 프로젝트의 요구사항과 팀의 워크플로우에 맞는 프레임워크를 선택하고, 해당 프레임워크의 환경 변수 관리 모범 사례를 따르는 것이 중요합니다.
다음 포스트에서는 환경 변수 파일을 사용할 때의 보안 모범 사례와 Git 저장소 관리 전략에 대해 알아보겠습니다.