환경변수 설정하고 Python에서 읽어오기

환경변수 설정하고 Python에서 읽어오기

Python
환경변수 설정하고 Python에서 읽어오기
Author

gabriel yang

Published

August 1, 2024

환경변수 설정하고 Python에서 읽어오기

우분투에서 환경변수를 설정하고 Python에서 해당 환경변수를 읽어오는 방법에 대해 알아보겠습니다. 환경변수는 시스템의 동작에 영향을 미치는 중요한 설정을 저장하는 데 사용됩니다. 예를 들어, 데이터베이스 연결 정보나 API 키를 환경변수에 저장하여 애플리케이션에서 쉽게 사용할 수 있습니다.

우분투에서 환경변수 설정하기

우분투에서 환경변수를 설정하는 방법에는 여러 가지가 있지만, 가장 일반적인 방법은 .bashrc 파일이나 .profile 파일을 수정하는 것입니다. 여기서는 .bashrc 파일을 사용하는 방법을 설명합니다.

환경변수 추가하기

.bashrc 터미널에서 아래 명령어를 입력하여 .bashrc 파일을 엽니다.

nano ~/.bashrc

파일의 맨 아래에 환경변수를 추가합니다. 예를 들어, MY_ENV_VAR라는 이름의 환경변수를 설정하고 싶다면 다음과 같이 추가합니다.

export MY_ENV_VAR="my_value"

Python에서 환경변수 읽어오기

Python에서는 os 모듈을 사용하여 환경변수를 읽어올 수 있습니다. 다음은 환경변수를 읽어오는 간단한 예제입니다.

Python 코드로 환경변수 읽어오기

import os

# 환경변수 읽어오기
my_env_var = os.getenv('MY_ENV_VAR')

# 환경변수 출력하기
if my_env_var:
    print(f"MY_ENV_VAR: {my_env_var}")
else:
    print("MY_ENV_VAR 환경변수가 설정되지 않았습니다.")

위 코드를 example.py라는 파일에 저장하고, 터미널에서 아래 명령어를 입력하여 실행합니다.

python3 example.py

실행 결과로 환경변수의 값이 출력될 것입니다.

환경변수를 사용하는 이유

환경변수는 소프트웨어 및 시스템에서 중요한 역할을 하는 설정 값들을 관리하는 데 사용됩니다. 환경변수를 사용하는 이유와 예시를 살펴보겠습니다.

  1. 보안 강화: 환경변수는 코드에서 민감한 정보를 숨길 수 있는 방법을 제공합니다. API 키, 비밀번호, 데이터베이스 접속 정보 등은 환경변수에 저장하고 코드에서는 이 변수를 참조하여 보안을 강화할 수 있습니다.

  2. 유연성 및 재사용성: 환경변수를 사용하면 애플리케이션을 다양한 환경(개발, 테스트, 프로덕션 등)에서 쉽게 설정할 수 있습니다. 코드 변경 없이 환경변수만 수정하면 다른 환경에서 동일한 코드가 동작하도록 설정할 수 있습니다.

  3. 구성 관리: 환경변수를 통해 애플리케이션의 설정을 중앙에서 관리할 수 있습니다. 다양한 설정 값들을 코드와 분리하여 관리함으로써 설정의 유지보수성을 높일 수 있습니다.

  4. 배포 용이성: 배포 시 다양한 환경에 맞게 설정을 조정할 수 있습니다. 환경변수를 활용하면 소스 코드를 수정하지 않고도 환경에 맞는 설정을 쉽게 적용할 수 있습니다.

데이터베이스 연결 정보

애플리케이션에서 데이터베이스에 연결할 때, 환경변수를 사용하여 데이터베이스 주소, 사용자 이름, 비밀번호 등을 설정할 수 있습니다. 이렇게 하면 코드를 배포할 때 데이터베이스 연결 정보를 쉽게 변경할 수 있습니다.

예시:

아래의 코드로 환경변수 설정 DB서버에서 필요한 로그인 정보를 환경변수로 저장합니다.

