모르는 사람은 모르고 살지만,
아는 사람은 정말 잘 사용한다는 "Config Management (Config 관리)" 도구를 소개하고자 한다.
"Config"라고 지칭하면 이를 듣는 사람이 어떤 것을 떠올려야할지 애매한 부분이 있는데,
"Environment Variable"이라고 말하는 것이 좀 더 명확할 것 같다.
1. Background
개발을 할 때 DB 서버의 IP 라던지 API 서버의 URL,
인증을 위한 token 값 또는 아이디나 패스워드 같은 값들을 '환경 변수'로 설정을 하곤 한다.
Dev 환경이나 Staging, Production 환경에 따라 변경되는 값이라거나
아이디, 패스워드와 같이 보안에 중요한 내역들을 소스 코드 내부에 저장하는 것은 피해야하기 때문이다.
간단한 예시를 들어보자.
우선 Python으로 아래와 같은 코드를 만들어봤다.
그리고 '환경 변수' 설정에 따라 어떠한 결과가 나오는지 확인해보자.
2. dotenv
그런데, 매번 위와 같이 환경 변수를 CLI 형태로 직접 입력해주는 것은 상당히 번거롭다.
귀찮은 측면도 있지만, 재부팅 되거나 하면 환경 변수가 모두 사라지는 것도 문제다.
더더욱 어려운 점은 환경 변수 내역에 대한 이력 관리가 안된다는 점이다.
시간이 지나서 모두 잊어버리는 경우도 종종 발생한다.
그래서, 이런 이슈를 해결하기 위해 ".env" 파일을 만들어서 활용하는 방법을 사용하곤 한다.
Python 코드로 이를 사용하는 방법을 알아보자.
추가 패키지 설치가 필요하니, 가상화 환경을 먼저 꾸며보자.
"dotenv" 패키지를 불러들여서 ".env" 파일을 읽어들이도록 할 수 있다.
".env" 파일은 다음과 같이 작성이 되어 있으면 된다.
실제 환경 변수에 선언된 내역이 없어도
'.env' 파일에 있는 내용을 환경 변수처럼 불러들여서 사용할 수 있다는 것이 확인된다.
이렇게 환경 변수를 사용하는 것도 충분히 좋은 방법이지만,
Dev - Stagiing - Production 각 환경에 따른 환경 변수를 한 번에 관리하기에 어려움이 있고
'.env' 파일이 Plain Text 형식이라 token 값이나 아이디, 패스워드 등을 관리하기에는 보안 위협이 있다.
3. dotenvx
기존의 dotenv의 부족한 부분을 개선해서 새로 나온 것이 dotenvx 이다.
사이트에 나온 것 처럼 dotenv. better. !!!
공식 사이트도 좋지만, GitHub 페이지가 개인적으로는 더 끌린다 ^^
dotenvx에서 가장 중점을 두고 있는 3가지 특징은 다음과 같다.
- Run Anywhere → inconsistency across platforms
- Multiple Environments → juggling multiple environments
- Encryption → leaking your .env file
그럼 설치 과정부터 하나씩 살펴보자.
① Install
정말 다양한 설치 방법을 지원하고 있다.
편한 방법들도 있지만,
방화벽 등의 상황에서도 활용 가능한 GitHub Release 파일을 이용한 설치 방법으로 진행해보겠다.
다운로드 받아서 압축만 풀면 된다.
그냥 그대로 실행해보면 그냥 된다.
GitHub의 Release에서 다운로드 받아서 압축 풀면 되는 것이다.
제대로 사용하기 위해서는 PATH 경로를 추가해줘야 한다.
각자의 Shell 상황에 따라 달라질텐데,
필자는 ZSH 환경이기에 다음과 같이 압축 해제한 경로를 추가해줬다.
필자가 실행한 내역들도 참고 삼아 공유해본다.
② Basic
간단한 사용법을 알아보도록 하자.
'dotenv' 패키지를 불러들이지 않는 기본적인 소스코드로 살펴보겠다.
환경 변수로 등록된 내역이 없는 상황에서
'.env' 파일의 내용을 환경 변수로 다룰 수 있는 것을 확인해 볼 수 있다.
Dev - Staging - Production 과 같이 여러 실행 환경이 있을 때에는 다음과 같이 사용할 수 있다.
'.env.production' 파일을 우선 생성해보자.
실행할 때 '-f' 옵션을 통해 특정 파일을 지칭할 수 있다.
'.env' 형식의 파일 이름이 아니라 어떤 파일 이름이라도 상관없이 지정할 수 있는 것이다.
이번에는 암호화를 진행해보겠다.
"dotenvx encrypt" 명령어를 이용해서 암호화할 파일을 지정해주면 된다.
지정한 파일은 다음과 같이 내용이 변경되고,
Private Key 파일을 위한 새로운 파일이 하나 생성되었다.
이렇게 암호화를 하면,
데이터(환경 변수 내용)를 commit 해서 버전 관리를 하더라도 그 내용이 유출되지 않도록 할 수 있다.
대신 실행하는 환경에는 Private Key가 저장되어 있는 키 파일을 넣어줘야 한다.
당연하게도 키 파일은 소스코드 저장소에 저장되면 안된다.
설치 과정도 쉽고,
사용 방법도 쉬운 아주 유용한 도구인 것 같다.