HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🌟
Programmers 최종 플젝 6조
/
💫
[백엔드] 트러블 슈팅
/
⚙️
secret 파일 관리하기(feat.서브모듈)
⚙️

secret 파일 관리하기(feat.서브모듈)

생성일
Jan 16, 2022 02:30 PM
태그
git
submodule
작성자
속성 1
속성 1
작성 여부
작성 완료

🗯️ 문제 : 민감한 정보는 노출되지 않게 관리 해야한다.


최종 프로젝트를 진행하면서 AWS 계정 정보나 DB 계정 정보 등 민감한 정보들을 application.yml 에 담아야 했습니다.
프로젝트는 협업 및 버전 관리를 위해 Github Repository을 사용하는데, 민감한 정보들이 노출되면 안되므로 이를 숨기는 방법들이 여러가지가 있습니다.
  • 외부 서비스 이용
    • Spring Cloud Config(Vault), AWS Service Manager
  • 설정파일 암호화
  • Git Submodule
  • Git Secrets 이용
이 중 우리 프로젝트에 적용하기로 결정한 것은 Git Submodule 입니다. 결정한 이유로는 크게
  • 기존 코드를 추가 및 수정하는 비용이 제일 적고
  • 나름 쉽게?! 적용할 수 있다!
정도로 볼 수 있겠습니다 😄

🔥 해결 방법 : Git Submodule 이용


Git Submodule 이란?


서브모듈은 깃 레포지토리를 사용할 때, 메인 레포지토리(상위)에서 다른 레포지토리(하위)의 파일을 사용할 때, 이 둘을 연결하고 관리하기 위한 도구 입니다. 사용하는 목적은 다양할 수 있겠지만 저희는 민감한 정보(Secret)들을 관리하기 위해 위 도구를 사용하였습니다.
 

Git Submodule 적용 방법


  1. private Repository 생성
먼저 민감한 정보들이 담긴 설정파일을 관리할 repository를 private으로 생성해야 합니다.
저희는 ‘Everevent-Kazedon-BE’ Organization을 따로 생성하고( 프로젝트 레포지토리는 프로그래머스 데브코스 Organization에서 public으로 관리되어지고 있습니다.) 해당 Organization에 security라는 private 레포지토리를 생성하였습니다.
notion image
  1. submodule 등록
하위 레포지토리(서브 모듈)을 만들고 설정파일을 두었으면 상위 레포지토리(메인)에서 아래 명령어를 통해 서브모듈을 등록해야 합니다.
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
  • path 정보와 하위 레포지토리 url 을 확인할 수 있습니다.
  1. 서브 모듈 commit 최신화하기
서브 모듈 레포지토리의 변경 사항을 메인 레포지토리에 적용하기 위해선 서브모듈 레포지토리의 upstream에 반영된 커밋을 메인 레포지토리에 가져와야 합니다.
git submodule update --remote
위 명령어를 실행하게 되면 메인 레포지토리 현재 브랜치의 서브모듈(config) commit을 서브모듈 repository의 최신 commit으로 변경하고 이는 파일 변경 이력으로 남게 됩니다.
 
+추가)
해당 프로젝트를 진행하는 팀원이 있을 경우, 팀원의 로컬 레포지토리에서도 submodule을 관리해야 할 때는,
git submodule init
위 명령어를 통해 팀원 로컬의 메인 레포지토리에서 .gitmodules 파일에 작성된 submodule을 관리할 수 있습니다.

회고( 거의 예고 )


서브모듈을 프로젝트에 적용한 배경 및 방법에 대해서 간단히 알아보았습니다!
다음 포스팅에선 서브모듈을 다른 organization의 private 레포지토리를 사용함에 따라 github action 을 사용할 때 발생한 문제에 대해서 알아보도록 하겠습니다.

📖 참고문서


Git Submodule 설정하기
하나의 저장소 안에 있는 또 다른 별개의 저장소입니다. 보통 다른 원격 저장소를 가져와 서브모듈을 사용하게 됩니다. git submodule add https://github.com/{사용자명}/{저장소명}.git {폴더명} 위의 명령어를 실행하면 지정한 폴더명으로 폴더가 생성되면서 서브모듈이 생성됩니다. 저는 아래와 같이 명령어를 사용했습니다. git submodule add https://github.com/Meet-Coder-Study/study-platform-submodule.git config [submodule "config"] path = config url = https://github.com/Meet-Coder-Study/study-platform-submodule.git 서브모듈을 연결했다면 서브 모듈을 업데이트를 해줘야 하는데요.
Git Submodule 설정하기
https://rutgo-letsgo.tistory.com/264
Git Submodule 설정하기
https://jujeol-jujeol.github.io/2021/07/12/git-submodule-적용하기/
Git: 서브모듈 이해하기 (git submodule)
발생일: 2016.06.23 키워드: git submodule, 깃 서브모듈 문제: Git 에서 서브모듈을 사용하려고 한다. 해결책: 서브모듈에 대한 자세한 옵션은 Pro Git 책의 설명을 보는 게 더 나을 것 같아, 여기선 아래와 같이..
Git: 서브모듈 이해하기 (git submodule)
https://ohgyun.com/711
Git: 서브모듈 이해하기 (git submodule)
[Git] Git Submodule에 대하여
개발을 하다 보면 같은 소스코드를 여러 프로젝트에서 공통으로 사용해야 하는 경우가 생긴다. A 프로젝트에서 쓰던 코드를 B 프로젝트에서도 사용해야 한다고 해보자. 간단한 경우에는 그냥 코드를 복붙 해서 사용할 수 있다. 하지만 공통으로 사용하는 코드가 많고 여러 군데에서 최신의 코드를 유지해야 한다면 단순 복붙으로는 관리하기가 힘들 것이다. 이런 경우엔 Git의 서브모듈이라는 도구를 사용하면 관리가 수월해진다.
[Git] Git Submodule에 대하여
https://leveloper.tistory.com/176
[Git] Git Submodule에 대하여
git Submodule 사용하기
아래 내용은 https://blog.github.com/2016-02-01-working-with-submodules/ 에 포스팅된 글을 번역 및 추가한 것이다. 복잡한 소프트웨어 프로젝트는 다른 프로젝트, 라이브러리 또는 프레임워크에 의존하게 되는 경우가 많다. Git(깃) 은 submodule(서브모듈)을 제공하여 이러한 과정을 돕는다. 서브모듈은 다른 repository(저장소)를 하나의 sub-folder로 추가할 수 있도록 한다. Git 에서 Submodule을 사용하면 재사용되는 제네릭한 프로젝트들을 부모 프로젝트에서 분리해서 관리하기 쉽고 다른 프로젝트에 적용하기 쉽지만 사용하기가 번잡스러운 부분이 있다.
git Submodule 사용하기
https://kyubot.tistory.com/129
git Submodule 사용하기
git submodule로 중요한 정보 관리하기
git submodule은 메인(부모) 레포지토리에 하위(자식) 레포지토리를 두고 관리하기 위한 도구이다. 하나의 프로젝트에서 다른 프로젝트를 함께 사용해야 하는 경우 주로 활용한다. 필자는 이번에 이를 프로젝트 비밀 정보를 숨기기 위한 용도로 이용했다. 어떻게 적용하게 됐는지, 어떻게 적용했는지를 글을 통해 알아보자. 레벨 3 팀 프로젝트를 진행하며 중요한 정보(e.g. secret key)를 외부에 노출되지 않게 관리할 일이 생겼다.
git submodule로 중요한 정보 관리하기
https://tecoble.techcourse.co.kr/post/2021-07-31-git-submodule/
git submodule로 중요한 정보 관리하기