Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 환경 변수 완벽 가이드: 설정, 조회, 삭제부터 dotenv 활용까지

여러 환경에서 애플리케이션을 개발하다 보면 환경마다 서로 다른 설정값을 지정해야 하는 경우가 많습니다. 개발용 컴퓨터와 실제 배포 환경의 서버는 같지 않기 때문입니다.

바로 이럴 때 환경 변수(environment variable)가 유용하게 사용됩니다!

이 글에서는 환경 변수가 무엇인지, 어떻게 활용할 수 있는지 살펴보고, Python 환경 변수 예제를 통해 직접 사용하는 방법까지 단계별로 안내합니다.

환경 변수란 무엇인가?

환경 변수란 프로그램 외부에서 값이 설정되는 변수를 의미합니다.

환경 변수를 활용하면 애플리케이션을 빌드하는 환경에 따라 동일한 변수에 서로 다른 값을 지정할 수 있습니다.

환경 변수는 왜 사용할까?

특히 여러 명이 함께 작업하는 협업 프로젝트의 경우, 하나의 애플리케이션이 여러 개의 환경을 갖는 경우가 많습니다. 테스트 환경, 프로덕션(운영) 환경, 개발 환경 등이 대표적이며, 이러한 환경들은 각각 다른 설정값을 필요로 합니다.

예를 들어, 프로덕션 환경에서 사용하는 API 키와 로컬 머신에서 사용하는 API 키는 대부분 다릅니다. 로컬에서는 더미 데이터(dummy data)를 사용해도 괜찮지만, 운영 환경에서는 그렇게 할 수 없습니다.

환경 변수의 값은 프로그램 코드를 수정하지 않고도 변경할 수 있습니다. 따라서 새로운 환경에 배포할 때 설정값을 일일이 교체하지 않고도 손쉽게 코드 변경 사항을 반영할 수 있습니다.

또한 환경 변수는 보안 측면에서도 중요한 역할을 합니다. API 키나 설정값을 메인 프로그램 코드에 직접 작성하면 프로젝트에 참여하는 모든 사람이 그 값을 볼 수 있어 위험합니다. 반면 환경 변수로 값을 선언하면 해당 프로그램과 변수를 설정한 개발자만 접근할 수 있습니다.

환경 변수 설정 방법

먼저 환경 변수를 생성하는 방법부터 알아보겠습니다. Python 세션 내에서 설정한 환경 변수는 해당 세션이 종료되면 사라집니다. 즉, Python 인터프리터를 닫으면 스크립트에서 설정했던 변수가 초기화됩니다.

Airtable API를 사용하는 앱을 개발한다고 가정해 보겠습니다. 코드를 GitHub에 공유할 예정이므로 API 키가 외부에 노출되는 것을 원하지 않습니다. 이때 환경 변수를 사용하면 코드에 API 키를 포함시키면서도 공개되지 않도록 할 수 있습니다.

첫 번째 단계는 os 라이브러리를 임포트하는 것입니다:

import os

os 라이브러리에는 Python 환경 변수를 다루는 기능이 포함되어 있습니다. 다음으로 환경 변수를 설정해 보겠습니다:

os.environ["AIRTABLE_KEY"] = "YOUR_API_KEY"

이 코드는 AIRTABLE_KEY라는 이름의 환경 변수를 생성하고, 그 값을 YOUR_API_KEY로 지정합니다. 환경 변수에 값을 할당하는 방식은 딕셔너리(dictionary)의 값을 변경하는 것과 비슷합니다.

설정하거나 변경하려는 변수 이름을 지정하고, 등호(=) 뒤에 할당하고자 하는 값을 적어주면 됩니다.

동일한 문법으로 기존 환경 변수의 값도 변경할 수 있습니다:

os.environ["AIRTABLE_KEY"] = "YOUR_API_KEY_2"

이제 API 키의 값은 YOUR_API_KEY_2로 변경되었습니다.

환경 변수 조회 방법

환경 변수를 설정했다면, 이번에는 그 값을 어떻게 가져올 수 있는지 알아야겠죠? 이때 os.environ.get() 메서드를 사용합니다.

AIRTABLE_KEY 변수의 값을 조회해 보겠습니다:

api_key = os.environ.get("AIRTABLE_KEY")
print(api_key)

위 코드는 AIRTABLE_KEY 환경 변수의 값을 가져와 새로운 변수 api_key에 할당한 뒤, 콘솔에 출력합니다.

