[python] python-dotenv를 사용하여 CI/CD 환경 설정하기

CI/CD(Continuous Integration / Continuous Deployment)는 소프트웨어 개발에서 매우 중요한 부분입니다. 이를 통해 코드의 품질과 안정성을 유지하고, 새로운 기능을 신속하게 배포할 수 있습니다. CI/CD 환경을 구축할 때는 보안과 환경 변수 관리에 대해 신경써야 합니다. 이때 python-dotenv 라이브러리를 사용하면 편리한 방법으로 환경 변수를 관리할 수 있습니다.

python-dotenv란?

python-dotenv는 Python 프로젝트에서 환경 변수를 관리하기 위한 도구입니다. 일반적으로 설정 파일에 환경 변수를 저장하는 대신 .env 파일에 저장하여 관리합니다. .env 파일은 해당 프로젝트의 루트 디렉토리에 저장되며, 개발 환경에 따라 다른 값을 설정할 수 있습니다. 이렇게 함으로써 환경 변수와 관련된 보안 문제를 줄이고, 다른 환경에서의 배포를 용이하게 할 수 있습니다.

python-dotenv 설치

python-dotenv를 사용하기 위해서는 먼저 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다.

pip install python-dotenv

.env 파일 생성 및 관리

python-dotenv를 사용하기 위해 먼저 .env 파일을 생성해야 합니다. 이 파일에는 환경 변수와 해당 값들을 저장합니다.

DB_HOST=localhost
DB_PORT=5432
DB_NAME=test
DB_USER=postgres
DB_PASSWORD=password123

.env 파일은 위와 같이 key-value 쌍으로 구성되어 있습니다. 이 예시에서는 데이터베이스 연결에 필요한 변수들을 설정하였습니다.

파이썬 코드에서는 다음과 같이 dotenv 모듈을 사용하여 .env 파일의 변수를 로드할 수 있습니다.

import os
from dotenv import load_dotenv

load_dotenv('.env')

host = os.getenv('DB_HOST')
port = os.getenv('DB_PORT')
name = os.getenv('DB_NAME')
user = os.getenv('DB_USER')
password = os.getenv('DB_PASSWORD')

# 실행 코드

위의 코드를 실행하면 .env 파일에서 설정된 환경 변수들을 파이썬 코드에서 사용할 수 있습니다.

CI/CD 환경에서 사용하기

CI/CD 환경에서는 환경 변수 관리가 중요합니다. 다양한 환경에서 코드를 빌드하고 테스트하는 과정에서 해당 환경에 맞는 변수들을 사용해야 합니다. python-dotenv는 이를 간편하게 할 수 있도록 도와줍니다.

보통 CI/CD 환경에서는 설정 파일을 사용하여 환경 변수를 설정합니다. 하지만 이러한 설정 파일을 코드에 포함하는 것은 보안에 취약할 수 있습니다. python-dotenv를 사용하면 .env 파일을 CI/CD 환경의 설정 파일로 사용하여 환경 변수를 관리할 수 있습니다.

CI/CD 환경에서는 Repository의 Secret 또는 Environment Variables 기능을 사용하여 .env 파일을 안전하게 관리할 수 있습니다. 이때 .env 파일을 Repository에 포함하지 않도록 주의해야 합니다. CI/CD 서비스에서 지원하는 방식으로 .env 파일을 관리하면 됩니다.

아래는 GitHub Actions를 사용하는 CI/CD 환경에서 python-dotenv를 사용하는 예시입니다.


name: CI

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.x

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Set up Environment Variables
        run: |
          echo "DB_HOST=${{ secrets.DB_HOST }}" >> .env
          echo "DB_PORT=${{ secrets.DB_PORT }}" >> .env
          echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env
          echo "DB_USER=${{ secrets.DB_USER }}" >> .env
          echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env

      - name: Run tests
        run: python tests.py

위의 코드에서는 .env 파일을 동적으로 생성하여 환경 변수를 설정하고, 테스트 코드를 실행합니다. 이때 GitHub Repository의 Secret을 사용하여 .env 파일에 저장된 환경 변수 값을 제공합니다.

마무리

python-dotenv를 사용하면 CI/CD 환경에서 환경 변수를 편리하게 관리할 수 있습니다. .env 파일을 사용하여 환경 변수를 설정하고, CI/CD 환경에서 이 파일을 안전하게 관리할 수 있습니다. 이를 통해 안정적이고 보안성 높은 CI/CD 프로세스를 구축할 수 있습니다.