Git submodule을 사용해보자

주노·2023년 9월 13일
2

기술부채 알쓸신잡

목록 보기
12/22
post-thumbnail

서론

현재 피움 프로젝트는 properties, env 파일과 같은 민감정보 내용을 서버 내부에 저장, 관리하고있다.

이렇게 파일을 관리했을 때 다음과 같은 문제점이 생각나 팀원들과 discussion에서 의견을 나눠봤다.

  • 캠퍼스 외부에서 properties / env 파일 관리 불가

    현재 서버 접속 권한이 캠퍼스 내부 IP로 한정되어있기 때문에 발생한 문제점이다.

  • properties 설정을 파악하기가 어려움 (vim, cat 명령어로 확인)
  • 분업화 진행 간 properties / env 파일 변경에 대한 공유가 어려움

자세한 내용은 discussion - submodule 도입에 대해 에서 확인

팀원들 모두 동의해줬고 이에 프로젝트에 submodule을 도입하는 과정을 정리해보려고한다.

submodule이란?

서브모듈은 하나의 저장소(레포지토리)에서 다른 저장소를 포함하고 관리할 수 있게 해주는 기능이다.
주로 의존성 관리 혹은 외부 프로젝트 통합에 사용되곤 한다.

피움에서는 private 레포지토리를 이용해 민감정보를 관리하기 위해 submodule을 적용해보려고한다.

시작하기

properties, env 파일 등 다양한 민감정보를 가지는 설정파일들을 private 레포지토리에 저장하고 사용해보자.

Private Repository 생성

민감정보를 관리할 Private Repository를 생성한다.

submodule 시작하기

우선 백엔드 프로젝트를 기준으로 submodule을 적용시켜보자.

git submodule add {서브모듈 Repo URL}

git submodule add 명령어를 수행하면 루트 경로에 .gitmodules 파일이 생성된 것을 확인할 수 있다.

파일 내용을 살펴보면 submodule이 적용된 path와 submodule을 가져온 url이 표기되어있는 것을 확인할 수 있다.

추가로 branch 정보를 넣으면 해당 branch를 기준으로 submodule 정보를 가져온다.

.gitsubmodule 파일과 config 폴더가 생성되고 git stage에 올라가있는 상태가 되어있을것이다.

commit 후 push를 해보자.

다음과 같이 서브모듈 폴더가 추가된 것을 볼 수 있다.

submodule 적용하기

내 컴퓨터에서의 submodule 적용은 완료했다.

다른 개발자들이 submodule을 어떻게 적용해야할지 가이드를 제공하자.

우선 git clone부터 시작해보자.

git clone {Project}

submodule을 초기화하고 update한다.
해당 작업은 처음 1번만 수행하면 된다.

git submodule init

git submodule update

submodule 업데이트 반영하기

프로젝트를 진행하는 과정에서 submodule 프로젝트에 수정사항이 생길 수 있다. 이를 반영하기 위해서는 다음과 같은 작업을 수행하면 된다.

아래와 같이 새로운 커밋(변경사항)이 발생했다고 가정해보자.

git submodule update --remote --merge

# .gitmodules 파일에 정의되어 있는 브랜치의 최신 버전으로 업데이트 (혹은 default 브랜치)
git submodule update --remote

# 로컬에서 작업 중인 부분과 원격에 작업된 부분이 다른 경우 머지까지 진행
git submodule update --remote --merge

submodule이 update된 정보에 대해 기존 프로젝트에도 반영을 해줘야한다.

git add {file}

git commit -m "build: 서브모듈 최신사항 반영"

git push

정리

민감정보를 관리하기위해 submodule 도입방법을 정리해봤다.
생각보다 간단했다 👍

Reference

profile
안녕하세요 😆

5개의 댓글

comment-user-thumbnail
2023년 9월 17일

잘 읽고 갑니다~~
궁금한 점이 하나 있어요!
민감한 정보를 서브모듈로 추가하는 경우에는 public repository에도 서버 정보가 포함될 것 같은데, 이 부분은 어떻게 해결할 수 있나요!?
혹시 ec2 서버에서 직접 submodule을 추가하는건가요?

1개의 답글
comment-user-thumbnail
2024년 4월 16일

구글에 서브모듈 검색하니 첫번째로 나오는 주노 블로그👍
잘 써먹고 갑니다~

1개의 답글