본문 바로가기
안드로이드

[안드로이드] common 모듈을 공통적으로 사용하는 건 어떤가요?

by keel_im 2022. 6. 19.
반응형

배경

개인 프로젝트를 여러개를 진행하다보면 프로젝트를 구성하는 것에서 중복되는 부분을 항상 발견하곤 합니다. kotlin 확장 함수나, Util Class 같은 것들은 Github 하나의 프로젝트에 종속되어야 하는가에 대한 고찰 이랄까? 요런 생각이 들쯤, 1가지 묘안을 떠오르게 됩니다.

Git Submodule

깃에는 서브 모듈이라는 개념이 있어 하나의 프로젝트에서 의존적으로 또 다른 Git 으로 운영되는 프로젝트를 소유할 수 있습니다.

Git Submodule 사용법

사용법은 간단하니 간단한 검색으로 찾아보시기 바랍니다. 저는 프로젝트에서 사용했던 스크립트 등을 보면서 이야기를 해보겠습니다.

submodule 을 선언하게 되면 .gitmodules 라는 파일이 생성되면 아래와 같은 방식으로 선언됩니다. 저는 기본적으로 common 프로젝트를 다른 프로젝트들과 공용으로 하고 싶다는 니즈가 있습니다. 또한 master branch 에 있는 것들을 가지고 오고 싶었습니다.

[submodule "common"]
    path = common
    url = https://github.com/keelim/common
    branch = master

Git Submodule 사용모습

Submodule 사용모습

Git Submodule 장점

본인이 생각하는 Git Submodule 을 통해 common 프로젝트를 쓰면서 느낀 장점은 2가지 이다.

  1. 공통적으로 사용하고 있는 코드들에 대한 책임이 줄어든다. (프로젝트에서 공용으로 사용하고 이를 Copy and Paste 방식으로 사용한다면 다른 프로젝트에서 부담 사용에서 부담이 점점 커진다.)
  2. 빠른 목업(mock up) 이 가능하다. (샘플 프로젝트 같은 경우 내가 사용하고 싶은 common 모듈을 쓰고 싶은 경우가 있는데, 이를 추가하고 삭제하기가 정말 용이하다. )

Git Submodule 단점

  1. 쓸데 없는 커밋이 있을 수는 있다. (이런 서브 모듈은 변경사항이 있을때 마다 메인에서는 커밋을 찍어주어야 한다. )
  2. 프로젝트 마다 공통된 방식으로 빌드 시스템을 운영해야 한다. (따로 buildSrc 를 사용하거나 버전 카탈로그등을 사용한다면 제대로된 작동 효과를 누리기 힘들다.)

내가 사용하는 방법은?

이 장단점을 보면서 적절히 자신의 맞게 활용하셨으면 좋겠습니다. 저는 아래처럼 script 를 짜서 활용하고 있습니다.

git submodule foreach git checkout -b newfeature
git submodule foreach git add -A .
git submodule foreach git commit -am "update common module"
git submodule foreach git checkout master
git submodule foreach git merge versionupdate
git submodule foreach git push
git submodule foreach git branch -d versionupdate

서브 모듈을 수정하려면 따로 명령어를 처야 용이합니다. 또한 HEAD 로 잡혀서 제대로 push 안되는 경우가 있기 때문에 위와 같은 스크립트를 찍어서 commit 하고 push 하는 것이 좋다고 판단했습니다.

결론

사용방법을 잘 모른다면, 다음에 적용하는 것이 좋습니다. 생각보다 커밋의 내용을 중요하게 보는 조직도 있고 이러한 서브 모듈 변경사항까지 커밋에 포함되어야 하는가? 에 대한 의문점이 작용하는 부분도 있습니다. 하지만, 저는 장점이 더 크다고 판단했고 다른 프로젝트에서 유용하게 사용하고 있습니다.

반응형

댓글