프로그래밍/Git

두 개의 레포, 하나처럼 다루는 법 : git 서브모듈 이용하기

코줍 2025. 2. 16. 19:08

두 개의 레포, 하나처럼 다루고 싶다면?

oraganization 우후죽순 짤

이번 사이드 프로젝트에서는 프론트엔드와 백엔드를 독립적인 레포지토리로 관리하되, 하나의 프로젝트로 묶어야 해서 늘 사용하던 Organization을 생성할까 고민하다가, Organization의 무한생성이 싫어서…ㅋㅋㅋㅋ 다른 방법을 찾아보니 git 서브모듈 방법을 알게됐다.
 

서브모듈이란?

Git 서브모듈( Submodules )은 한 레포지터리 안에 또 다른 Git 저장소를 포함하는 방법을 말한다.
예를 들어, Backend 레포 안에 Frontend 레포를 하위폴더처럼 추가할 수 있되, 독립적으로 관리할 수 있다.
 

서브모듈 이용하기 전에 고려할 점

결론부터 말하자면 협업할 땐, 쓰지 않는 게 좋다.


레포 내 서브모듈의 존재를 모르는 협업자가 git clone을 하면 서브모듈이 빠진 채로 클론이 되기 때문이다.
따라서 일반적으로 클론하는 방식이 아닌 아래와 같이 --recurse-submodules 옵션을 추가적으로 작성해서 클론받아야 한다.

git clone --recurse-submodules https://github.com/{백엔드레포 저장소}

 
또한, 서브모듈은 기본적으로 특정 커밋을 가리키고 있기 때문에, 서브모듈 내부에서 변경이 생기면 따로 업데이트 해줘야 한다. ( 같은 레포에 있지만, 서로 다른 깃 히스토리를 가지고 있는 것이다. ). 
 
이걸 계속 신경쓰면서 최신상태 유지하는게 여러 명이서 작업하는 레포라면 조금 복잡할 수 있을 것 같다.
혼자서도 서브모듈은 하나만 만들어야겠다...2개이상 만드는 순간부터 어지러울 거 같다.
 

서브모듈로 추가하는 방법

📌 백엔드레포 안에 프론트엔드를 서브모듈로 추가할 거다.

1. 클론한 백엔드 레포에서 frontend 서브모듈 생성

git submodule add https://github.com/{백엔드레포 깃주소} frontend

 

2. commit & push

git commit -m "feat:서브모듈 frontend 추가"
git push origin main

 
이로서 원격저장소에도 frontend가 서브모듈인 것을 반영했다.

각각의 커밋 & 관리 방법

1. 백엔드 커밋 & 푸시

원래 백엔드 레포작업하던대로 하면된다. ( 여기서 프론트엔드 코드는 전혀 커밋되는 내용에 포함되지 않는다 )

git add .
git commit -m "feat:기능 추가"
git push origin main

 

2. 프론트엔드 커밋 & 푸시 

프론트엔드 폴더로 이동해서 커밋, 푸시 해주면 된다. 

cd frontend # 프론트엔드 폴더로 이동
git add .
git commit -m "feat:기능 추가"
git push origin main

 

3. 서브모듈(프론트엔드) 최신상태 동기화방법 ⚠️

# 프론트엔드 최신상태 
cd frontend
git pull origin main

# 그런 다음 백엔드도 프론트엔드의 최신상태를 동기화 해줘야 함.
cd ..
git add frontend
git commit -m "Update frontend submodule"
git push origin main