# [[Scalable UI Systems]] ## πŸ“Œ Brief Summary ν™•μž₯ κ°€λŠ₯ν•œ UI μ‹œμŠ€ν…œ(Scalable UI Systems)은 μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš©μ„±, 일관성 및 μœ μ§€λ³΄μˆ˜μ„±μ„ κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ λ””μžμΈ 토큰, ν…Œλ§ˆ, λͺ¨λ“ˆμ‹ μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜λ₯Ό κ²°ν•©ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ—”μ§€λ‹ˆμ–΄λ§ μ²΄κ³„μž…λ‹ˆλ‹€. μ΄λŠ” μ œν’ˆμ˜ 규λͺ¨κ°€ 컀지고 νŒ€μ΄ ν™•μž₯λ˜λ”λΌλ„ μŠ€νƒ€μΌμ˜ λ³€ν˜•(Style drift)을 λ°©μ§€ν•˜κ³  μ„±λŠ₯ 병λͺ©μ„ μ΅œμ†Œν™”ν•˜λ„λ‘ μ„€κ³„λ©λ‹ˆλ‹€. μ΅œμ‹  React ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ—μ„œλŠ” Atomic Design, Compound Components λ“±μ˜ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄κ³Ό λ”λΆˆμ–΄, Tailwind CSSλ‚˜ Styled-components와 같은 μŠ€νƒ€μΌλ§ 접근법을 μ „λž΅μ μœΌλ‘œ μ„ νƒν•˜μ—¬ κ΅¬μΆ•ν•©λ‹ˆλ‹€. ## πŸ“– Core Content * **λ””μžμΈ 토큰과 ν…Œλ§ˆλ§(Design Tokens & Theming):** ν™•μž₯ κ°€λŠ₯ν•œ UI μ‹œμŠ€ν…œμ˜ 핡심 κΈ°λ°˜μ€ μ‹œκ°μ  κ²°μ •(색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό, 간격 λ“±)을 μ½”λ“œλ‘œ μΆ”μƒν™”ν•œ **λ””μžμΈ 토큰**μž…λ‹ˆλ‹€[1, 2]. 토큰은 ꡬ쑰적 ν™•μž₯을 μœ„ν•΄ Base(μ›μ‹œ κ°’), Semantic(μ˜λ„ 및 λͺ©μ ), Component(νŠΉμ • μ»΄ν¬λ„ŒνŠΈ λ³€ν˜•)의 μ„Έ κ°€μ§€ κ³„μΈ΅μœΌλ‘œ λΆ„λ¦¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€[3-7]. μ΄λŸ¬ν•œ 계측 ꡬ쑰λ₯Ό κ°–μΆ”λ©΄ 토큰 값을 κ΅μ²΄ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ 라이트/닀크 λͺ¨λ“œλ‚˜ 닀쀑 λΈŒλžœλ“œ ν…Œλ§ˆλ₯Ό λ™μ μœΌλ‘œ κ΅¬ν˜„ν•  수 있으며, Style Dictionary와 같은 도ꡬλ₯Ό μ‚¬μš©ν•΄ ν”Œλž«νΌ 독립적인 관리가 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€[8-20]. * **μ»΄ν¬λ„ŒνŠΈ 섀계 및 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄:** μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈλŠ” 단일 μ±…μž„ 원칙(Single Responsibility)κ³Ό ν•©μ„±(Composition)을 μš°μ„ μ‹œν•˜μ—¬ μ„€κ³„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€[21]. * **Atomic Design (μ•„ν† λ―Ή λ””μžμΈ):** UIλ₯Ό μ›μž(Atoms), λΆ„μž(Molecules), 유기체(Organisms), ν…œν”Œλ¦Ώ(Templates), νŽ˜μ΄μ§€(Pages) λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄, 좔상적인 μ»΄ν¬λ„ŒνŠΈλΆ€ν„° ꡬ체적인 νŽ˜μ΄μ§€κΉŒμ§€ μΌκ΄€λœ 계측을 ν˜•μ„±ν•˜λŠ” λ””μžμΈ λ°©λ²•λ‘ μž…λ‹ˆλ‹€[22-32]. * **Compound Components (볡합 μ»΄ν¬λ„ŒνŠΈ):** κ±°λŒ€ν•œ 단일 μ»΄ν¬λ„ŒνŠΈμ— μˆ˜λ§Žμ€ Prop을 μ „λ‹¬ν•˜λŠ” λŒ€μ‹ (Prop-drilling), React Contextλ₯Ό 톡해 λΆ€λͺ¨μ™€ μžμ‹ μ»΄ν¬λ„ŒνŠΈ κ°„ μƒνƒœλ₯Ό μ•”μ‹œμ μœΌλ‘œ κ³΅μœ ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒ ꡬ쑰와 λ Œλ”λ§μ— λŒ€ν•œ μ œμ–΄κΆŒμ„ μ‚¬μš©μžμ—κ²Œ λ„˜κΈ°λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€[33-44]. * **Headless Components (ν—€λ“œλ¦¬μŠ€ μ»΄ν¬λ„ŒνŠΈ) & Overrides:** 둜직과 λ§ˆν¬μ—…μ„ λΆ„λ¦¬ν•˜μ—¬ λ””μžμΈ μ‹œμŠ€ν…œμ— ꡬ애받지 μ•Šκ³  μ ‘κ·Όμ„± 높은 μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬μΆ•ν•˜κ±°λ‚˜[45, 46], Uber의 Base Web처럼 μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€ μš”μ†Œ(Elements)λ₯Ό μ‰½κ²Œ ꡐ체 및 μž¬μ •μ˜ν•  수 μžˆλŠ” Overrides APIλ₯Ό μ œκ³΅ν•˜μ—¬ μœ μ—°μ„±μ„ κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€[47-51]. * **React μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„ 비ꡐ (Styled-components vs Tailwind CSS):** * **Styled-components (CSS-in-JS):** μ»΄ν¬λ„ŒνŠΈ μˆ˜μ€€μ˜ μΊ‘μŠν™”μ™€ Prop 기반의 동적 μŠ€νƒ€μΌλ§μ— 맀우 μœ λ¦¬ν•©λ‹ˆλ‹€[52, 53]. κ·ΈλŸ¬λ‚˜ λŸ°νƒ€μž„μ— JavaScript둜 CSSλ₯Ό μƒμ„±ν•˜κ³  μ£Όμž…ν•˜λ―€λ‘œ λŒ€κ·œλͺ¨ μ•±μ—μ„œ λ Œλ”λ§ μ„±λŠ₯ 지연을 μœ λ°œν•  수 있으며[52, 54-56], 특히 Next.js 15의 **React Server Components(RSC)** ν™˜κ²½μ—μ„œλŠ” Contextλ₯Ό μ‚¬μš©ν•  수 μ—†μ–΄ μ œμ•½κ³Ό ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration) 뢈일치 μœ„ν—˜μ΄ λ°œμƒν•©λ‹ˆλ‹€[54, 57-60]. * **Tailwind CSS:** μœ ν‹Έλ¦¬ν‹° 퍼슀트 접근법을 톡해 λΉŒλ“œ νƒ€μž„μ— μ‚¬μš©λœ CSS만 μ •μ μœΌλ‘œ μƒμ„±ν•˜μ—¬ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€[55, 61-63]. 버전 4μ—μ„œλŠ” JavaScript μ„€μ •(`tailwind.config.js`)μ—μ„œ λ²—μ–΄λ‚˜ **CSS-first μ•„ν‚€ν…μ²˜**(`@theme` μ§€μ‹œμ–΄)λ₯Ό λ„μž…ν•˜μ—¬, λ””μžμΈ 토큰을 λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ‘œ κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ λΉŒλ“œ 속도와 ν™•μž₯성이 크게 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€[64-68]. * **λŒ€κ·œλͺ¨ ν”„λ‘ νŠΈμ—”λ“œ 관리 체계 (Monorepos & FSD):** μˆ˜λ§Žμ€ κΈ°λŠ₯κ³Ό UI μ»΄ν¬λ„ŒνŠΈκ°€ ν˜Όμž¬ν•˜λŠ” μ‹œμŠ€ν…œμ„ ν™•μž₯ κ°€λŠ₯ν•˜κ²Œ μœ μ§€ν•˜λ €λ©΄, Turborepoλ‚˜ Nxλ₯Ό ν™œμš©ν•œ **λͺ¨λ…Έλ ˆν¬(Monorepo)** μ•„ν‚€ν…μ²˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€[69-73]. 이에 더해 μ½”λ“œλ₯Ό 도메인별, UI κ³„μΈ΅λ³„λ‘œ λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜λŠ” **Feature-Sliced Design(FSD)** 방법둠을 λ„μž…ν•˜λ©΄ μ˜μ‘΄μ„± κ·œμΉ™μ΄ κ°•μ œλ˜μ–΄, μŠ€νŒŒκ²Œν‹° μ½”λ“œ 생성을 λ°©μ§€ν•˜κ³  μΌκ΄€λœ λͺ¨λ“ˆν˜• μ•„ν‚€ν…μ²˜λ₯Ό μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€[74-81]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Design Tokens]], [[Atomic Design]], [[Compound Components]], [[Tailwind CSS]], [[Styled-components]], [[Feature-Sliced Design (FSD)]] - **Projects/Contexts:** [[Uber Base Web]], [[Shopify Polaris]], [[React Server Components (RSC)]] - **Contradictions/Notes:** μ†ŒμŠ€ 189, 779λŠ” Styled-componentsκ°€ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œλ‘œ 인해 λŒ€κ·œλͺ¨ μ•±μ—μ„œ μ„±λŠ₯ 병λͺ©μ„ μΌμœΌν‚¨λ‹€κ³  μ„€λͺ…ν•˜λ©°, μ‹€μ œ μ‚¬λ‘€λ‘œ Styled-componentsμ—μ„œ Tailwind CSS둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•œ ν›„ 핡심 μ›Ή μ§€ν‘œ(Core Web Vitals)인 INP와 FIDκ°€ λͺ¨λ°”일 κΈ°κΈ°μ—μ„œ λŒ€ν­ κ°œμ„ (각 58.4%, 75.9% κ°μ†Œ)λ˜μ—ˆλ‹€κ³  λ³΄κ³ ν•©λ‹ˆλ‹€[82-87]. ν•˜μ§€λ§Œ ν…Œλ§ˆλ‚˜ 동적 μƒνƒœμ— 크게 μ˜μ‘΄ν•˜λŠ” λ³΅μž‘ν•œ λŒ€μ‹œλ³΄λ“œ ν™˜κ²½μ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈμ™€ μŠ€νƒ€μΌμ„ ν•¨κ»˜ κ΄€λ¦¬ν•˜λŠ” Styled-componentsκ°€ μ—¬μ „νžˆ 강점을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€[88, 89]. --- *Last updated: 2026-04-26*