HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
[New] 아만드팀
[New] 아만드팀
/
🌟
팀프로젝트
/
📕
만두 WIKI
/
🌂
Git submodule
🌂

Git submodule

  • 현재 팀에는 application-security.yaml이라는 민감정보 파일이 있습니다.
    • OAuth와 Jwt 에 대한 키값과 여러 민감정보들이 포함되어 있습니다.
  • 프로젝트 기간동안 저희는 이 파일을 복사 붙여넣기 하고 .gitignore로 리모트에 푸쉬되지 않도록 설정하고 CI시에 젠킨스에서 ec2서버에 올라와있는 해당 파일을 복붙한 다음 빌드하도록 설정하였습니다.
  • 이런 경우 문제가 파일이 변경되었을 때 항상 ec2서버에 접속하여 변경해줘야 한다는 문제점이 있으며 팀원간에 공유도 해야한다는 점이 문제입니다.
    • 만약 서버가 여러대를 운영한다면 하나하나씩 바꿔줘야할겁니다
  • 이를 해결하기 위해 git submodule를 사용해보았습니다.
  • git submodule를 활용하면 private한 Githuib 저장소에 민감한 정보를 넣어두고, submodule의 레포 권한이 있는 사람만 민감 정보들을 가져올 수 있게 됩니다.
 
 

적용법

notion image
먼저 private 레포를 만들어야 하는 데 저희 dya-mond를 활용하여 만들어서 시큐리티 파일을 업로드 하였습니다.
 
이제 amabnb 프로젝트로 돌아와서 submodule를 등록해줍니다.
git submodule add https://github.com/dya-mond/submoudle-test.git
notion image
notion image
그럼 다음과 같이 .gitmodule파일 생성과 함께 submodule이 등록되어 클론되게 됩니다.
 
이후 실행이나 빌드시에 해당 파일을 resources 하위에 두기 위해 build.gradle를 수정해줍니다.
processResources.dependsOn('copySubmodule') task copySubmodule(type: Copy) { from './submoudle-test' include '*.yaml' into './src/main/resources' }
실행, 빌드시에 해당 폴더의 yaml파일이 resources 하위로 들어가게 됩니다.
여기서 주의해야할 점이 .gitignore로 해당 파일이 업로드 되지 않도록 지정합니다.
// .gitignore /src/main/resources/application-security.yaml
 

팀원들이 해야하는 작업

submodule를 사용하게 되면 팀원들이 해야 하는 작업이 있습니다.
git submodule init git submodule update git submodule foreach git checkout main
  • 서브 모듈을 초기화 이후 업데이트한 뒤 main으로 checkout 합니다.
  • 이후 변경 사항이 있다면 git submodule update --remote --merge 를 쳐주시면 됩니다.
 

CI/CD

깃헙 액션을 사용한다면 다음과 같이 submoudle를 가져올 수 있습니다.
- name: Checkout uses: actions/checkout@v1 with: token: $ submodules: true
 

주의점

  • submoudle의 변경사항이 있다면 서브모듈 저장소를 먼저 커밋,푸쉬한 뒤 메인 프로젝트에서 커밋,푸쉬 해야합니다.
  • 이를 해결하기 위해 서브모듈을 먼저 push하고 메인모듈을 push할 수 있도록 합니다 .
git push --recurse-submodules=check git push --recurse-submodules=on-demand
git submodule update
  • 이후 팀원들은 다음과 같이 update 합니다.
 

Reference

Spring Boot에서 git submodule로 민감 정보(yml) 관리
민감정보 데이터를 담을 private repo 생성 민감정보가 담긴 private 레포지토리를 public 레포지토리의 서브모듈로 git add submodule ${서브 모듈로 등록할 github repository의 주소} 을 사용해 등록한다. 원격 서브모듈 레포지토리에 있는 파일들을 git submodule update --remote을 이용해 로컬에 있는 서브모듈 폴더로 가져 온다. ++ gradle이나 github action으로 서브모듈을 잘 사용한다.
Spring Boot에서 git submodule로 민감 정보(yml) 관리
https://choieungi.github.io/posts/git-submodule/
Git - 서브모듈
vim src/main.c (1) $ git add src/main.c $ git commit -am 'merged our changes' Recorded resolution for 'src/main.c'.
Git - 서브모듈
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88
Git - 서브모듈
Git 의 서브모듈(Submodule)
Git 의 서브모듈(Submodule) 이란 하나의 저장소 안에 있는 또 다른 별개의 저장소이다. 보통 다른 원격 저장소를 가져와(pull) 서브모듈로 사용하게 된다. 본 포스트에서는 Git 의 서브모듈에 대해 알아본다. myblog 라는 프로젝트 디렉터리에서 블로그 를 개발하다가, chat-module 이라는 채팅 모듈 을 원격 저장소에서 가져와 블로그 프로젝트에서 사용하고 싶다고 가정하자.
Git 의 서브모듈(Submodule)
https://sgc109.github.io/2020/07/16/git-submodule/
Git 의 서브모듈(Submodule)