export DB_HOST="localhost"
export DB_USER="admin"
export DB_PASS="secret_password"

이제 getenv()함수를 이용해서 DB가 동작할 때 필요한 정보를 읽어올 수 있습니다. 동작되는 서버마다 접속에 필요한 정보가 다른 경우 환경변수를 서버마다 독립적으로 관리할 수 있기 때문에 유지/보수가 편리합니다.

import os
import psycopg2

db_host = os.getenv('DB_HOST')
db_user = os.getenv('DB_USER')
db_pass = os.getenv('DB_PASS')

conn = psycopg2.connect(
    host=db_host,
    user=db_user,
    password=db_pass
)

API 키 관리

클라우드 서비스나 외부 API를 사용할 때 API 키를 환경변수로 설정하여 코드에 직접 포함시키지 않고 안전하게 관리할 수 있습니다. 환경변수를 아래와 같이 설정합니다.

export API_KEY="your_api_key_here"

API Key를 코드에 노출하지 않고 API를 사용할 수 있습니다.

import os
import requests

api_key = os.getenv('API_KEY')
response = requests.get(f"https://api.example.com/data?api_key={api_key}")

print(response.json())

애플리케이션 설정

애플리케이션의 다양한 설정(예: 로깅 수준, 서버 포트 등)을 환경변수로 관리하여 코드와 설정을 분리할 수 있습니다. 이를 통해 애플리케이션을 실행할 때 설정을 쉽게 조정할 수 있습니다.

export LOG_LEVEL="DEBUG"
export PORT=8000

서버에 저장된 환경변수를 이용해서 필요에 따라서 디버그 정보를 출력할 수 있습니다.

import os
import logging

log_level = os.getenv('LOG_LEVEL', 'INFO')
port = int(os.getenv('PORT', 8080))

logging.basicConfig(level=log_level)
logging.info(f"Starting server on port {port}")

이처럼 환경변수는 보안, 유연성, 구성 관리, 배포 용이성 등을 고려할 때 매우 유용합니다. 환경변수를 잘 활용하면 코드와 설정을 효과적으로 분리하고, 다양한 환경에서 일관된 동작을 유지할 수 있습니다.

주의사항

  • 환경변수의 보안: 환경변수에 중요한 정보(예: API 키, 비밀번호 등)를 저장할 때는 해당 정보를 안전하게 관리해야 합니다. 특히 코드와 함께 버전 관리 시스템에 업로드하지 않도록 주의하세요.
  • 영향 범위: .bashrc에 설정한 환경변수는 해당 사용자의 터미널 세션에서만 유효합니다. 시스템 전체에 적용하려면 /etc/environment 파일을 수정할 수도 있습니다.

이제 우분투에서 환경변수를 설정하고 Python에서 해당 변수를 읽어오는 방법을 알게 되었습니다. 이 방법을 활용하여 다양한 설정을 손쉽게 관리해 보세요!

