# [[Component Library Architecture|Component Library Architecture]] ## πŸ“Œ Brief Summary μ»΄ν¬λ„ŒνŠΈ 라이브러리 μ•„ν‚€ν…μ²˜λŠ” ν™•μž₯ κ°€λŠ₯ν•˜κ³  μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„€κ³„ν•˜κ³  μ‘°μ§ν™”ν•˜λŠ” ꡬ쑰적 μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€ [1, 2]. μ΄λŠ” λ‹¨μˆœν•œ μ‹œκ°μ  μš”μ†Œλ₯Ό λ„˜μ–΄, μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ μƒνƒœ 곡유, 둜직 뢄리, μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ„ ν™œμš©ν•˜μ—¬ 일관성 μžˆλŠ” μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€ [3-5]. 잘 μ„€κ³„λœ μ•„ν‚€ν…μ²˜λŠ” κ³Όλ„ν•œ μƒνƒœ 전달([[Prop Drilling|Prop Drilling]])을 λ°©μ§€ν•˜κ³  높은 μœ μ—°μ„±μ„ μ œκ³΅ν•˜μ—¬ λŠμž„μ—†μ΄ λ³€ν™”ν•˜λŠ” μ œν’ˆ μš”κ΅¬μ‚¬ν•­μ— μ•ˆμ „ν•˜κ²Œ λŒ€μ²˜ν•  수 있게 ν•©λ‹ˆλ‹€ [1, 6-8]. ## πŸ“– Core Content * **μ•„ν† λ―Ή λ””μžμΈ([[Atomic Design|Atomic Design]]) 방법둠:** UIλ₯Ό μ›μž(Atoms), λΆ„μž(Molecules), 유기체(Organisms), ν…œν”Œλ¦Ώ(Templates), νŽ˜μ΄μ§€(Pages) λ“± 5λ‹¨κ³„μ˜ κ³„μΈ΅μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΅¬μ‘°ν™”ν•˜λŠ” λ©˜νƒˆ λͺ¨λΈμž…λ‹ˆλ‹€ [2, 9, 10]. μ΄λŠ” λ””μžμΈ μ‹œμŠ€ν…œμ˜ 일관성을 μ΄‰μ§„ν•˜μ§€λ§Œ, λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 결합될 λ•ŒλŠ” UI λΌμ΄λΈŒλŸ¬λ¦¬μ—λ§Œ μ•„ν† λ―Ή ꡬ쑰λ₯Ό μ μš©ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλŠ” κΈ°λŠ₯(Feature) 기반으둜 λΆ„λ¦¬ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μΊ‘μŠν™”ν•˜λŠ” ν•˜μ΄λΈŒλ¦¬λ“œ 방식이 주둜 ꢌμž₯λ©λ‹ˆλ‹€ [11, 12]. * **볡합 μ»΄ν¬λ„ŒνŠΈ([[Compound Components|Compound Components]]) νŒ¨ν„΄:** νƒ­(Tabs)μ΄λ‚˜ μ•„μ½”λ””μ–Έ(Accordion)κ³Ό 같이 λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λœ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ [[React Context|React Context]]λ₯Ό 톡해 μ•”μ‹œμ μœΌλ‘œ μƒνƒœλ₯Ό κ³΅μœ ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€ [13-15]. 무수히 λ§Žμ€ Prop을 ν•˜μœ„λ‘œ 계속 λ„˜κ²¨μ£ΌλŠ” λŒ€μ‹ , μ»΄ν¬λ„ŒνŠΈ μ†ŒλΉ„μžκ°€ 직접 ν•˜μœ„ μš”μ†Œλ₯Ό μ‘°ν•©ν•  수 있게 ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒμ˜ μœ μ—°μ„±μ„ κ·ΉλŒ€ν™”ν•˜κ³  APIλ₯Ό κΉ”λ”ν•˜κ²Œ μœ μ§€ν•©λ‹ˆλ‹€ [3, 6, 16, 17]. * **ν—€λ“œλ¦¬μŠ€ μ»΄ν¬λ„ŒνŠΈ([[Headless Components|Headless Components]]):** μ ‘κ·Όμ„±, μƒνƒœ 관리, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 λ“± 핡심 κΈ°λŠ₯만 μ œκ³΅ν•˜κ³  μ‹œκ°μ μΈ λ§ˆν¬μ—…κ³Ό μŠ€νƒ€μΌλ§μ€ μ „μ μœΌλ‘œ κ°œλ°œμžμ—κ²Œ μœ„μž„ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [18, 19]. 주둜 [[Tailwind CSS|Tailwind CSS]]와 κ²°ν•©ν•˜μ—¬ νŠΉμ • ν”„λ ˆμž„μ›Œν¬λ‚˜ λ””μžμΈ μ‹œμŠ€ν…œμ— μ’…μ†λ˜μ§€ μ•ŠλŠ” κ³ λ„λ‘œ λ§žμΆ€ν™”λœ UI 라이브러리λ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€ [18, 20]. * **μ˜€λ²„λΌμ΄λ“œ νŒ¨ν„΄([[Overrides Pattern|Overrides Pattern]]):** Uber의 Base Web μ‹œμŠ€ν…œ λ“±μ—μ„œ ν™œμš©ν•˜λŠ” μ•„ν‚€ν…μ²˜λ‘œ, μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ λͺ¨λ“  ν•˜μœ„ μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλŠ” μ‹λ³„μžλ₯Ό μ œκ³΅ν•˜μ—¬ μŠ€νƒ€μΌ, 속성, ν˜Ήμ€ λ Œλ”λ§λ˜λŠ” μ»΄ν¬λ„ŒνŠΈ 자체λ₯Ό ν†΅μ§Έλ‘œ ꡐ체할 수 있게 ν•©λ‹ˆλ‹€ [21-24]. 이λ₯Ό 톡해 λͺ¨λ“  μ—£μ§€ μΌ€μ΄μŠ€λ§ˆλ‹€ μƒˆλ‘œμš΄ Prop을 μΆ”κ°€ν•˜μ—¬ λ°œμƒν•˜λŠ” λ³΅μž‘μ„±(Prop soup)을 λ°©μ§€ν•˜κ³  심측적인 μ»€μŠ€ν„°λ§ˆμ΄μ§•μ„ μ§€μ›ν•©λ‹ˆλ‹€ [23, 24]. * **κΈ°λŠ₯ λΆ„ν•  섀계([[Feature-Sliced Design|Feature-Sliced Design]], FSD) 및 λͺ¨λ…Έλ ˆν¬:** κ±°λŒ€ν•œ μ»΄ν¬λ„ŒνŠΈ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λ‹€μˆ˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 곡쑴할 λ•Œ, 단방ν–₯ μ˜μ‘΄μ„± 흐름을 κ°•μ œν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€ [25-28]. Shared(곡유 UI κΈ°λ³Έ μš”μ†Œ, λ””μžμΈ 토큰 λ“±), Entities, Features, Widgets, Pages λ“±μ˜ κ³„μΈ΅μœΌλ‘œ λͺ…ν™•νžˆ λ‚˜λˆ„μ–΄ λͺ¨λ…Έλ ˆν¬([[Turborepo|Turborepo]], Nx λ“±) λ‚΄μ—μ„œ μ•ˆμ •μ μ΄κ³  격리된 μ•„ν‚€ν…μ²˜λ₯Ό μœ μ§€ν•  수 있게 ν•©λ‹ˆλ‹€ [27, 29-31]. * **λ””μžμΈ 토큰([[Design Tokens|Design Tokens]]) 계측화:** 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό, 간격 λ“±μ˜ μ›μ‹œ 값을 μΆ”μƒν™”ν•˜μ—¬ κΈ°λ³Έ 토큰(Primitives), μ‹œλ§¨ν‹± 토큰(Semantic), μ»΄ν¬λ„ŒνŠΈ 토큰(Component Tokens)의 3단계 계측 ꡬ쑰둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€ [32-35]. μ΄λŠ” ν…Œλ§ˆ(예: 닀크 λͺ¨λ“œ)의 동적 μ „ν™˜μ„ μš©μ΄ν•˜κ²Œ ν•˜κ³  라이브러리 μ „λ°˜μ˜ μ‹œκ°μ  일관성과 μ•ˆμ „ν•œ λ¦¬νŒ©ν† λ§μ„ 보μž₯ν•©λ‹ˆλ‹€ [5, 36-38]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Atomic Design|Atomic Design]], Compound Components, Headless Components, [[Design Tokens|Design Tokens]], [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** [[Uber Base Web|Uber Base Web]], Shopify Polaris, React Server Components (RSC, Tailwind CSS vs [[Styled Components|Styled Components]] - **Contradictions/Notes:** 볡합 μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄μ€ 높은 μœ μ—°μ„±μ„ μ£Όμ§€λ§Œ κ³Όμš©ν•˜λ©΄ μ†ŒλΉ„μžμ—κ²Œ λ„ˆλ¬΄ λ§Žμ€ ν†΅μ œκΆŒμ„ μ£Όμ–΄ UXλ‚˜ μ ‘κ·Όμ„± λ“± ꡬ쑰적 일관성이 깨질 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ ˆμ΄μ•„μ›ƒμ΄ κ³ μ •λ˜μ–΄ μžˆλŠ” λ‹¨μˆœν•œ λ²„νŠΌμ΄λ‚˜ λ°°μ§€ 같은 μ»΄ν¬λ„ŒνŠΈμ—λŠ” 일반적인 Prop 기반 방식이 훨씬 μ ν•©ν•©λ‹ˆλ‹€ [39-41]. λ˜ν•œ, μ»΄ν¬λ„ŒνŠΈ μŠ€νƒ€μΌλ§ κ΅¬ν˜„ μ‹œ Styled Components처럼 λŸ°νƒ€μž„μ— μŠ€νƒ€μΌμ„ μ£Όμž…ν•˜λŠ” 방식은 동적 μŠ€νƒ€μΌλ§μ— κ°•λ ₯ν•˜λ‚˜ [[Next.js 15|Next.js 15]]의 App Router 및 RSC ν™˜κ²½μ—μ„œλŠ” Context λΆ€μž¬λ‘œ μΈν•œ ꡬ쑰적 μ œμ•½κ³Ό λ²ˆλ“€ μ‚¬μ΄μ¦ˆ λ“± μ„±λŠ₯ λΉ„μš©μ΄ λ”°λ¦…λ‹ˆλ‹€ [42-45]. 이 λ•Œλ¬Έμ— μ΅œμ‹  ν”„λ‘ νŠΈμ—”λ“œ μ•„ν‚€ν…μ²˜λŠ” 정적 CSS 생성이 κ°€λŠ₯ν•œ Tailwind CSS λ˜λŠ” Zero-runtime 방식([[vanilla-extract|vanilla-extract]] λ“±)을 μ»΄ν¬λ„ŒνŠΈ 라이브러리 ꡬ좕에 더 ꢌμž₯ν•˜λŠ” μΆ”μ„Έμž…λ‹ˆλ‹€ [46-49]. --- *Last updated: 2026-04-26*