Spring에서는 설정 값 혹은 비밀 값들을 관리하기 위해 properties 혹은 yml 파일을 사용한다.
이러한 파일들에는 여러 비밀 값들이 들어가기 때문에, 공개 된 repository에는 절대 그 값을 포함하여 업로드하면 안된다.
이러한 파일을 관리하기 위해서는 여러가지 방법이 있는데, 그것을 알아보자.
설정 파일의 비밀 값 자체를 양방향 암호화를 통해 암호화하는 방법이다.
이 방법은 각 값들을 추가할 때마다, 암호화를 하여 적어야한다는 단점이 있으며 양방향 암호화를 위한 키를 관리해야하는 불편함도 존재한다.
그렇기 때문에 추천하지 않는 방식이다.
AWS Secret Manager 와 같은 서비스에서는 SDK를 통해 aws 콘솔에 암호화하여 적어 놓은 비밀 값들을 관리할 수 있도록 도와준다.
한 Secret 당 한 달에 0.4달러 정도의 적은 비용으로 Secret을 관리할 수 있다는 장점이 있다.
하지만, Secret 값들이 늘어나면 늘어날수록 그 값들을 직접 입력하기 귀찮아진다는 단점이 있고 적은 비용이지만 비용이 든다는 단점이 있다.
분산된 환경에서 Spring 서버의 설정 파일을 외부로 분리할 수 있도록 도와주는 Config 서버이다.
이 서버는 설정이 바뀔 때마다 빌드와 배포가 필요없다는 장점이 있으며, 외부에서 따로 관리할 수 있는 큰 장점도 존재한다.
하지만, 설정 값을 위한 서버를 하나 더 구축해야한다는 단점이 있으며 이 서버도 만약 하나만 존재한다면 SPOF ( 단일 실패 지점 ) 이 될 수 있다는 위험을 가지고 있다.
직접 서버에 yml 파일을 올려서 실행 할 때, jar 파일에 같이 주입하여 사용하는 방식이다.
이 방식은 전적으로 불편하고 버전 관리가 힘들다는 단점이 있지만, 전적으로 안전하다는 장점이 있다.
별로 추천하지 않는다.
서브 모듈은 메인 저장소와 다른 저장소를 연결하기 위한 방법이자 기능이다.
이러한 기능을 통해 API 서버의 본 저장소를 public으로 관리한다고해도, yml 설정 파일들을 private submodule 저장소로 관리할 수 있기 때문에 보안을 가져갈 수 있다.
또한, yml 파일 자체를 submodule 저장소로 관리하게 된다면 버전 관리도 할 수 있다는 장점도 있다.
물론 private이라도 그 값들이 원문으로 올라간다는 단점이 있지만, Github를 전적으로 믿기 때문에 이 방법이 가장 간단하고 장점이 많아 이 방법을 사용하는 중이다.