빌드할 때마다 환경 변수 파일을 자동으로 갱신
사고가 발생했다.
어제 배포한 앱에서 발생한 사고였다. 구글 로그인 기능이 동작하지 않았다. 확인해보니 구글 로그인 라이브러리 초기화 시 사용하는 토큰 값이 잘못되어 있었다. 해당 값은 환경 변수에 넣어서 관리하고 있었는데, 빌드한 사람(본인)의 환경 변수 최신화가 제대로 이뤄지지 않았던 것이다. 개발/테스트 환경에서는 해당 값이 문제가 없었기 때문에, 프로덕션 레벨까지 배포되고 나서야 문제를 인지할 수 있었다.
부랴부랴 환경 변수를 최신화해서 앱을 재배포했다. 불행 중 다행으로 아직 사용자가 많지 않은 제품이었기에, 큰 사고로 이어지지는 않았다. 하지만 사고는 사고다. 5인 미만의 작은 팀이라 별다른 도구 없이도 잘 관리할 거라 생각했던 안일함이 사고를 불러왔다. 그리고 이대로라면 앞으로 같은 일이 반복되지 말란 법도 없었다.
그래서 우리는 이 사고의 원인을 근본적으로 해결할 방법을 찾기로 했다.
현황
우리 앱은 React Native로 구현되었다. 환경변수 사용에는 react-native-config 라이브러리를 사용한다.
앱은 안드로이드로만 배포된다. 추후에 iOS에도 앱을 출시할 생각이지만, 당장은 몇몇 사정 때문에 출시하지 않고 있다. (따라서 해결책을 찾을 때는 안드로이드 빌드만 고려할 생각이다. iOS에 대해서는 미래의 자신에게 맡기기로 했다.)
환경 변수(Environment Variables)에는 보통 각 환경마다 다르게 적용되는 상수 값들이 들어 있다. 프로젝트의 성격에 따라 다르겠지만 그 값들에는 DB 접속 정보, 서드 파티 접속 정보 같이 보안상 민감한 정보들도 포함하고 있다. 따라서 환경 변수를 관리하는 파일을 코드 저장소에서 제외하도록 권장되고 있다. (보다 자세한 정보는 The Twelve-Factor App 의 3번 항목을 참고)
권장된 내용처럼 우리도 환경변수 파일들을 모두 코드 저장소에서 제외했다. 그리고 값이 변경될 경우 (인원이 많지 않다 보니) slack 등의 메신저를 통해 값을 주고 받아 각자 최신화를 해왔다.
팀원들 모두 이것이 문제라고 인지하고는 있었지만, 당장은 고치지 않아도 된다고 생각하고 있었다.