# [[Monorepo Architecture|Monorepo Architecture]] ## ๐Ÿ“Œ Brief Summary ํ”„๋ก ํŠธ์—”๋“œ ๋ชจ๋…ธ๋ ˆํฌ([[Monorepo|Monorepo]]) ์•„ํ‚คํ…์ฒ˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ(์›น ์•ฑ, ์–ด๋“œ๋ฏผ ์•ฑ, ๊ณต์œ  UI ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฆฐํŠธ(Lint) ๋ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ๋“ฑ)๋ฅผ ๋‹จ์ผ Git ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ด๋Š” ๋‹จ์ˆœํ•œ ํด๋”์˜ ์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ผ ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„์™€ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ–์ถ˜ ์‹œ์Šคํ…œ์œผ๋กœ, ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋””์ž์ธ ํ† ํฐ์ด๋‚˜ UI ์›์‹œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ๊ณต์œ ํ•˜๊ณ  ์›์ž์  ๋ฆฌํŒฉํ† ๋ง(Atomic refactors)์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 3]. ## ๐Ÿ“– Core Content * **๊ตฌ์กฐ ๋ฐ ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ (Packages & [[Boundaries|Boundaries]]):** ๋ชจ๋…ธ๋ ˆํฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ค์ œ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„์ธ `apps/` ๋””๋ ‰ํ„ฐ๋ฆฌ([[Next.js|Next.js]], Vite ๋“ฑ)์™€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋นŒ๋”ฉ ๋ธ”๋ก์ด ๋ชจ์ธ `packages/` ๋””๋ ‰ํ„ฐ๋ฆฌ(ui, shared, api-client, config ๋“ฑ)๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค [2]. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒจํ‚ค์ง€ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„ ์„ค์ •์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [4, 5]. * **๊ณต๊ฐœ API๋ฅผ ํ†ตํ•œ ์บก์Аํ™” ([[Public APIs|Public APIs]]):** ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ์„ธ๋ถ€ ๊ตฌํ˜„์ด ์™ธ๋ถ€๋กœ ๋ˆ„์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด '๊นŠ์€ ๊ฐ€์ ธ์˜ค๊ธฐ(Deep imports)'๋ฅผ ๊ธˆ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 6]. `package.json`์˜ `exports` ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ •์ ์ธ ์ง„์ž…์ (์˜ˆ: `src/index.ts`)๋งŒ์„ ํ†ตํ•ด ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ๊ฐ•์ œํ•จ์œผ๋กœ์จ(์˜ˆ: `import Button from "@acme/ui/src/button/Button"` ๋Œ€์‹  `import { Button } from "@acme/ui"` ์‚ฌ์šฉ), ์˜์กด์„ฑ์„ ์บก์Аํ™”ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋ง์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [5, 7]. * **ํ•ต์‹ฌ ๋„๊ตฌ (Tooling):** ์„ฑ๊ณต์ ์ธ ๋ชจ๋…ธ๋ ˆํฌ ์šด์˜์„ ์œ„ํ•ด ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐ ์ž‘์—… ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [8]. * **pnpm workspaces:** ๋น ๋ฅธ ์„ค์น˜์™€ ์—„๊ฒฉํ•œ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, `workspace:*` ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋‚ด๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค [9, 10]. * **[[Turborepo|Turborepo]]:** ์ž‘์—… ํŒŒ์ดํ”„๋ผ์ธ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์ ์ง„์  ๋นŒ๋“œ(Incremental builds) ๋ฐ ์›๊ฒฉ ์บ์‹ฑ์„ ํ†ตํ•ด ๋กœ์ปฌ ๊ฐœ๋ฐœ๊ณผ CI ์†๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [7, 11, 12]. * **Nx:** ๊ฐ•๋ ฅํ•œ ํ”„๋กœ์ ํŠธ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”(affected) ํ”„๋กœ์ ํŠธ๋งŒ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธํ•˜๊ณ , ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์™„์ „ํ•œ ๋ชจ๋…ธ๋ ˆํฌ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค [13-15]. * **Lerna:** ๋‹ค์ค‘ ํŒจํ‚ค์ง€์˜ ๋ฐฐํฌ(Publishing) ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค [10, 16]. * **๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ:** ๋ชจ๋…ธ๋ ˆํฌ ๋‚ด์˜ ์ฝ”๋“œ๊ฐ€ ๋ฌด์งˆ์„œํ•œ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด FSD([[Feature-Sliced Design|Feature-Sliced Design]])์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ก ์ด ๊ฒฐํ•ฉ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [17, 18]. ์ฝ”๋“œ๋ฅผ `shared`, `entities`, `features`, `widgets`, `pages`, `app` ๋“ฑ ๋ช…ํ™•ํ•œ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ•˜์œ„ ๊ณ„์ธต์ด ์ƒ์œ„ ๊ณ„์ธต์„ ์ฐธ์กฐํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค [17, 19]. ๋˜ํ•œ ๋ฒˆ๋“ค ๋‚ด์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ React๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด์„ฑ์€ '์•ฑ'์ด ์†Œ์œ ํ•˜๊ณ  '๊ณต์œ  ํŒจํ‚ค์ง€'๋Š” ์ด๋ฅผ peer dependency๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [20]. * **CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ตœ์ ํ™”:** ๋Œ€๊ทœ๋ชจ ์ €์žฅ์†Œ์—์„œ๋Š” ๋ณ€๊ฒฝ๋œ ๋ชจ๋“ˆ๊ณผ ๊ทธ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์•ฑ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ๋ฆฐํŠธ, ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” '์˜ํ–ฅ๋„ ๊ธฐ๋ฐ˜(affected)' ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์›๊ฒฉ ์บ์‹ฑ(Remote caching)์„ ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋น ๋ฅด๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [12, 21, 22]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Component Library Architecture|Component Library Architecture]], Feature-Sliced Design (FSD), [[React Design Tokens|React Design Tokens]] - **Projects/Contexts:** ๋‹ค์ˆ˜์˜ React/Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ณตํ†ต UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณด์œ ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ทœ๋ชจ์˜ ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ - **Contradictions/Notes:** ๋ชจ๋…ธ๋ ˆํฌ๋Š” ์—ฌ๋Ÿฌ ์•ฑ์ด ์ฝ”๋“œ์™€ ๋„๊ตฌ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์œ ๋ฆฌํ•˜์ง€๋งŒ, ์•ฑ์ด ์„œ๋กœ ๋…๋ฆฝ์ ์ธ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š” ์™„์ „ ๋ณ„๊ฐœ์˜ ์ œํ’ˆ์ด๊ฑฐ๋‚˜, ์กฐ์ง์˜ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์œ„ํ•ด ์—„๊ฒฉํ•œ ์ €์žฅ์†Œ ๋ถ„๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ํด๋ฆฌ๋ ˆํฌ(Polyrepo) ๋ฐฉ์‹์ด ๋” ์•ˆ์ „ํ•˜๊ณ  ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [23]. --- *Last updated: 2026-04-26*