--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Monorepo Architecture|Monorepo Architecture]] last_updated: 2026-05-02 --- # [[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]. --- λ³Έλ¬Έ ꡬ쑰화 μž‘μ—… 쀑... ## βš–οΈ Trade-offs & Caveats - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Design & Experience λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 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* --- - Raw Source: 00_Raw/2026-04-20/Monorepo-Architecture.md ---