Web

git 프로젝트의 secret key 관리, heroku 배포 시 secret key 관리

tose33 2023. 11. 13. 12:02

 

이전에 구글 로그인을 구현했는데 구현을 다 하고 나서 문제가 생겼다.

https://tose33.tistory.com/1303

 

Google OAuth2

구글 로그인 구현 https://lsh-instaweb.herokuapp.com/login 로그인 lsh-instaweb.herokuapp.com OAuth (Open Authorization) 만든 웹사이트에 구글로 로그인을 구현하고 싶어서 이에 대해서 공부해봤다. 요즘 많은 웹사이

tose33.tistory.com

 

 

구글 api 에 내 클라이언트를 등록하고 나면 secret key 가 발급되고, 해당 키로 구글과 소통하게 된다.

프로그램을 만들때 git 같은 version control system 은 필수다.

그렇다면 git 에 올릴때 secret key 는 어떻게 감춰야 할까?

우선 결론부터 말하면 여러가지 방법이 있는데 나는 환경변수에 등록하는 방법을 선택했다.

 

이제 두번째 문제가 생겼다.

나는 내 웹을 heroku 에 배포할것인데, 환경변수를 로컬에 등록하면 heroku 는 그 값을 어떻게 알수있을까?

 

 

secret key 환경변수 등록 

환경변수를 등록하는데도 여러가지 방법이 있는데 나는 내가 사용하는 intellij 에 등록하는 방법을 선택했다.

intellij 우측 상단, Edit Configurations...

 

Environment variables

 

Edit Configurations.. -> Environment variables 에 환경변수를 key,value 로 등록한다.

 

그 후에 spring의 @Value 를 이용해서 아래와 같이 사용할수 있다.

@Value("${GOOGLE_AUTH_URL}")
private String googleAuthUrl;
@Value("${GOOGLE_LOGIN_URL}")
private String googleLoginUrl;
@Value("${GOOGLE_CLIENT_ID}")
private String googleClientId;
@Value("${GOOGLE_REDIRECT_URL}")
private String googleRedirectUrl;
@Value("${GOOGLE_SECRET_CLIENT}")
private String googleClientSecret;

 

이렇게 되면 이 변수들 (secret key) 은 내 로컬에만 존재하고,

프로젝트를 깃에 올린다고 해도 secret key 들은 올라가지 않게 된다.

 

heroku 배포 시 secret key 관리 

secret key 를 git 에 올리지 않은건 좋다.

그런데 heroku 는 깃을 기반으로 배포된다.

그러면 이 상태에서는 heroku 가 해당 secret key 값들을 알수가 없으니 당연히 빌드가 실패한다.

 

heroku 는 config vars 라는 기능을 제공한다.

https://devcenter.heroku.com/articles/config-vars

 

Configuration and Config Vars | Heroku Dev Center

Last updated March 09, 2020 A single app always runs in multiple environments, including at least on your development machine and in production on Heroku. An open-source app might be deployed to hundreds of different environments. Although these environmen

devcenter.heroku.com

 

config vars 는 쉽게 말해 heroku 에 등록하는 환경 변수다.

위 링크의 레퍼런스에 현재 등록된 config vars 조회, config vars 등록, 삭제 방법이 나와있다.

 

이전에 intellij 환경 변수에 등록한 GOOGLE_SECRET_CLIENT 와 같이 등록해주면, 이제 heroku 도 해당 변수들의 실제 값을 알수가 있다.