최종 프로젝트를 진행하면서 AWS 계정 정보나 DB 계정 정보 등 민감한 정보들을 application.yml 에 담아야 했습니다.
프로젝트는 협업 및 버전 관리를 위해 Github Repository을 사용하는데, 민감한 정보들이 노출되면 안되므로 이를 숨기는 방법들이 여러가지가 있습니다.
이 중 우리 프로젝트에 적용하기로 결정한 것은 Git Submodule 입니다. 결정한 이유로는 크게
정도로 볼 수 있겠습니다 😄
서브모듈은 깃 레포지토리를 사용할 때, 메인 레포지토리(상위)에서 다른 레포지토리(하위)의 파일을 사용할 때, 이 둘을 연결하고 관리하기 위한 도구 입니다. 사용하는 목적은 다양할 수 있겠지만 저희는 민감한 정보(Secret)들을 관리하기 위해 위 도구를 사용하였습니다.
먼저 민감한 정보들이 담긴 설정파일을 관리할 repository를 private으로 생성해야 합니다.
저희는 ‘Everevent-Kazedon-BE’ Organization을 따로 생성하고( 프로젝트 레포지토리는 프로그래머스 데브코스 Organization에서 public으로 관리되어지고 있습니다.) 해당 Organization에 security라는 private 레포지토리를 생성하였습니다.
하위 레포지토리(서브 모듈)을 만들고 설정파일을 두었으면 상위 레포지토리(메인)에서 아래 명령어를 통해 서브모듈을 등록해야 합니다.
git submodule add https://github.com/{사용자명}/{저장소명}.git {폴더명}
폴더명은 resources/config 하위에서 설정파일을 관리하기 위해 resources/config 폴더로 설정하였습니다.
그러면 .gitmodules 파일이 루트 디렉터리에 생성되고 내용은 다음과 같습니다.
[submodule "src/main/resources/config"]
path = src/main/resources/config
url = https://github.com/Everevent-Kazedon-BE/security.git
서브 모듈 레포지토리의 변경 사항을 메인 레포지토리에 적용하기 위해선 서브모듈 레포지토리의 upstream에 반영된 커밋을 메인 레포지토리에 가져와야 합니다.
git submodule update --remote
위 명령어를 실행하게 되면 메인 레포지토리 현재 브랜치의 서브모듈(config) commit을 서브모듈 repository의 최신 commit으로 변경하고 이는 파일 변경 이력으로 남게 됩니다.
+추가)
해당 프로젝트를 진행하는 팀원이 있을 경우, 팀원의 로컬 레포지토리에서도 submodule을 관리해야 할 때는,
git submodule init
위 명령어를 통해 팀원 로컬의 메인 레포지토리에서 .gitmodules 파일에 작성된 submodule을 관리할 수 있습니다.
서브모듈을 프로젝트에 적용한 배경 및 방법에 대해서 간단히 알아보았습니다!
다음 포스팅에선 서브모듈을 다른 organization의 private 레포지토리를 사용함에 따라 github action 을 사용할 때 발생한 문제에 대해서 알아보도록 하겠습니다.
https://jujeol-jujeol.github.io/2021/07/12/git-submodule-적용하기/