반응형
❗ 서론
예전에 OS 환경 변수를 이용해 중요한 설정 정보를 숨기는 방법에 대해 포스팅했었다. (바로가기 링크 👉 https://yeonyeon.tistory.com/234) 이 방법은 값이 변경될 때마다 직접 배포 서버에 들어가 OS 환경 변수 수정이 필요하다는 점이 너무너무 귀찮다. 이를 개선하기 위해 깃의 서브 모듈이라는 개념을 이용해보았다.
❓ 서브 모듈이란?
: 레포지토리 안에 또다른 레포지토리를 디렉토리로 분리해 넣은 것
🤔 언제 쓸 수 있을까?
- 라이브러리의 소스 코드를 직접 프로젝트에 포함시켜야 하는 경우
- 프로젝트 하나에 하위 프로젝트를 여러개 가져야하는 경우
😃 서브 모듈로 중요한 설정 정보 숨기기
1. 중요한 설정 정보를 가진 레포지토리 생성
- 외부에 공개되면 안되는 정보이니 private repository로 생성
- 팀 단위로 작업하는 프로젝트의 경우 organizations를 생성하면 팀 단위 private repository 생성 가능
🔻 organizations를 생성하는 방법
더보기
- github profile image 클릭 - Your organizations - New organization
- 생성한 organization 접속 - People - Invite member - 팀원들 초대
2. 프로젝트에 서브 모듈 추가
- 서브 모듈을 추가하고 싶은 위치로 이동
- 서브 모듈 추가
$ git submodule add <서브모듈로 추가할 git repository 주소> <폴더명>
- 생성된 .gitmodules와 폴더명 파일 commit & push
3. 서브 모듈에 있는 파일 사용
- application.yml의 정보를 서브 모듈에 있는 yml 파일을 이용하도록 수정
- ex: 서브 모듈을 통해 생성한 security 폴더 내의 application.yml 파일 사용
spring:
config:
import:
- classpath:/security/application.yml
😜 주의사항
- Jenkins 같은 CI/CD 툴을 이용할 때 서브 모듈에 있는 파일이 필요할 수도 있다. 이 경우 서브 모듈에 접근할 수 있는 권한을 줘야한다. (ex: Jenkins의 경우 credentials를 추가해주면 간단하게 해결된다.)
- 서브모듈에 변경 사항이 생기면 메인 프로젝트보다 먼저 push / pull하는 것이 좋다. 메인 프로젝트는 서브 모듈에 존재하는 파일을 하나하나 갖는 것이 아닌 path, url, commit 정보 등만 가지고 있다. (.gitmodules 파일 참고)
# 서브 모듈 변경 사항 가져오기
$ git submodule foreach git pull
# 메인 프로젝트 변경 사항 가져오기
$ git pull
🔻 스크립트 설명
더보기
$ git submodule foreach git pull
- git submodule foreach git pull <remote> <branch> 를 통해 특정 브랜치만 가져올 수 있음
- 메인 프로젝트에 변경 사항이 생길 수 있으며 이 경우 메인 프로젝트에서도 새로 커밋해야 함
- 서브모듈을 가진 프로젝트를 최초로 가져오는 경우, 서브 모듈 폴더는 존재하는데 안에 파일들은 갖고 있지 않다. 아래와 같은 과정을 따라야 한다.
$ git submodule init
$ git submodule update
$ git submodule foreach git checkout main
🔻 각 스크립트 설명
더보기
$ git submodule init
- .gitmodules 파일의 정보를 로컬에 등록
- 메인 프로젝트의 현재 커밋 당시 스냅샷을 가져옴
$ git submodule update
- 서브모듈 저장소에서 데이터 가져오기
- 서브모듈을 포함한 프로젝트의 현재 스냅샷에서 checkout 해야할 커밋 정보 가져오기
$ git submodule foreach git checkout main
- main 브랜치로 sub project를 checkout
- 이 명령어를 실행하지 않으면 detached head 상태에 있음
(= 어떤 브랜치에도 속하지 않은 상태)
참고
반응형
'Develop > etc' 카테고리의 다른 글
OAuth vs OpenID (0) | 2022.08.31 |
---|---|
[OAuth] 슬랙 로그인 구현하기 (5) | 2022.07.31 |
[Git] 커밋에 공동 작업자 추가하기 (2) | 2022.07.20 |
[GitHub] PR 리뷰 막기 (feat: draft) (1) | 2022.07.14 |
[GitHub] 깃허브로 토이 프로젝트 시작하기 (2) | 2022.07.09 |