<h3>카테고리 다른 글</h3>
Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Nov 26, 2024 VSCode에서 Python 디버깅 (launch.json 설정) gabriel yang
Nov 23, 2024 Python 설치된 패키지 확인, 설치와 복원하기 gabriel yang
Oct 14, 2024 JSON 파일에서 특정 key의 값 변경 후 저장하는 방법 gabriel yang
Oct 10, 2024 날짜 문자열을 날짜 형식으로 변환하기 gabriel yang
Oct 8, 2024 Request를 통한 JIRA REST API 사용방법 gabriel yang
Oct 8, 2024 Request 라이브러리 사용방법 gabriel yang
Oct 8, 2024 Requests 라이브러리로 베이직 인증 API 호출하기 gabriel yang
Oct 7, 2024 Python으로 SSH를 제어하기 gabriel yang
Oct 7, 2024 Pytest로 테스트하기 gabriel yang
Oct 7, 2024 Pytest 기본적인 테스트 실행 방법 gabriel yang
Oct 7, 2024 Pytest Fixture 개념과 필요성 gabriel yang
Oct 7, 2024 CI 환경에서 Pytest 사용하기 gabriel yang
Oct 7, 2024 파이썬에서 테스트 코드 리팩토링 기법 gabriel yang
Oct 5, 2024 Python os 모듈을 이용한 파일과 폴더 관리 gabriel yang
Oct 5, 2024 Python shutil 모듈을 이용한 파일과 폴더 관리 gabriel yang
Oct 5, 2024 MongoDB 데이터베이스 백업 및 복원 방법 gabriel yang
Oct 5, 2024 Python jira 라이브러리를 이용해 JIRA를 관리하는 방법 gabriel yang
Oct 4, 2024 Python에서 JSON 파일 읽기 및 데이터 활용 gabriel yang
Oct 4, 2024 JSON 데이터 수정하기 gabriel yang
Oct 4, 2024 JSON 파일의 구성요소와 구조 gabriel yang
Oct 4, 2024 Python에서 Git명령 사용하기 gabriel yang
Oct 3, 2024 파이썬으로 클래스 정의하는 방법 gabriel yang
Oct 3, 2024 파이썬의 상속(Inheritance) 이해하기 gabriel yang
Oct 3, 2024 파이썬 클래스의 self 이해하기 gabriel yang
Oct 3, 2024 파이썬에서 추상 클래스(Abstract Class) 사용하기 gabriel yang
Oct 3, 2024 파이썬 클래스 활용 예시 gabriel yang
Oct 3, 2024 파이썬 클래스와 모듈 gabriel yang
Oct 3, 2024 파이썬에서 Lock을 사용하는 이유와 방법 gabriel yang
Oct 2, 2024 Python에서 zip()을 사용하는 이유와 방법 gabriel yang
Oct 2, 2024 파이썬 시퀀스 슬라이싱 gabriel yang
Oct 2, 2024 파이썬에서 Generator를 사용하는 이유와 사용법 gabriel yang
Oct 2, 2024 파이썬의 @property 기능 gabriel yang
Oct 2, 2024 파이썬 시퀀스 언패킹 gabriel yang
Oct 2, 2024 파이썬 데이터 정렬 gabriel yang
Oct 2, 2024 파이썬 딕셔너리 key 예외처리하기 gabriel yang
Oct 2, 2024 파이썬의 defaultdict 사용법 gabriel yang
Oct 2, 2024 파이썬의 try-except 사용법 gabriel yang
Oct 2, 2024 파이썬의 클로저(Clsure) 사용법 gabriel yang
Oct 2, 2024 파이썬의 가변인자 사용법 gabriel yang
Oct 2, 2024 파이썬의 컴프리헨션(Comprehension) 사용법 gabriel yang
Oct 1, 2024 파이썬 가상환경 설정 gabriel yang
Oct 1, 2024 파이썬을 이용한 테스트 자동화 gabriel yang
Oct 1, 2024 파이썬 docstring을 사용하는 이유와 방법 gabriel yang
Oct 1, 2024 파이썬 yield 제너레이터와 효율적인 반복 처리 gabriel yang
Oct 1, 2024 파이썬 데이터 언패킹 gabriel yang
Oct 1, 2024 Python에서 enumerate를 사용하는 이유와 사용 방법 gabriel yang
Sep 30, 2024 Python 설치 및 기본 파이썬 버전 설정 gabriel yang
Sep 30, 2024 Python을 이용한 폴더 전체 복사 방법 gabriel yang
Sep 30, 2024 Public Key와 Private Key의 역할 gabriel yang
Sep 23, 2024 Python의 @dataclass 데코레이터 gabriel yang
Aug 30, 2024 Python shell명령 수행하기 (Subprocess) gabriel yang
Aug 29, 2024 Google Colab에서 라이브러리 설치하기 gabriel yang
Jan 1, 2024 코루틴(coroutine)과 이벤트 루프 gabriel yang
No matching items
Back to BLOG LIST