본문 바로가기
Computer Science/CS 지식

.env 파일 - 환경 변수로 설정 관리하기

by rnasterofmysea 2025. 10. 29.
반응형

 

.env 파일 - 환경 변수로 설정 관리하기

1. .env란 무엇인가

.env는 Environment(환경)의 약자로, 파이썬 프로젝트에서 환경 변수를 관리하기 위한 설정 파일이다.
코드 안에 직접 비밀번호, API 키, 서버 주소 등을 적는 대신 .env 파일에 따로 저장해 두고, 프로그램이 실행될 때 불러오는 방식이다.

 

2. .env를 사용하는 이유


 

보안 민감한 정보를 코드에 직접 쓰지 않아도 된다.
유연성 개발, 테스트, 운영 환경별로 설정을 쉽게 바꿀 수 있다.
협업 편의 .gitignore에 포함시켜 Git에 노출되지 않도록 할 수 있다.
호환성 Docker, FastAPI, Django 등 다양한 프레임워크에서 지원된다.

 

3. .env 파일 작성법

.env 파일은 단순한 텍스트 파일로, 이름=값 형태로 작성한다.

 
# 데이터베이스 설정
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASS=secret123

# API 설정
API_KEY=abcd1234
DEBUG=True

 

작성 규칙

  • = 앞뒤에 공백을 넣지 않는다.
    예: DB_USER=admin (O), DB_USER = admin (X)
  • #으로 시작하는 줄은 주석으로 처리된다.
  • 문자열은 따옴표로 감싸도 되고, 생략해도 된다.
     

 

4. .env 파일 위치

일반적으로 .env 파일은 프로젝트 루트 디렉터리에 둔다.

myproject/
 ├── main.py
 ├── requirements.txt
 └── .env

 

5. Python에서 .env 사용하기

파이썬 표준 라이브러리에는 .env 지원이 없으므로, python-dotenv 라이브러리를 설치해야 한다.

 
pip install python-dotenv
from dotenv import load_dotenv
import os

# .env 파일 불러오기
load_dotenv()

# 환경변수 읽기
db_user = os.getenv("DB_USER", "env에서 읽지 못하면 이 부분을 참조한다")
db_pass = os.getenv("DB_PASS", "env에서 읽지 못하면 이 부분을 참조한다")
api_key = os.getenv("API_KEY", "env에서 읽지 못하면 이 부분을 참조한다")

print(f"DB_USER={db_user}")
print(f"API_KEY={api_key}")

 

6. .env와 Git 보안 설정

.env 파일에는 비밀번호나 토큰 등이 들어 있기 때문에 GitHub에 업로드되면 안 된다.
이를 방지하려면 .gitignore 파일에 다음을 추가한다.

.env
 

이렇게 하면 .env 파일이 Git 버전 관리에서 제외된다.

 

7. 실전 예시: FastAPI에서 .env 사용하기

 
 
from fastapi import FastAPI
from dotenv import load_dotenv
import os

load_dotenv()
app = FastAPI()

@app.get("/config")
def read_config():
    return {
        "DB_HOST": os.getenv("DB_HOST"),
        "DEBUG": os.getenv("DEBUG")
    }

8. 정리

.env 파일은 파이썬 프로젝트에서 설정을 안전하고 유연하게 관리하는 핵심 도구다.
보안을 강화하고 환경별 설정을 쉽게 바꿀 수 있으며, 대부분의 프레임워크에서 기본적으로 지원된다.

요약

  • .env는 환경 변수 설정 파일이다.
  • KEY=VALUE 형식으로 작성한다.
  • python-dotenv로 불러와서 사용한다.
  • .gitignore에 .env를 반드시 추가한다.

 

9. 추가 팁

Docker Compose에서도 .env 파일을 그대로 사용할 수 있다.

 

.env
IMAGE_TAG=latest
DB_PORT=5432

 

docker-compose.yml

services:
  db:
    image: postgres:${IMAGE_TAG}
    ports:
      - "${DB_PORT}:5432"
반응형