WIL/웹 개발

Spring 애플리케이션 배포 시 GitHub Actions 환경 변수 설정법

아크리미츠 2024. 11. 4. 21:32

GitHub Actions에서 Elastic Beanstalk에 배포할 때 환경 변수를 설정하는 방법에는 $GITHUB_ENV 방식과 직접 Elastic Beanstalk 환경에 설정하는 방식이 있다. 이 두 방식이 어떻게 다른지, 그리고 어떤 상황에 어떤 방법이 좋은지 알아보자.


1. $GITHUB_ENV 파일에 저장하는 방식

먼저 $GITHUB_ENV 파일에 환경 변수를 저장하는 방식이다. GitHub Actions에서 echo로 환경 변수를 $GITHUB_ENV에 추가해두면, 이후 단계에서 바로 사용할 수 있다. 예를 들면:

- name: Set environment variables
  run: |
    echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV
    echo "DB_ID=${{ secrets.DB_ID }}" >> $GITHUB_ENV

이러면 GitHub Actions 워크플로우 안에서는 DB_URL 같은 변수를 참조할 수 있는데, 문제는 이 방식이 배포 후 실제 애플리케이션(Spring 등)에는 적용이 안 된다는 점이다. GitHub Actions 내부에서만 쓸 수 있는 거라, Spring 애플리케이션에서는 이 변수를 못 읽는다.

2. Elastic Beanstalk 환경에 직접 설정하는 방식

이 방식은 AWS CLI를 써서 Elastic Beanstalk 환경에 환경 변수를 직접 설정하는 것이다. 이렇게 설정하면 애플리케이션이 배포된 후에도 Spring이 바로 환경 변수를 읽을 수 있다.

- name: Update Elastic Beanstalk Environment Variables
  run: |
    aws elasticbeanstalk update-environment \
      --application-name ShoppingMall \
      --environment-name test-env \
      --option-settings Namespace=aws:elasticbeanstalk:application:environment,OptionName=DB_URL,Value=${{ secrets.DB_URL }}

이렇게 하면 Elastic Beanstalk에 배포된 Spring 애플리케이션이 DB_URL 같은 환경 변수를 인식하고 가져와서 쓸 수 있다. 그래서 실제 애플리케이션에서 환경 변수를 써야 하는 경우에는 이 방법을 사용해야 한다.

요약

두 방식의 차이점 비교

항목 $GITHUB_ENV 파일에 저장 Elastic Beanstalk 환경 변수 설정
환경 변수 접근 가능 범위 GitHub Actions 내부에서만 사용 가능 Elastic Beanstalk 환경에서 직접 접근 가능
Spring 애플리케이션에서 인식 여부 인식되지 않음 인식 가능
설정 방식 GitHub Actions $GITHUB_ENV에 기록 AWS CLI로 Elastic Beanstalk 환경에 직접 설정
주로 사용되는 경우 CI/CD 파이프라인 내부 작업에서만 필요할 때 애플리케이션 실행 환경에서 직접 참조할 때 필요
  • $GITHUB\_ENV 방식: GitHub Actions 내부에서만 환경 변수 사용 가능. Spring에서는 인식 안 됨.
  • Elastic Beanstalk에 직접 설정: Elastic Beanstalk 환경에서 바로 환경 변수 읽음. Spring에서도 바로 인식 가능.

결론적으로, Spring 애플리케이션이 Elastic Beanstalk에서 환경 변수를 쓰려면, AWS CLI로 환경 변수를 직접 설정하는 게 답이다. $GITHUB_ENV 방식은 CI/CD 파이프라인 안에서만 쓰고 끝낼 변수가 있을 때 적합하다.