Home » LANG » PYTHON » python dotenv dotenv_values 로 파일에서 환경변수를 얻어봅시다.

python dotenv dotenv_values 로 파일에서 환경변수를 얻어봅시다.

민감한 정보는 git에 올라가면 안 됩니다. 하드 코딩하면 안 된다는 의미인데요. 이를 환경 변수로 관리하는 경우가 많아요. .env 등의 파일에서 환경 변수를 얻는 방법이 있습니다. python-dotenv 패키지를 설치하면 가능합니다.

이 글에서는 python dotenv dotenv_values 함수를 이용해서 민감한 정보를 처리하는 방법을 알아봅니다.


dotenv_values 함수

먼저 함수 설명을 간단하게 보겠습니다.

[그림 1] 함수에 대한 설명

꽤 많은 인자들이 있는데요. dotenv_path만 보겠습니다. 이 인자는 읽어들일 env 파일의 경로를 의미합니다. 예를 들어 이 path가 “.env”였다고 해 보겠습니다. 이 경우, .env 파일에서 읽어들이게 됩니다. 이 ENV 파일은 아래와 같은 형식으로 이루어져 있어요.

VARIABLE=VALUE

환경 변수 VARIABLE의 값은 VALUE이다.

예를 들어 환경변수 파일에 A=3이 있다면 환경변수 A의 값은 3이다라는 정보가 파일에 있는 것입니다. 그리고, 이 함수의 리턴값은 딕셔너리입니다. 이 부분 체크하고 넘어가도록 하겠습니다.


프로젝트 세팅하기

그러면, python dotenv dotenv_values 함수를 사용하는 예제를 보겠습니다. 먼저, 프로젝트의 구조를 보도록 합시다.

[그림 2] 프로젝트의 구조

main.py가 있고요. 세 env 파일이 있어요. 보통 이 환경변수 파일들은 프로젝트의 root에 있는 경우가 많으니, .gitignore에 *.env를 추가하곤 해요. 3개의 env 파일이 있어요. 이 세 파일은 각각 어떤 역할을 하는지 봅시다.

  • base
    • 공통으로 정의되는 환경 변수들을 지정합니다.
    • 여기에 변수 ENV가 어떤 환경 변수 파일을 읽을지도 저장합니다.
  • local
    • local 환경 변수들을 저장합니다.
  • prod
    • production 환경 변수들을 저장합니다.

저는 보통 요래 관리합니다. 즉, base는 공통 환경 변수들을 저장합니다. 그리고, 어떤 파일을 읽을지도 같이 저장해요. 환경에 따라 달라지는 변수들은 local.env와 prod.env로 따로 저장함을 볼 수 있어요. 이를 그림으로 그리면 아래와 같습니다.

이제 환경 변수 파일들을 봅시다.

[그림 3] base.env

먼저 base.env입니다. ENV=local이라고 되어 있습니다. 저는 이 ENV 변수를 selector 역할로 할 겁니다. 이게 local이면 local.env를 추가로 읽어들이고, prod면 prod.env를 읽어들이는 식입니다.

[그림 4] local.env

local.env입니다. 변수 A의 값이 2라는 정보가 저장되어 있습니다.

[그림 5] prod.env

다음 prod.env입니다. 변수 A의 값이 3이라는 정보가 저장되어 있습니다.


main.py 보기

이제 main.py를 보겠습니다.

[그림 6] main.py

dotenv_values가 읽어들인 환경변수들에 대한 정보를 딕셔너리로 반환한다는 사실을 이용해 봅시다. 그러면, 3번째 줄은 base.env로부터 읽은 환경변수들을 딕셔너리 형태로 가지고 있을 겁니다. 다음에, 4번째 줄에, |= 연산자를 사용하는데요. 딕셔너리에서 |= 연산은 합치는 연산입니다.

고로, 3번째 줄과 4번째 줄은 무슨 의미인가?

  • base.env로부터 읽은 환경변수 정보를 config에 추가합니다.
  • config에 있는 키가 ENV인 것의 값을 value라고 할 때
    • value.env로부터 읽은 환경변수 정보를 config에 추가합니다.

여기까지 복잡하지 않지요? base.env에는 ENV=local이 저장되어 있었으니, local.env에 있는 환경변수도 같이 읽어올 겁니다.

[그림 7] 읽어온 변수들

ENV의 값은 local, A의 값은 2로 읽어왔어요.

[그림 8] 바뀐 base.env

이제 base.env 파일에서, ENV=prod로 바꿔 보겠습니다. 그러면 어떻게 될까요?

그러면 local.env 대신에 prod.env를 읽어올 겁니다. 이 파일에는 A=3, 즉 A의 값은 3이라는 정보가 저장되어 있습니다.

[그림 9] 바뀐 A의 값을 읽은 결과

따라서, ENV는 prod로 읽어오고, A의 값은 local.env가 아닌 prod.env로 읽어오게 됩니다.

Leave a Comment

8 − 6 =