
개요
CICD과정 중 Spring Boot에 필요한 Properties를 private하게 설정을 해야한다.
문제점
- BackEnd Repository는
Public
으로 설정되어 있어, database url, password 등 민감 정보 등을 포함해선 안된다.
- Spring Boot에 대해 build 과정 중 properties가 설정되어야 한다.
해결방법
- AWS KMS를 사용하여 데이터베이스 정보를 암호화하는 방식
- Github 별도의 private repository를 활용하여 서브모듈을 활용
- Github Environment 사용
- 환경변수를 build과정에서 주입하는방법
👎🏻 CASE1 : AWS KMS를 사용하여 데이터베이스 정보를 암호화하는 방식
- 암호화 키는 엄격한 액세스 제어를 통해 안전하게 저장해야 합니다. 예를 들어 AWS KMS와 같은 키 관리 서비스를 사용할 수 있습니다. 데이터 분류 수준 및 분리 요구 사항에 맞추어, AWS IAM 및 리소스 정책과 함께 키에 대한 액세스 제어 기능과 여러 키를 사용하는 것이 좋습니다.
- 하지만 너무 해비하고 설정과정이 매우 복잡해지고 키-Value 수정/추가 작업 등 유지보수성이 떨어진다.
✅ CASE2: Github 별도의 private repository를 활용하여 서브모듈을 활용
- github submodule이란, Git 저장소 안에 다른 git 저장소를 디렉토리로 분리해 넣는 것이 서브모듈이다. 다른 독립된 Git 저장소를 Clone해서 내 Git 저장소 안에 포함할 수 있으며 각 저장소의 커밋은 독립적으로 관리한다.
- 환경설정 저장소를 프로젝트 저장소에 붙여주기
$ git submodule add https://github.com/jung-dam-diary/secret-keys.git # 그 안에 서브모듈 파일이 클론된다. # project 디렉토리엔 Git 저장소들을 관리하는 .gitmodules라는 이름의 파일이 생긴다.
# .gitmodule [submodule "secret-keys"] path = # url = https://github.com/jung-dam-diary/secret-keys.git
- 부모 저장소(spring)에서 submodule(secret-keys)인
application.yml
파일을 수정했을 때 submodule repo에도 반영을 원한다면?
$ git submodule update --remote --merge
- submodule을 가져오고 싶다면?
$ git submodule update [--remote 서브모듈이름]
- branch별 배포환경 설정하는 submodule 기본 브랜치 설정하기
# .gitmodule [submodule "secret-keys"] path = src/main/resources/secret-keys url = https://github.com/랄랄라/secret-keys.git branch = develop
- 타른팀원이 clone 하고 submodule까지 받는방법!
# 방법1 $ git clone original_repository $ git submodule init $ git submodule update # 방법2 $ git clone --recurse-submodules original_repository