# [[React Component Library Architecture|React Component Library Architecture]] ## πŸ“Œ Brief Summary React μ»΄ν¬λ„ŒνŠΈ 라이브러리 μ•„ν‚€ν…μ²˜λŠ” ν™•μž₯ κ°€λŠ₯ν•˜κ³  μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•œ ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„€κ³„ν•˜κ³  μ‘°μ§ν™”ν•˜λŠ” ꡬ쑰적 μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€ [1, 2]. 이 μ•„ν‚€ν…μ²˜λŠ” 단일 μ±…μž„ 원칙과 합성을 κ°•μ‘°ν•˜λ©°, Prop의 κ³Όλ„ν•œ μ‚¬μš©μœΌλ‘œ μΈν•œ 결합도 증가λ₯Ό ν”Όν•˜κ³  μœ μ—°μ„±μ„ λ†’μ΄λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€ [3-6]. μ•„ν† λ―Ή λ””μžμΈ([[Atomic Design|Atomic Design]]), μ»΄νŒŒμš΄λ“œ μ»΄ν¬λ„ŒνŠΈ([[Compound Components|Compound Components]]), ν—€λ“œλ¦¬μŠ€(Headless) UI λ“± λ‹€μ–‘ν•œ κ³ κΈ‰ λ””μžμΈ νŒ¨ν„΄κ³Ό λ””μžμΈ 토큰을 κ²°ν•©ν•˜μ—¬ λ‹€μ–‘ν•œ ν”Œλž«νΌ 및 ν…Œλ§ˆ μš”κ΅¬μ‚¬ν•­μ— λŒ€μ‘ν•  수 μžˆλŠ” μΌκ΄€λœ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•©λ‹ˆλ‹€ [7-10]. ## πŸ“– Core Content * **ꡬ쑰적 계측화 방법둠 (Structural Methodologies)** * **μ•„ν† λ―Ή λ””μžμΈ (Atomic Design):** UIλ₯Ό μ›μž(Atoms: λ²„νŠΌ, μž…λ ₯μ°½ λ“±), λΆ„μž(Molecules: 라벨이 μžˆλŠ” μž…λ ₯μ°½ λ“±), 유기체(Organisms: 헀더 λ“±), ν…œν”Œλ¦Ώ(Templates), νŽ˜μ΄μ§€(Pages)의 5λ‹¨κ³„λ‘œ μ„ΈλΆ„ν™”ν•˜λŠ” λ°©λ²•λ‘ μž…λ‹ˆλ‹€ [2, 7, 11]. 이λ₯Ό 톡해 일관성을 κ°•μ œν•˜κ³  좔상적인 μš”μ†ŒλΆ€ν„° ꡬ체적인 μ΅œμ’… UIκΉŒμ§€ 유기적인 섀계가 κ°€λŠ₯ν•©λ‹ˆλ‹€ [12-14]. * **[[Feature-Sliced Design|Feature-Sliced Design]] (FSD)μ™€μ˜ κ²°ν•©:** λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ λͺ¨λ…Έλ ˆν¬([[Monorepo|Monorepo]]) ν™˜κ²½μ—μ„œλŠ” λ²”μš©μ μΈ UI μ›μž(Atoms)λ₯Ό 'Shared' κ³„μΈ΅μ˜ 별도 νŒ¨ν‚€μ§€λ‘œ λΆ„λ¦¬ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ 'Features' 계측에 μΊ‘μŠν™”ν•˜μ—¬ μ˜μ‘΄μ„± λ°©ν–₯을 ν†΅μ œν•©λ‹ˆλ‹€ [15-17]. * **ν™•μž₯성을 μœ„ν•œ μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄ (Scalable Component Patterns)** * **μ»΄νŒŒμš΄λ“œ μ»΄ν¬λ„ŒνŠΈ (Compound Components):** `Select`와 `Option`의 κ΄€κ³„μ²˜λŸΌ μ—¬λŸ¬ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ [[React Context|React Context]]λ₯Ό 톡해 μ•”μ‹œμ μœΌλ‘œ μƒνƒœλ₯Ό κ³΅μœ ν•˜λ©° ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ μž‘λ™ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€ [8, 18]. μ†ŒλΉ„μžκ°€ 직접 λ ˆμ΄μ•„μ›ƒκ³Ό ꡬ성을 κ²°μ •ν•  수 있게 ν•˜μ—¬ μœ μ—°μ„±μ„ κ·ΉλŒ€ν™”ν•˜λ©°, μˆ˜λ§Žμ€ Prop으둜 μΈν•œ 'Prop μ§€μ˜₯(prop soup)'을 λ°©μ§€ν•©λ‹ˆλ‹€ [3, 5, 8, 19]. * **ν—€λ“œλ¦¬μŠ€ μ»΄ν¬λ„ŒνŠΈ ([[Headless Components|Headless Components]]):** λ³΅μž‘ν•œ μƒνƒœ 관리와 μ ‘κ·Όμ„±(A11y), λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ§Œμ„ μΊ‘μŠν™”ν•˜μ—¬ μ œκ³΅ν•˜κ³  μ‹œκ°μ μΈ λ§ˆν¬μ—…κ³Ό μŠ€νƒ€μΌλ§μ€ μ „μ μœΌλ‘œ κ°œλ°œμžμ—κ²Œ μœ„μž„ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€ [10, 20]. [[Tailwind CSS|Tailwind CSS]]와 같은 μœ ν‹Έλ¦¬ν‹° 퍼슀트 ν”„λ ˆμž„μ›Œν¬μ™€ ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ λΈŒλžœλ”©μ— 맞좘 UI 라이브러리λ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 맀우 νš¨κ³Όμ μž…λ‹ˆλ‹€ [10]. * **μ˜€λ²„λΌμ΄λ“œ νŒ¨ν„΄ ([[Overrides Pattern|Overrides Pattern]]):** Uber의 Base Web λ“±μ—μ„œ μ‚¬μš©λ˜λŠ” μ•„ν‚€ν…μ²˜λ‘œ, μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ 각 ν•˜μœ„ μš”μ†Œμ— μ‹λ³„μžλ₯Ό λΆ€μ—¬ν•˜μ—¬ `overrides` Prop을 톡해 κ°œλ³„ μŠ€νƒ€μΌ, 속성, 심지어 λ Œλ”λ§λ˜λŠ” μ»΄ν¬λ„ŒνŠΈ 자체λ₯Ό ꡐ체할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€ [21-23]. * **λ””μžμΈ 토큰과 ν…Œλ§ˆ μ•„ν‚€ν…μ²˜ ([[Design Tokens|Design Tokens]] & Theming)** * 성곡적인 μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜λŠ” μ»΄ν¬λ„ŒνŠΈ 내뢀에 κ³ μ •λœ μŠ€νƒ€μΌ 값을 μ‚¬μš©ν•˜μ§€ μ•Šκ³ , 3κ³„μΈ΅μ˜ λ””μžμΈ 토큰 μ‹œμŠ€ν…œ(μ›μ‹œ 토큰, μ‹œλ§¨ν‹± 토큰, μ»΄ν¬λ„ŒνŠΈ 토큰)을 ν™œμš©ν•˜μ—¬ λ””μžμΈ μ˜λ„μ™€ μ»΄ν¬λ„ŒνŠΈλ₯Ό λΆ„λ¦¬ν•©λ‹ˆλ‹€ [24-27]. * μ΄λŸ¬ν•œ 토큰듀은 CSS λ³€μˆ˜(Custom Properties)둜 λ³€ν™˜λ˜μ–΄ React μ»΄ν¬λ„ŒνŠΈμ— μ£Όμž…λ˜λ©°, 이λ₯Ό 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈ 컴파일 없이도 닀크 λͺ¨λ“œ λ“± 동적 λŸ°νƒ€μž„ ν…Œλ§ˆ μ „ν™˜μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€ [28-30]. * **API 섀계 및 μ ‘κ·Όμ„± (API Design & [[Accessibility|Accessibility]])** * **λͺ…μ‹œμ  계약:** μ»΄ν¬λ„ŒνŠΈ APIλŠ” 직관적이고 μ΅œμ†Œν•œμ˜ Prop을 μœ μ§€ν•΄μ•Ό ν•˜λ©°, λΆ€λͺ¨ μƒνƒœλ₯Ό μž„μ˜λ‘œ λ³€μ΄ν•˜μ§€ μ•ŠλŠ” λͺ…μ‹œμ μΈ 계약을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€ [6, 31]. * **μ ‘κ·Όμ„±(A11y) λ‚΄μž₯:** μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜λŠ” ν‚€λ³΄λ“œ 탐색, μ˜¬λ°”λ₯Έ ARIA 속성 및 μ—­ν•  λΆ€μ—¬, 포컀슀 관리 λ“± ν™”λ©΄ νŒλ…κΈ° 지원을 기본적으둜 λ‚΄μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€ [6, 32-34]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Atomic Design|Atomic Design]], Compound Components, Headless UI, [[Design Tokens|Design Tokens]], Tailwind CSS, [[Styled Components|Styled Components]], Monorepo, [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** [[Radix UI|Radix UI]], Shopify Polaris, Uber Base Web, [[Next.js App Router|Next.js App Router]] - **Contradictions/Notes:** μ»΄νŒŒμš΄λ“œ μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄μ€ 높은 ꡬ성 μžμœ λ„λ₯Ό μ œκ³΅ν•˜μ§€λ§Œ κ³Όλ„ν•œ 좔상화λ₯Ό μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ ˆμ΄μ•„μ›ƒμ΄ κ³ μ •λ˜μ–΄ μžˆκ±°λ‚˜ ꡬ쑰가 λ‹¨μˆœν•œ μ»΄ν¬λ„ŒνŠΈ(예: λ²„νŠΌ, μ•„μ΄μ½˜, λ°°μ§€ λ“±)μ—λŠ” μ»΄νŒŒμš΄λ“œ νŒ¨ν„΄μ„ ν”Όν•˜κ³  λ‹¨μˆœν•œ Prop 기반 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 μ•ˆμ „ν•˜κ³  μœ μ§€λ³΄μˆ˜μ— μœ λ¦¬ν•©λ‹ˆλ‹€ [35, 36]. --- *Last updated: 2026-04-26*