실행 결과는 YOUR_API_KEY_2입니다.

현재 설정된 모든 환경 변수 목록을 확인하려면 os.environ의 내용을 콘솔에 출력하면 됩니다:

print(os.environ)

Python에는 기본적으로 설정되어 있는 환경 변수들이 여러 개 있습니다. 따라서 모든 환경 변수를 출력하면 상당히 긴 목록이 반환될 수 있습니다.

환경 변수 삭제 방법

Python 프로젝트에서 환경 변수를 삭제할 수도 있습니다. 이때는 os.environ.pop() 메서드를 사용합니다. AIRTABLE_KEY 환경 변수를 삭제해 보겠습니다:

os.environ.pop("AIRTABLE_KEY")

이 코드는 AIRTABLE_KEY 환경 변수를 제거합니다.

다만 여러 개의 환경 변수를 한꺼번에 정리해야 할 때는 pop()을 반복 호출하는 것이 비효율적입니다. 프로젝트의 새 인스턴스를 시작하거나 세션의 모든 환경 변수를 초기화하고 싶다면, 재정의해야 할 값이 수십 개에 달할 수도 있습니다.

이럴 때 clear() 메서드가 유용합니다. 세션의 모든 환경 변수를 제거해 보겠습니다:

os.environ.clear()
print(os.environ)

이 코드는 모든 환경 변수의 값을 지운 뒤, 현재 세션의 환경 변수 목록을 출력합니다:

{}

주의할 점은, Python이 기본적으로 설정하는 환경 변수 중 프로젝트에 필요한 것이 있을 수 있다는 것입니다. 따라서 clear() 메서드는 프로그램에서 더 이상 어떤 환경 변수도 필요로 하지 않는다고 확신할 때만 사용해야 합니다. 일반적으로는 특정 변수만 정확히 제거하는 pop() 메서드를 사용하는 것이 더 안전합니다.

dotenv로 환경 변수 관리하기

dotenv 라이브러리는 환경 변수를 관리하는 데 유용한 여러 기능을 제공합니다.

특히 dotenv를 사용하면 파일에서 환경 변수를 읽어올 수 있습니다. 즉, Python 셸에서 일일이 변수를 선언할 필요가 없습니다.

모듈 파일에서 환경 변수를 읽어오는 방식은 읽어야 할 값이 많을 때 훨씬 편리하며, 나중에 값을 변경해야 할 때도 관리가 수월합니다.

dotenv 패키지를 사용하려면 먼저 설치해야 합니다. easy_install 또는 pip로 설치할 수 있습니다.

환경 변수를 정의하기 위해 .env라는 이름의 파일을 생성해 보겠습니다. 명령줄에서 touch 명령어로 만들 수 있습니다:

touch .env

.env 파일을 열고 다음 내용을 추가합니다:

AIRTABLE_KEY=YOUR_API_KEY_3

환경 변수는 일반 변수와 마찬가지 방식으로 할당합니다. 등호 왼쪽에는 변수 이름을, 오른쪽에는 저장할 값을 적으며, 두 값은 등호로 구분됩니다.

다음으로 .env 파일의 변수들을 불러오겠습니다:

from dotenv import load_dotenv

load_dotenv()

이 코드는 dotenv 라이브러리에서 load_dotenv() 메서드를 임포트하여 실행합니다. 이를 통해 .env 파일에 있는 모든 변수가 환경으로 읽어 들여집니다.

이제 os 라이브러리로 변수를 조회해 보겠습니다:

import os

api_key = os.environ.get("AIRTABLE_KEY")
print(api_key)

실행 결과는 YOUR_API_KEY_3입니다. API 키는 .env 파일 안에 설정되어 있었지만, load_dotenv() 메서드가 환경 변수를 로드하여 os.environ을 통해 접근 가능하게 만들었습니다.

마무리

환경 변수는 프로그램 외부에서 값을 설정하기 위해 사용되는 미리 정의된 값입니다. 이름 그대로 서로 다른 환경을 구성하는 데 널리 활용됩니다.

환경 변수는 비밀값(secret)을 안전하게 설정할 수 있는 방법이기도 합니다. API 키를 애플리케이션 코드에 직접 추가하면 코드를 보는 누구나 그 값을 읽을 수 있습니다. 하지만 환경 변수에 설정하면 자신과 프로그램만 그 값을 볼 수 있습니다.

이제 여러분도 전문가처럼 Python 코드에서 환경 변수를 활용할 준비가 되었습니다!