Git Submodule 은 이름에서 알 수 있듯이 다른 프로젝트를 모듈로 사용하는 것이다. 여러 프로젝트에서 공통적으로 사용해야 하는 로직이 있을 경우 공통 로직을 분리하여 하나의 프로젝트로 만들고, 이를 서브모듈로 불러올 수 있다.
나는 이번 프로젝트에서 서브모듈을 외부에 노출되면 안되는 중요한 정보를 감추는 용도로 사용할 예정이다. DB 연결정보나, OAuth key 값들은 public Repository 에서 관리할 수 없기 때문에 private Repository 로 관리하며 이를 서브모듈로 불러오려고 한다.
노출되는 안되는 정보 중 가장 대표적인 값이 DB 연결정보이다. DB 연결정보는 로컬, 개발, 운영 환경마다 모두 다르고, 로컬에서 사용하는 값은 굳이 감출 필요가 없다. 따라서 서브모듈을 사용하기 전에 미리 어떤 정보를 서브모듈로 관리할 지, 어떤 정보를 현재 프로젝트에서 같이 관리할 지 구분이 필요하다. 이를 위해 Spring 의 application 을 미리 분리해둔다.
Spring profile 분리하여 환경에 따라 다른 설정 사용하기 (with Embedded DB)
일반적인 서비스를 개발하기 위한 프로젝트를 생성한다.
민감한 정보를 감추기 위한 프로젝트를 생성한다. 나중에 메인 레포지토리에 서브 레포지토리를 불러올 때, 현재 프로젝트의 모든 파일을 가져가므로 유의하자. (ex. .gitignore 파일도 불러와진다.)
나는 민감한 데이터를 감춰야 하는 프로젝트가 현재는 2개가 필요하므로, 하나의 저장소에서 두 개의 브랜치로 구분할 계획이다.
yologa-api 저장소에서는 yologa-api 브랜치를, yologa-authentication-api 저장소에서는 yologa-authentication-api 브랜치를 사용한다.
메인 레포지토리에서 필요한 파일들을 미리 올려놓는다.
서브 레포지토리에 올려놓은 파일을 불러온다.
git submodule add {서브모듈 저장소 URL} {option:불러올 위치}
또는
git submodule add -b {브랜치명} {서브모듈 저장소 URL} {option:불러올 위치}
main 으로 관리할 경우 단순하게 add
로 불러올 수 있지만, 나는 브랜치로 분리했으므로 -b
옵션을 추가한다. 또한 서브모듈을 불러올 위치를 설정하지 않으면 프로젝트의 root 경로에 불러온다. 나는 spring 에서 관리하는 application.yml 을 불러올 계획이었으므로 resources 위치로 설정해준다.