GitHub 저장소를 활용한 설정관리

이 글은 GitHub Private 저장소를 이용한 설정파일 관리를 위한 gh-kv 안내입니다.

GitHub 저장소를 활용한 설정관리
각 설정들을 모아둡니다.

이 글은 GitHub Private 저장소를 이용한 설정파일 관리를 위한 gh-kv 안내입니다.


개발 프로젝트를 진행하다보면 액세스/시크릿 키 등 관리할 키 및 설정이 많아집니다.
이들은 서비스를 운영할때 함께 포함하여 배포되는데 배포시 보통은 환경 변수 혹은 파일로 만들어서 사용합니다.

노출되면 큰 문제가 생기기 때문에 일반적으로 버전관리에도 포함하지 않습니다. (가끔은 그냥 넣어버리기도 하지만)
그리고 모든 개발자들이 설정이 결정된 이력을 알고 있으면 문제가 없지만 그렇지않다면 약간의 불편함이 생깁니다.
여기서 발생하는 불편함이란, 새로 해당 설정 전달 및 히스토리 안내 등을 말합니다.

예를 들어 기존 프로젝트를 인수인계 받는 경우에 설정의 템플릿이 있는config.js.dist 파일만 있고,
실제로는 각 설정들이 어떤 값을 가져야 작동하는지 알 수 없는 문제가 있습니다. 이 경우 일일히 누군가 안내를 해주어야 하는 번거로움이 생깁니다.

최근에 AWS S3를 사용하는 기존 프로젝트를 하게 되었습니다.
문제는 개발에 필요한 AWS 액세스/시크릿 키와 bucket에 관한 설정을 모르는 것이었습니다.
꽤 오래된 프로젝트라 히스토리를 온전히 가지고 가지고 계신분은 한분밖에 안계셨고, 바쁘셔서 시간을 많이 내기 힘들었습니다.

설정 관리의 주체를 사람 대 사람이 아닌 서비스에서 한다면, 질문하고 답변을 받는 시간도 줄일 수도 있을 것입니다.
만약에 설정들의 히스토리 추적이 가능하고 권한이 있는 사용자만 접근할 수 있는 서비스가 있다면 어땠을까요?
설정 관리를 위한 관리내역도 개발그룹안에서 언제나 공유된다면 어떨까요?
각 개발자 개개인은 자신의 Personal Access Token을 만들고, 이 키는 언제든지 스스로 다시 발급할 수 있습니다. 그리고 자신이 권한이 있는 저장소에만 접근할 수 있습니다.


기존에 사용하고 있는 git 기반 저장소 서비스인 GitHub를 이용하는 것을 생각해보았고, 이를 위한 커맨드라인 인터페이스를 만들어보았습니다.

GitHub KV(이하 gh-kv)는 Node.js기반 GitHub 저장소를 이용한 Key-Value 스토어 도구입니다.
글로벌 설치로 터미널 어디서나 사용할 수 있고, 필요에 따라 npm 모듈로 Node.js 프로젝트 안에서 사용할 수 있습니다.

gh-kv는 온전히 GitHub 저장소에 올라간 파일을 기준으로 작동합니다.
Public 저장소의 경우에는 Personal Access Token가 필요 없지만 설정들은 Private 저장소에 저장된다고 가정하고, 강제합니다.

설치는 npm을 이용합니다.

npm install -g github-kv

사용 방법은 아래와 같습니다.

실제 저장소의 파일을 가져온다면,

위 스크립트를 터미널에서 실행하면 실행한 위치에 google-services.json 파일을 GitHub에서 가져와서 만들어줍니다.

CI 도구(Jenkin 혹은 Travis CI 등)를 사용한다면 배포 스크립트의 한 시점에 gh-kv 명령어로 원하는 설정 파일을 가져올 수 있습니다.
따로 터미널 등으로 접속해서 설정하는 수고를 하지 않아도 됩니다.

GitHub에서 관리하기 때문에, commit 이력 및 audit을 볼 수 있고, 이슈 또는 위키로 문서를 만들 수 있는 장점도 따라옵니다.


Key 및 설정 관리에 HashiCorp의 Vault나 AWS의 KMS 등을 고려해보았으나, 새로 익히거나 추가로 요금을 지불하면서까지 사용할 단계는 아닌 것으로 판단되어 이 프로그램을 만들었습니다.

서비스 규모가 더욱 커져서 Vault, KMS를 사용할 수 밖에 없는 상황이 오면 더 좋을 것 같습니다.

이 프로젝트는 GitHub에 소스코드가 있고, NPM으로 배포되고 있습니다.
아이디어나 개선사항은 GitHub로 부탁드립니다.

Subscribe to Half-Built Life

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe