← 개발 로그 목록

LearningCollector: .env 로드 실패 문제 해결

/ 4분 분량 / 개발 로그

이번 커밋에서는 `load_dotenv()` 함수 호출 시 `.env` 파일의 경로를 명확하게 지정하여, 실행 위치에 따른 환경변수 로드 실패 문제를 해결했습니다. 작업은 2026년 4월 2일에 이루어졌습니다.

LearningCollector: .env 로드 실패 문제 해결

이번 커밋에서는 load_dotenv() 함수 호출 시 .env 파일의 경로를 명확하게 지정하여, 실행 위치에 따른 환경변수 로드 실패 문제를 해결했습니다. 작업은 2026년 4월 2일에 이루어졌습니다.

요약

load_dotenv() 함수에 .env 파일의 절대 경로를 인자로 전달하여, 프로그램 실행 위치와 관계없이 .env 파일이 올바르게 로드되도록 수정했습니다.

배경 및 목적

기존에는 load_dotenv() 함수를 인자 없이 호출하여 .env 파일을 로드했습니다. 이 방식은 스크립트가 실행되는 현재 작업 디렉터리를 기준으로 .env 파일을 찾기 때문에, 실행 위치에 따라 .env 파일을 찾지 못해 환경변수를 로드하지 못하는 문제가 발생했습니다. 이 문제를 해결하여 환경변수 로드의 안정성을 높이고자 했습니다.

구현 내용

  • 주요 변경사항 상세 설명: main.py 파일의 load_dotenv() 호출 부분을 수정했습니다. 기존에는 load_dotenv()로 되어 있었던 것을, .env 파일의 경로를 명시적으로 지정하는 load_dotenv(dotenv_path=env_path)로 변경했습니다. env_path 변수는 .env 파일의 절대 경로를 담고 있습니다.
  • 변경 파일 목록:
    • main.py
  • 추가/삭제된 코드 라인 수:
    • 추가: 1 라인
    • 삭제: 1 라인
  • 핵심 코드 설명:
    # main.py (수정 전)
    # load_dotenv()
    
    # main.py (수정 후)
    load_dotenv(dotenv_path=env_path)
    
    위와 같이 load_dotenv() 호출 방식이 변경되었습니다.

기술적 의사결정

  • 선택한 기술/라이브러리: python-dotenv 라이브러리의 load_dotenv() 함수
  • 선택 이유: .env 파일에 저장된 환경변수를 파이썬 프로그램에서 쉽게 로드하기 위해 python-dotenv 라이브러리를 사용하고 있습니다. load_dotenv() 함수는 .env 파일을 로드하는 표준적인 방법입니다.
  • 다른 대안:
    • .env 파일을 직접 열어서 환경변수를 파싱하는 방법도 고려할 수 있습니다.
  • 대안과의 비교:
    • .env 파일을 직접 파싱하는 방식은 python-dotenv 라이브러리를 사용하는 것보다 코드가 더 복잡해지고, 예외 처리가 번거로울 수 있습니다. python-dotenv는 이러한 과정을 단순화해줍니다.
  • 장단점 분석:
    • 장점: .env 파일의 경로를 명시적으로 지정함으로써 실행 위치에 따른 로드 실패 문제를 근본적으로 해결할 수 있습니다. env_path 변수에 항상 올바른 경로가 지정된다면 안정적으로 환경변수를 로드할 수 있습니다.
    • 단점: env_path 변수가 정확하게 설정되지 않으면 여전히 문제가 발생할 수 있습니다. .env 파일의 경로를 관리하는 추가적인 노력이 필요합니다.

배운 점 및 개선점

  • 이번 작업을 통해 배운 점:
    • 외부 설정 파일(여기서는 .env)을 로드할 때, 실행 환경에 따라 경로 문제가 발생할 수 있음을 알게 되었습니다.
    • 라이브러리 함수의 옵션을 명확히 지정하는 것이 코드의 안정성을 높이는 데 중요함을 배웠습니다.
  • 앞으로 개선할 점:
    • .env 파일의 경로를 main.py 파일 내에서 하드코딩하는 대신, 좀 더 동적으로 관리하는 방법을 고려해볼 수 있습니다. 예를 들어, 스크립트의 위치를 기준으로 상대 경로를 계산하거나, 환경변수를 통해 .env 파일의 위치를 지정하는 방식입니다.
  • 다음 단계 계획:
    • env_path 변수가 올바르게 초기화되는지 확인하는 테스트 코드를 작성할 예정입니다.

참고 자료