프로젝트에 포함된 Credential 관련 내용(DataSource, 인증, 인가에 관련된 설정 등)들이 Public Repo 에 그대로 노출될 위험이 있다.
장점: 설정 정보들이 암호화 되어 있어서 암화화할때 사용된키값만 잘 관리한다면 노출되어도 큰 문제가 없다.
단점: 프로덕션 코드에 암호화를 위한 코드를 추가해야한다.
장점: 별도로 프로덕션 코드에 추가되는게 없다.
단점: 외부에 대한 접근을 막을 수 있지만 내부 사용자끼리 실수로 유출되는 건 막을수 없다.
프로덕션 코드에 변경없이 한 곳에서 설정 정보들을 관리하기 위해 서브 모듈을 사용하기로 했다.
// default branch를 기준으로 서브 모듈을 등록한다.
git submodule add {private_repository_URL}
// 특정 브랜치를 기준으로 서브 모듈을 추가한다.
git submodule add -b {branch_name} {private_repository_URL}
// 서브 모듈의 파일을 복사한다
task copySubmodule(type: Copy) {
copy {
from 'security'
include "*.yml"
into 'src/main/resources'
}
}
프로젝트 저장소를 Clone 해서 로컬로 가져올 경우 포함되있는 서브모듈의 파일들은 가져오지 않는다.
// private repository 라서 권한이 없으면 해당 명령어를 실행 할 수 없다
git submodule init
// clone submodules
git submodule update
프로젝트 저장소 보다 먼저 Push 또는 Pull을 해야 한다. 만약 프로젝트 저장소에 Push/Pull 하고 서브 모듈을 Push/Pull 하면 예상치 못한 오류가 발생한다. 그 이유는 프로젝트 저장소에는 서브 모듈을 그대로 가지지 않고 Path, Url, Commit 정보만 저장하기 때문이다.