Django 프로젝트에서 django-environ과 .env 파일 인코딩 문제 해결하기

Django 프로젝트에서 설정 파일을 관리할 때 django-environ 라이브러리를 통해 .env 파일을 읽어들이곤 합니다. 하지만 운영체제에 따라 파일 인코딩이 다르게 동작할 수 있어 주의가 필요합니다.

문제의 원인: 운영체제별 기본 파일 인코딩

파이썬에서 파일을 텍스트 모드로 열 때, encoding 인자를 지정하지 않으면 운영체제의 기본 인코딩을 사용합니다:

  • Mac/Linux: 기본 인코딩은 utf-8입니다.
  • 한글 Windows: 기본 인코딩은 cp949입니다.

대부분의 소스 파일은 utf-8 인코딩으로 작성되지만, .env 파일에 한글 주석이 포함된 경우 한글 Windows 환경에서 파일을 읽을 때 cp949 인코딩으로 처리됩니다. 이로 인해 UnicodeDecodeError가 발생할 수 있습니다.

기존의 해결 방법

이 문제를 피하기 위해 그동안 .env 파일을 열 때 인코딩을 명시적으로 utf-8로 지정해야 했습니다. 예를 들면:

# ...

import environ

env_path = BASE_DIR / ".env"
env = environ.Env()

if env_path.is_file():
    with env_path.open(encoding="utf8") as f:
        env.read_env(f, overwrite=True)

이렇게 매번 파일을 수동으로 열고 인코딩을 지정해야 했기 때문에 번거로움이 있었습니다.


최신 django-environ의 변화

최신 버전의 django-environ 라이브러리는 기본 파일 인코딩을 utf-8로 설정합니다. 즉, 이제 파일을 읽을 때 따로 인코딩을 지정하지 않아도 utf-8이 적용됩니다.

코드 예시 (최신 버전 적용):
# ...

import environ

env_path = BASE_DIR / ".env"
env = environ.Env()

if env_path.is_file():
    env.read_env(env_path, overwrite=True)

정리

  • 문제: 한글 Windows 환경에서 .env 파일에 한글 주석이 있을 때, 엉뚱한 인코딩으로 디코딩하여 UnicodeDecodeError 발생.
  • 기존 해결법: 파일을 열 때 encoding="utf-8" 명시.
  • 최신 해결법: django-environ 라이브러리에서 기본 인코딩이 utf-8이므로 별도 설정 필요 없음.

최신 버전을 사용하면 더 깔끔하고 편리하게 .env 파일을 관리할 수 있습니다.


참고 사항

  • 프로젝트에서 django-environ의 최신 버전을 사용하고 있는지 확인하세요:
pip install --upgrade django-environ
  • 기존 코드에서 인코딩을 수동으로 지정한 부분은 정리해도 됩니다.
  • 마지막 편집일시 : 2024년 12월 17일 2:01 오후
  • 최초 생성일시 : 2024년 12월 17일 1:52 오후
🌟 본 포스팅이 도움이 되셨다면 댓글 하나 남겨주시고, 널리 공유도 부탁드립니다. 🌟

댓글