[Spring] 설정 파일 비밀스럽게 관리하기

kshired·2022년 7월 20일
3

Spring

목록 보기
4/11
post-thumbnail

Spring에서는 설정 값 혹은 비밀 값들을 관리하기 위해 properties 혹은 yml 파일을 사용한다.

이러한 파일들에는 여러 비밀 값들이 들어가기 때문에, 공개 된 repository에는 절대 그 값을 포함하여 업로드하면 안된다.

이러한 파일을 관리하기 위해서는 여러가지 방법이 있는데, 그것을 알아보자.

1. 설정 파일을 암호화하여 사용하기

설정 파일의 비밀 값 자체를 양방향 암호화를 통해 암호화하는 방법이다.

이 방법은 각 값들을 추가할 때마다, 암호화를 하여 적어야한다는 단점이 있으며 양방향 암호화를 위한 키를 관리해야하는 불편함도 존재한다.

그렇기 때문에 추천하지 않는 방식이다.

2. AWS Secret Manager, AWS Service Manager 등의 외부 서비스 사용

AWS Secret Manager 와 같은 서비스에서는 SDK를 통해 aws 콘솔에 암호화하여 적어 놓은 비밀 값들을 관리할 수 있도록 도와준다.

한 Secret 당 한 달에 0.4달러 정도의 적은 비용으로 Secret을 관리할 수 있다는 장점이 있다.

하지만, Secret 값들이 늘어나면 늘어날수록 그 값들을 직접 입력하기 귀찮아진다는 단점이 있고 적은 비용이지만 비용이 든다는 단점이 있다.

3. Spring Cloud Config 서버 구축

분산된 환경에서 Spring 서버의 설정 파일을 외부로 분리할 수 있도록 도와주는 Config 서버이다.

이 서버는 설정이 바뀔 때마다 빌드와 배포가 필요없다는 장점이 있으며, 외부에서 따로 관리할 수 있는 큰 장점도 존재한다.

하지만, 설정 값을 위한 서버를 하나 더 구축해야한다는 단점이 있으며 이 서버도 만약 하나만 존재한다면 SPOF ( 단일 실패 지점 ) 이 될 수 있다는 위험을 가지고 있다.

4. 배포되는 서버에서 관리하기

직접 서버에 yml 파일을 올려서 실행 할 때, jar 파일에 같이 주입하여 사용하는 방식이다.

이 방식은 전적으로 불편하고 버전 관리가 힘들다는 단점이 있지만, 전적으로 안전하다는 장점이 있다.

별로 추천하지 않는다.

5. Git submodule 사용

서브 모듈은 메인 저장소와 다른 저장소를 연결하기 위한 방법이자 기능이다.

이러한 기능을 통해 API 서버의 본 저장소를 public으로 관리한다고해도, yml 설정 파일들을 private submodule 저장소로 관리할 수 있기 때문에 보안을 가져갈 수 있다.

또한, yml 파일 자체를 submodule 저장소로 관리하게 된다면 버전 관리도 할 수 있다는 장점도 있다.

물론 private이라도 그 값들이 원문으로 올라간다는 단점이 있지만, Github를 전적으로 믿기 때문에 이 방법이 가장 간단하고 장점이 많아 이 방법을 사용하는 중이다.

profile
글 쓰는 개발자

0개의 댓글