Notice
Recent Posts
Recent Comments
Link
헬창 개발자
종속성 관리 - 서브모듈, 서브트리 본문
Submodule과 Subtree를 활용한 외부 종속성 관리 및 프로젝트 통합
이 문서에서는 Submodule과 Subtree를 활용하여 외부 종속성의 코드를 안정적으로 관리하고, 이를 프로젝트에 효과적으로 통합하는 방법을 다룹니다.
1. Submodule
목적
- 하나 이상의 외부 저장소를 현재 저장소에 링크 형태로 포함시키기 위해 사용
- 예: 프로젝트 A 안에 외부 저장소 B를 독립적인 버전 상태로 포함 가능
작동 방식
- 부모 저장소는 서브모듈이라 불리는 외부 저장소에 대한 참조(링크)만 유지
- 서브모듈은 독립적인 Git 저장소로 관리되며, 별도의 .git 디렉토리를 가짐
- 부모 저장소는 서브모듈의 특정 커밋 해시만 기록함
2. Subtree
목적
- 외부 저장소의 코드를 현재 저장소에 복사하여 포함시키기 위해 사용
- 하나의 Git 저장소 안에서 통합적으로 버전 관리할 수 있음
작동 방식
- 외부 저장소의 특정 디렉터리를 가져와서 현재 저장소에 병합
- 이 과정에서 외부 저장소의 커밋 히스토리도 함께 반영됨
1. Submodule과 Subtree 적용 실습
Submodule과 Subtree를 실제 프로젝트에 적용하여, 외부 코드를 어떻게 통합하고 관리하는지 직접 확인해보겠습니다.
2. 프로젝트 구조 설정
- 클라이언트 프로젝트와 서버 프로젝트를 위한 디렉토리를 각각 생성합니다.
- 각 디렉토리에서 Git 저장소를 초기화합니다.
git init - 두 저장소에 간단한 예제 코드를 작성합니다.
3. Submodule 적용하기
3-1. Submodule 추가
클라이언트 프로젝트에 서버 프로젝트를 서브모듈로 추가합니다.
git submodule add <lib_repository_url> <path>
- <path>: 클라이언트 프로젝트 내에서 서브모듈을 둘 디렉토리 경로
3-2. Submodule 초기화
git submodule update --init --recursive
3-3. Submodule 동기화
서버 프로젝트 변경 사항을 가져와 최신 상태로 유지합니다.
# 특정 서브모듈만 업데이트
git submodule update --remote <path>
# 전체 서브모듈 업데이트
git submodule update --remote
💡 서버 프로젝트 변경 시, 해당 디렉토리에서 직접 커밋 및 푸시 후 클라이언트 프로젝트에서 업데이트해야 합니다.
서브 모듈추가 시 별도의 레파지토리가 생긴다.
test_fd : 프로젝트 디렉터리
commons : 서브모듈 디렉터리
서브모듈을 커밋 후에 git을 가서 확인하면 @로 참조가 된걸 확인이 가능하다.
4. Subtree 적용하기
4-1. Subtree 추가
git subtree add --prefix=<path> <lib_repository_url> master
- <path>: 클라이언트 프로젝트 내에 통합될 서버 프로젝트 디렉토리
4-2. Subtree 업데이트 및 변경 사항 반영
- 클라이언트 프로젝트에서 서버 코드 변경 후 커밋하면, 해당 변경 사항도 함께 관리됩니다.
- 서버 프로젝트에 변경 내용을 다시 푸시할 수도 있습니다.
git subtree push --prefix=<path> <lib_repository_url> master
서브트리 생성 시 다음과 같은 로그가 적용된다.
5. 결과 확인
Submodule 적용 결과
- 서버 프로젝트를 분리된 Git 저장소로 관리하면서, 클라이언트 프로젝트 내에서 API를 사용할 수 있습니다.
- git submodule update로 서버 프로젝트 변경 사항을 동기화합니다.
Subtree 적용 결과
- 서버 프로젝트 코드가 클라이언트 프로젝트에 직접 통합됩니다.
- 클라이언트에서 서버 코드를 직접 수정하고, 필요 시 서버 저장소로 변경 사항을 다시 푸시할 수 있습니다.
'공부방' 카테고리의 다른 글
Hash Ring (1) | 2025.07.03 |
---|---|
Sync/Async & Blocking/Non-blocing (2) | 2025.06.30 |
메시지 브로커(Redis)와 Celery (0) | 2025.05.29 |
docker health check (0) | 2025.05.09 |
논문 리뷰: s1: Simple test-time scaling (1) | 2025.02.18 |
Comments