Skip to content

๐Ÿ“ฆ Monorepo๋ž€? - Polyrepo์™€ ๋น„๊ตํ•ด๋ณด๊ธฐ โ€‹

ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ pnpm + Turborepo ๊ธฐ๋ฐ˜ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ–ˆ๋‹ค.
Monorepo์˜ ๊ฐœ๋…๊ณผ Polyrepo์™€์˜ ์ฐจ์ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.


https://medium.com/@magenta2127/monorepo-vs-multi-repo-vs-monolith-7c4a5f476009

๐Ÿงฉ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€ - ์ด๊ฒŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ „๋žต์˜ ํ•ต์‹ฌ์ด๋‹ค.

์ „๋žต์„ค๋ช…
๋ชจ๋…ธ๋ฆฌ์Šค(Monolith)ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ์•ˆ์— ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์–ด ๋ถ„๋ฆฌ๊ฐ€ ์–ด๋ ค์šด ๊ตฌ์กฐ
ํด๋ฆฌ๋ ˆํฌ(Polyrepo)์„œ๋น„์ŠคยทํŒจํ‚ค์ง€๋งˆ๋‹ค ๊ฐ๊ฐ ๋ณ„๋„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜
๋ชจ๋…ธ๋ ˆํฌ(Monorepo)ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์•ˆ์— ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ๋…๋ฆฝ์ ์ธ ๊ฒฝ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ

Monorepo โ‰  Monolith

  • Monorepo โ†’ ์ €์žฅ์†Œ๊ฐ€ ํ•˜๋‚˜
  • Monolith โ†’ ๊ตฌ์กฐ๊ฐ€ ํ•˜๋‚˜
  • ๋ชจ๋…ธ๋ ˆํฌ๋Š” ์ฝ”๋“œ๊ฐ€ ํ•œ ๋ ˆํฌ์— ์žˆ์–ด๋„ ๊ฐ ํŒจํ‚ค์ง€๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Monorepo๋ž€? โ€‹

๋ชจ๋…ธ๋ ˆํฌ๋Š” ๋‹จ์ผ ์ €์žฅ์†Œ(Monolithic Repository)์˜ ์•ฝ์ž๋กœ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๋Š” ์ „๋žต์ด๋‹ค.

๋‹จ์ˆœํžˆ ํด๋”๋ฅผ ํ•œ๋ฐ ๋ชจ์•„๋‘๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ด€๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.

  • ํŒจํ‚ค์ง€ ๊ฐ„ ์˜์กด์„ฑ ๊ณต์œ 
  • ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์žฌ์‚ฌ์šฉ
  • ํ†ตํ•ฉ๋œ ์„ค์ • ๊ด€๋ฆฌ
  • ์บ์‹œ ๊ธฐ๋ฐ˜ ๋นŒ๋“œ

Monorepo์˜ ์žฅ๋‹จ์  โ€‹

์žฅ์  โ€‹

  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™”: ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” UI, utils ๋“ฑ์„ ๋ณ„๋„์˜ ๋ฐฐํฌ ๊ณผ์ • ์—†์ด ๋ฐ”๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์›์ž์  ์ปค๋ฐ‹ (Atomic Commits): ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์˜ PR๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด ๋ฒ„์ „ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

  • ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: ESLint, Prettier ์„ค์ • ๋“ฑ์„ ์ตœ์ƒ์œ„์—์„œ ํ•œ ๋ฒˆ๋งŒ ๊ด€๋ฆฌํ•˜๋ฉด ๋ชจ๋“  ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.


๋‹จ์  โ€‹

  • CI/CD ๋ณต์žก๋„์™€ ๋นŒ๋“œ ์‹œ๊ฐ„: ์ €์žฅ์†Œ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ „์ฒด ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ Turborepo๋‚˜ Nx ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ํŒจํ‚ค์ง€๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” ์ „๋žต์ด ํ•„์ˆ˜์ ์ด๋‹ค.

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ: ์ดˆ๋ฐ˜ ํ™˜๊ฒฝ ๊ตฌ์ถ•์— ์‹œ๊ฐ„์ด ๋‹ค์†Œ ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜์กด์„ฑ ์˜ค์—ผ: ํŠน์ • ํ”„๋กœ์ ํŠธ์—๋งŒ ํ•„์š”ํ•œ ์˜์กด์„ฑ์ด ๋ฃจํŠธ์— ์„ค์น˜๋˜์–ด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๐Ÿชบ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ž€?

pnpm, yarn ๋“ฑ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ package.json์„ ๊ฐ€์ง„ ํด๋”๋“ค์„ ๊ฐœ๋ณ„ ํŒจํ‚ค์ง€๋กœ ์ธ์‹ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ๋งˆ์น˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ฒ˜๋Ÿผ importํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.


Polyrepo๋ž€? โ€‹

Polyrepo(Multi-repo)๋Š” ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์ €์žฅ์†Œ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์ด๋‹ค.
๊ฐ ์„œ๋น„์Šค(User, Admin, API ๋“ฑ)๋Š” ์ž์‹ ๋งŒ์˜ ๋…๋ฆฝ์ ์ธ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค.


Polyrepo์˜ ์žฅ๋‹จ์  โ€‹

์žฅ์  โ€‹

  • ํŒ€๋ณ„ ์ž์œจ์„ฑ: ํŒ€๋งˆ๋‹ค ์›ํ•˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ์ปจ๋ฒค์…˜์„ ์ž์œ ๋กญ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฒฉ๋ฆฌ๋œ ๊ถŒํ•œ: ํŠน์ • ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‰ฝ๋‹ค.

๋‹จ์  โ€‹

  • ์ฝ”๋“œ ์ค‘๋ณต: ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋งˆ๋‹ค ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๋™๊ธฐํ™”์˜ ์–ด๋ ค์›€: ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ผ์ผ์ด ๋“ค์–ด๊ฐ€์„œ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ vs ํด๋ฆฌ๋ ˆํฌ (Multi-repo) โ€‹

๊ตฌ๋ถ„๋ชจ๋…ธ๋ ˆํฌ (Monorepo)ํด๋ฆฌ๋ ˆํฌ (Polyrepo / Multi-repo)
๊ด€๋ฆฌ ๋ฐฉ์‹ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์—์„œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๊ฐœ๋ณ„ ์ €์žฅ์†Œ ์šด์˜
์ฝ”๋“œ ๊ณต์œ ๋‚ด๋ถ€ ํŒจํ‚ค์ง€ ์ฐธ์กฐ๋กœ ๋งค์šฐ ์‰ฌ์›€NPM ๋ฐฐํฌ ๋˜๋Š” ๋ณ„๋„ ์„ค์ • ํ•„์š”
์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฒ„์ „ ์ผ๊ด€์„ฑ ์œ ์ง€๊ฐ€ ์‰ฌ์›€ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋ฒ„์ „์ด ๋‹ฌ๋ผ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ
CI/CD๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋นŒ๋“œํ•˜๋Š” ๋ณต์žกํ•œ ์„ค์ • ํ•„์š”๊ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋…๋ฆฝ์ ์ด๋ผ ๋นŒ๋“œ๊ฐ€ ๋น ๋ฆ„
๊ถŒํ•œ ๊ด€๋ฆฌ์ €์žฅ์†Œ ์ „์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ๋ถ€์—ฌํ”„๋กœ์ ํŠธ๋ณ„๋กœ ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์ œ์–ด ๊ฐ€๋Šฅ
ํ™•์žฅ์„ฑ๋†’์Œ๋‚ฎ์Œ