Monorepo Tool

Monorepo Tool (Lerna, Nx, Rush, Turborepo)

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ๋“ค ์™ธ์— ์ „๋ฌธ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๊ตฌ ๋ฐ ๊ธฐ๋Šฅ๋“ค (์†๋„, ๋ถ„์„, ๊ด€๋ฆฌ ์ธก๋ฉด)

https://monorepo.tools/

  • ๊ฐœ๋ฐœ ๊ณผ์ • ์ค‘ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ ํŒจํ‚ค์ง€์˜ ์ฝ”๋“œ๋ฅผ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋นŒ๋“œ ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „ ๋งค๋ฒˆ ๋นŒ๋“œ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค.

    • ๋ชจ๋…ธ๋ฆฌํฌ ํˆด์„ ํ™œ์šฉํ•œ๋‹ค๋ฉด, ์ฝ”๋“œ ๋ณ€๊ฒฝ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์บ์‹ฑ๋œ ๋นŒ๋“œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ฑฐ๋‚˜ ์ด๋Ÿฐ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด์†Œํ•ด์ฃผ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋ถ„์„๊ณผ ์‹œ๊ฐํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์ „์ฒด์ ์ธ ์ฐธ์กฐ ์˜์กด ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ํšจ๊ณผ์ 

  • ์Šค์ผ€ํด๋”ฉ์ด๋‚˜ ์ฝ”๋“œ ๊ณต์œ , ํŒจํ‚ค์ง€ ์‚ฌ์šฉ ์ œํ•œ ๋“ฑ์˜ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜์ž‘์—…์ด ์•„๋‹Œ ๋„๊ตฌ๋“ค์„ ํ™œ์šฉํ•˜๋ฉด ํŽธํ•จ

  • ๋ชจ๋…ธ๋ ˆํฌ ๋„๊ตฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ๋ชฐ๋ž๋˜ ๋ชจ๋…ธ๋ฆฌํฌ์˜ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

Package Manager Workspaces๋ž€?

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €(NPM, Yarn, Pnpm)์—์„œ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— workspace ๊ธฐ๋Šฅ์œผ๋กœ ์—ฌ๋Ÿฌ ํ•˜์œ„ ํŒจํ‚ค์ง€๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋งŒ์œผ๋กœ๋Š” ๋ชจ๋…ธ๋ฆฌํฌ๋ฅผ ์šด์˜ํ•˜๊ธฐ ์•„์‰ฌ์šด ๋ถ€๋ถ„๋“ค์ด ์กด์žฌ

Monorepo Tool ์ œ๊ณต ๊ธฐ๋Šฅ๋“ค

์†๋„

  • Local computation caching (๋กœ์ปฌ ์บ์‹ฑ)

    • Lerna, Nx, Rush, Turborepo

    • ํ•œ๋ฒˆ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ๋ฌผ(๋นŒ๋“œ)์„ ์บ์‹ฑํ•˜์—ฌ ์บ์‹ฑ๋œ ์ž์›์„ ํ™œ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ

  • Distribute computation caching (๋ถ„์‚ฐ ์บ์‹ฑ)

    • Lerna, Nx, Rush, Turborepo

    • ๊ฐ™์€ ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ ์ž‘์—… ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์บ์‹ฑ๋œ ๋นŒ๋“œ ์ž์›์„ ํ™œ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ

    • CI ์ž‘์—…ํ•  ๋•Œ ์ค‘์š”

  • Local task orchestration (๋กœ์ปฌ ์ž‘์—… ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜)

    • Lerna, Nx, Rush, Turborepo

    • ์ข…์†์„ฑ ์ด์Šˆ๋กœ ๋นŒ๋“œ์˜ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•ด์„œ ์ž‘์—…์˜ ์ˆœ์„œ๋ฅผ ๋‚˜์—ดํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

    • ์ข…์†์„ฑ ์ด์Šˆ๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋นŒ๋“œํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • Distribute task execution (๋ถ„์‚ฐ ์ž‘์—…)

    • Lerna, Nx

    • ๋กœ์ปฌ์ด ์•„๋‹Œ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • Detecting affected packages (๋ณ€๊ฒฝ ๊ฐ์ง€)

    • Lerna, Nx, Rush, Turborepo

    • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ•ญ๋ชฉ๋“ค๋งŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

    • ํŠน์ • ํŒจํ‚ค์ง€์˜ ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ํ•ด๋‹น ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์• ๋“ค๋งŒ ๋นŒ๋“œ ๋˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋ถ„์„

  • Workspace analysis (์ž‘์—… ์˜์—ญ ๊ฐ์ง€ ๋ฐ ๋ถ„์„)

    • Lerna, Nx, Rush, Turborepo

    • ๋ณ„๋„์˜ ์ถ”๊ฐ€ ์„ค์ • ์—†์ด package.json ์„ ์‚ฌ์šฉํ•ด์„œ ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ ํ”„๋กœ์ ํŠธ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

  • Dependency graph visualization (์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”)

    • Nx, Turborepo

    • ํ”„๋กœ์ ํŠธ ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐํ™” ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

    • turborepo๋Š” HTML ๋ฌธ์„œ๋กœ๋งŒ ์ œ๊ณตํ•˜๊ณ  Nx๋Š” ๊ฒ€์ƒ‰, ํ•„ํ„ฐ๋ง ๋“ฑ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋กœ ์ œ๊ณต

๊ด€๋ฆฌ

  • Source code sharing (์†Œ์Šค ์ฝ”๋“œ ๊ณต์œ )

    • Lerna, Nx, Rush, Turborepo

    • ๊ฐœ๋ณ„ ์†Œ์Šค ์ฝ”๋“œ ์กฐ๊ฐ์„ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

    • ๊ธฐ๋ณธ์€ NPM Package๋งŒ ๊ณต์œ ์‚ฌํ•ญ

  • Code generation (์Šค์ผ€ํด๋”ฉ)

    • Nx

    • package.json ๋งŒ ์žˆ๋‹ค๋ฉด ์Šค์ผ€ํด๋”ฉ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • Consistent tooling (์ผ๊ด€๋œ ๋„๊ตฌ)

    • Nx

    • ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ๋„๊ตฌ๋“ค์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • Project contraints and visibility (์ข…์†์„ฑ ๊ด€๊ณ„ ์ œํ•œ)

    • Nx, Rush,

    • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์˜ ์ข…์†์„ฑ ๊ด€๊ณ„๋ฅผ ์ œํ•œํ•˜๋Š” ๊ทœ์น™์„ ์„ค์ •

Last updated