우리의 dev용 서버는 db로 mysql을 연결하고 있는데,
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/{database이름}?serverTimezone=Asia/Seoul
username: {민감정보}
password: {민감정보}
우리의 dev용 서버 레포지토리는 public이라 민감한 db설정 정보가 담긴 파일을 그대로 올릴 수 없었다.
따라서 우리는
java -jar -Dspring.profiles.active=$Profile_Name $JAR_NAME -> 서버 jar 파일이 실행될 때 해당프로파일 yml파일을 찾아서 쓰도록 하는 설정.)라는 방식으로 민감정보를 깃헙에 올리지 않으면서 우리 프로젝트에 쓰고 있었다.
하지만 이렇게 깃헙에 민감정보가 들어있는 파일이 안 올라가도록 하면, 민감정보에 대한 형상관리가 안된다는 문제점이 있었다.
누가 실수로라도 이 민감정보가 들어있는 파일을 날리거나 내용을 변경하면, 복구할 수가 없다.
따라서 우리는 민감정보가 공개되지 않도록 하면서 형상관리할 수 있는 방법을 고민했다.
git submodule 은 메인 레포지토리 안에 다른 레포지토리를 마치 서브모듈처럼 넣어놓을 수 있는 기능이다.
이 서브모듈 기능을 잘 써먹으면 민감정보를 private으로 보호하면서 git으로 형상관리되게 할 수 있다.
git add submodule ${서브 모듈로 등록할 github repository의 주소}
메인레포지토리 폴더에서 위 명령어를 치게 되면 메인 레포지토리에
가 추가된다.
git submodule update --remote
서브모듈폴더 안에 들어가서 위 명령어를 치면 원격 레포지토리의 master 브랜치를 fetch한 후 현재 로컬 브랜치에 merge한 것과 같다.
우리의 경우, 서브모듈 폴더안에 우리 서버의 민감정보가 담긴 yml 파일을 두어 관리하고 있고,
task copyPrivate(type: Copy) {
copy {
from '${서브모듈폴더위치}'
include "*.yml"
into 'src/main/resources/privates'
}
}
gradle task로 서브모듈폴더안에 있는 yml 파일을 복사해서 src/resource 폴더 안에 붙여넣기하도록 하였다.
이런 task를 만든 이유는 스프링이 서버가 build 될 때 알아서 resource 폴더 안에 있는 yml 파일을 찾아서 서버의 설정정보로 주입하기 때문이다.