코드 레포지토리에는 인증정보(Secret)을 커밋해선 안됩니다. 심지어 프라이빗 레포지토리도 안됩니다.
깃허브는 프라이빗 저장소를 포함해서 해킹 당한 적이 있습니다. 해당 사건 이후 몇몇 사용자가 GitLab을 비롯한 자체 호스팅 레포지토리를 사용하기 시작한 것으로 압니다.
이 문제에 대응하기 위한 올바른 해결책 중 하나는 .env를 사용하는 것입니다. .env 파일에 시크릿을 저장해놓고, dotenv 라이브러리가 이 시크릿을 환경변수로 적용시켜줍니다.
로컬 구동시에는 파일을 직접 전달 받고, 인스턴스에 배포할 때는 해당 인스턴스에 직접 업로드 해놓으면 해결이 가능하지만, 매번 .env 파일에 변경이 있을 때마다 직접 갱신을 해줘야 합니다.
문제는 GitHub Actions를 이용해서 자동 배포할 때에 발생합니다. 서비스 가동을 위해 Secrets이 필요한데, 코드 레포지토리는 이 값들을 가지고 있지 않습니다. 이를 해결하기 위해서 Github Secrets가 있습니다.
repository > Settings > Security > Secrets and Variables > New repository secret
GitHub Secrets 에 원하는 환경변수를 저장해놓으면, GitHub Actions 에서 명령어를 실행할 때 {{ secrets.secret_name }} 의 형태로 가져와서 사용할 수 있습니다. AWS 도 실행이 가능하고, 환경변수도 저장이 가능합니다.
단, 아직 문제가 존재합니다.
.env 파일에 갱신이 발생하는 경우가 잦습니다. 작은 수정이라면 괜찮지만, 갯수가 많으면 상당히 번거로워집니다.
"커밋 하나로 배포가 완료되도록" 구성한 것이 GitHub Actions 인데, 이 GitHub Actions 를 가동하기 위해서 일이 늘어나게 됩니다.
.env 파일에 수정이 발생할 경우 수정해줘야 하는 곳은 3군데나 됩니다.
이러고 나서야 GitHub Actions로 배포 자동화가 가능합니다.
간단한 스크립트를 사용하여 자동화하도록 합시다.
https://github.com/pjc1991/python-create-env-github-action
python create_env.py
위의 스크립트는 다음의 절차를 걸쳐 문제를 해결합니다.
어플리케이션을 개발하는 것이 아니라 스크립트를 짠다는 느낌으로 개발했습니다.