์ผ๋ฐ˜

Git Submodules

Git ์ €์žฅ์†Œ์—์„œ ํƒ€์‚ฌ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•

  • #git
  • #workflow
  • #library

Git Submodule (๊นƒ ์„œ๋ธŒ๋ชจ๋“ˆ)์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ Git ์ €์žฅ์†Œ๋ฅผ ๋‹ค๋ฅธ Git ์ €์žฅ์†Œ์˜ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ข…์†์„ฑ์ด๋‚˜ ๊ณต์œ  ์ฝ”๋“œ๋ฅผ ์ €์žฅ์†Œ ์ž์ฒด์— ํฌํ•จํ•˜๊ณ  ์ถ”์ ํ•˜๋ฉด์„œ๋„ ๋ณ„๋„์˜ ๋ฒ„์ „ ๊ธฐ๋ก์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ณต์œ  ์ฝ”๋“œ๋Š” ์ตœ์‹  ๋ฒ„์ „์ด ์•„๋‹Œ ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด๋Š” ์™ธ๋ถ€ ์†Œ์Šค์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์ €์žฅ์†Œ๊ฐ€ ์†์ƒ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์ธ ์„ฑ๋ช…

ํ•œ๊ตญ์–ด ์‹ค๋ ฅ์ด ๋ถ€์ ํ•˜์—ฌ ์ด ๊ธ€์ด ๊ตฌ๊ธ€ ๋ฒˆ์—ญ๊ธฐ๋ฅผ ์ฃผ๋กœ ํ™œ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ •ํ™•ํ•œ ๋ฌธ๋ฒ•๊ณผ ์–ดํœ˜๊ฐ€ ์žˆ์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์  ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฌ๋ฉฐ, ์ถ”ํ›„์— ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์„ค์ •

์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

๊ธฐ์กด Git ์ €์žฅ์†Œ์— ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์€ submodule add ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git submodule add <repository-url> <path>

์˜ˆ๋ฅผ ๋“ค์–ด, libs ๋””๋ ‰ํ† ๋ฆฌ์— shared-utils๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

git submodule add https://github.com/username/shared-utils.git libs/shared-utils

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ง€์ •๋œ ๊ฒฝ๋กœ์— ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ €์žฅ์†Œ ๋ฃจํŠธ์˜ .gitmodules ํŒŒ์ผ์—์„œ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹

์ถ”๊ฐ€๋œ ์„œ๋ธŒ๋ชจ๋“ˆ์€ .gitmodules ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์ปค๋ฐ‹๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

git add .gitmodules libs/shared-utils
git commit -m "Add shared-utils submodule"

ํ”„๋กœ์ ํŠธ ํด๋ก 

์„œ๋ธŒ๋ชจ๋“ˆ์ด ํฌํ•จ๋œ ์ €์žฅ์†Œ๋ฅผ ํด๋ก ํ•  ๋•Œ, ์„œ๋ธŒ๋ชจ๋“ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ„๋„๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

git clone <your-repository-url>
cd <your-repository>
git submodule init
git submodule update

๋‹คํ–‰ํžˆ ํด๋ก ํ•  ๋•Œ --recurse-submodules ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•œ ์ค„์งœ๋ฆฌ ํด๋ก  ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.

git clone --recurse-submodules <your-repository-url>

์ผ๋ฐ˜์ ์ธ ์ž‘์—…

์„œ๋ธŒ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ

์„œ๋ธŒ๋ชจ๋“ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜ค๋ฆฌ์ง„์˜ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„œ๋ธŒ๋ชจ๋“ˆ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ, ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ๋กœ ๋Œ์•„๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ปค๋ฐ‹ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

cd libs/shared-utils
git pull origin main
cd ../..
git add libs/shared-utils
git commit -m "Update shared-utils submodule"

๋ชจ๋“  ์„œ๋ธŒ๋ชจ๋“ˆ์„ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

git submodule update --remote

์ƒํƒœ ํ™•์ธ

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ์„œ๋ธŒ๋ชจ๋“ˆ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git submodule status

๊ทธ๋Ÿฌ๋ฉด ๊ฐ ์„œ๋ธŒ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0 libs/shared-utils (v1.2.3)

์ด ๋‚œํ•ดํ•œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ ํ˜•์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[์ƒํƒœ ํ‘œ์‹œ๊ธฐ][์ปค๋ฐ‹ ํ•ด์‹œ] [๊ฒฝ๋กœ] [(ํƒœ๊ทธ/๋ธŒ๋žœ์น˜)]

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋Š” ์ƒํƒœ ํ‘œ์‹œ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ•ด๋‹น ์„œ๋ธŒ๋ชจ๋“ˆ์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ƒํƒœ ํ‘œ์‹œ๊ธฐ์—๋Š” 4๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. (๊ณต๋ฐฑ/๊ธฐํ˜ธ ์—†์Œ) - ์„œ๋ธŒ๋ชจ๋“ˆ์ด ์˜ฌ๋ฐ”๋ฅธ ์ปค๋ฐ‹์œผ๋กœ ์ฒดํฌ์•„์›ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  ๊ฒƒ์ด ๋™๊ธฐํ™”๋จ).
  2. - - ์„œ๋ธŒ๋ชจ๋“ˆ์ด ์•„์ง ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋น„์–ด ์žˆ์Œ).
  3. + - ์„œ๋ธŒ๋ชจ๋“ˆ์ด ์ƒ์œ„ ์ €์žฅ์†Œ์—์„œ ์˜ˆ์ƒํ•˜๋Š” ์ปค๋ฐ‹๊ณผ ๋‹ค๋ฅธ ์ปค๋ฐ‹์œผ๋กœ ์ฒดํฌ์•„์›ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋กœ์ปฌ์—์„œ ๋ณ€๊ฒฝํ–ˆ์ง€๋งŒ ์•„์ง ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์Œ).
  4. U - ์„œ๋ธŒ๋ชจ๋“ˆ์— ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชจ

๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ GitHub ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ณด์‹œ๋ ค๋ฉด ํด๋ก ํ•ด ๋ณด์„ธ์š”.

  1. cdn - JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ €์žฅ์†Œ
  2. use-cdn - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JavaScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

GitHub์—์„œ๋Š” ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์›๋ณธ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ํ•˜์ดํผ๋งํฌ์™€ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ˜„์žฌ ํ•ด์‹œ ์ปค๋ฐ‹(์„œ๋ธŒ๋ชจ๋“ˆ @ ํ•ด์‹œ)์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

GitHub์—์„œ ์„œ๋ธŒ๋ชจ๋“ˆ ์ฐธ์กฐ์˜ ์Šคํฌ๋ฆฐ์ƒท

์š”์•ฝ

์„œ๋ธŒ๋ชจ๋“ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹ค๋ฅธ Git ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํŠน์ • ์ปค๋ฐ‹์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์ข…์†์„ฑ์„ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ „์ฒด ์„œ๋“œํŒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ ๋„ ํ”„๋กœ์ ํŠธ๋ณ„ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

7.11 Git Tools - Submodules. Retrieved 2026, January 17 from https://git-scm.com/book/en/v2/Git-Tools-Submodules
Git Submodules. Retrieved 2026, January 17 from https://www.w3schools.com/git/git_submodules.asp
Mazin, D. Demystifying git submodules.https://www.cyberdemon.org/2024/03/20/submodules.html
Git submodules. Retrieved 2026, January 17 from https://www.atlassian.com/git/tutorials/git-submodule