# [[Scalable Design Systems|Scalable DesignSystems]] ## πŸ“Œ Brief Summary ν™•μž₯ κ°€λŠ₯ν•œ λ””μžμΈ μ‹œμŠ€ν…œ(Scalable Design System)은 μ‹œκ°μ  일관성, μœ μ—°μ„± 및 μœ μ§€λ³΄μˆ˜μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ, λ””μžμΈ 토큰 및 κ°€μ΄λ“œλΌμΈμ„ μ²΄κ³„ν™”ν•œ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€ [1, 2]. λ””μžμΈ 토큰과 μ»΄ν¬λ„ŒνŠΈ 기반 μ•„ν‚€ν…μ²˜λ₯Ό 톡해 λ””μžμΈμ˜ μ˜λ„(intent)와 μ½”λ“œμ˜ κ΅¬ν˜„(impact)을 λΆ„λ¦¬ν•¨μœΌλ‘œμ¨, λŒ€λŒ€μ μΈ λ¦¬νŒ©ν† λ§ 없이도 μƒˆλ‘œμš΄ ν…Œλ§ˆ, λΈŒλžœλ“œ λ˜λŠ” ν”Œλž«νΌμ— μ‰½κ²Œ 적응할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€ [3, 4]. ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œ μ—”μ§€λ‹ˆμ–΄λ§μ—μ„œλŠ” 개발자 κ²½ν—˜(DX)κ³Ό λŸ°νƒ€μž„ μ„±λŠ₯ κ°„μ˜ κ· ν˜•μ„ λ§žμΆ”κΈ° μœ„ν•΄ ν•„μˆ˜μ μΈ μš”μ†Œλ‘œ 자리 작고 μžˆμŠ΅λ‹ˆλ‹€ [5]. ## πŸ“– Core Content * **λ””μžμΈ 토큰([[Design Tokens|Design Tokens]])κ³Ό ν…Œλ°(Theming):** λ””μžμΈ 토큰은 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό, μ—¬λ°± λ“±μ˜ μ‹œκ°μ  λ””μžμΈ 정보λ₯Ό ν•˜λ“œμ½”λ”©λœ 값이 μ•„λ‹Œ JSONμ΄λ‚˜ YAML 같은 기계 νŒλ… κ°€λŠ₯ ν˜•μ‹μ˜ λ°μ΄ν„°λ‘œ μ €μž₯ν•˜μ—¬ '단일 μ§„μ‹€ 곡급원([[Single_Source_of_Truth|Single Source of Truth]])' 역할을 ν•©λ‹ˆλ‹€ [1, 6]. ν™•μž₯ κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμ€ 토큰을 Base/Primitive(μ›μ‹œ κ°’), Semantic(λͺ©μ  μ§€ν–₯적), Component(νŠΉμ • λ³€ν˜•)의 μ„Έ κ°€μ§€ κ³„μΈ΅μœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ ν† ν°μ˜ λ¬΄λΆ„λ³„ν•œ ν™•μž₯을 막고 μ•ˆμ „ν•œ λ¦¬νŒ©ν† λ§μ„ 보μž₯ν•©λ‹ˆλ‹€ [7-9]. μ΄λŸ¬ν•œ 계측 ꡬ쑰λ₯Ό 톡해 CSS λ³€μˆ˜λ‚˜ [[Style Dictionary|Style Dictionary]] 같은 도ꡬλ₯Ό ν™œμš©ν•œ 동적 ν…Œλ°(라이트/닀크 λͺ¨λ“œ λ“±)이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€ [10, 11]. * **ν™•μž₯ κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄:** * **μ•„ν† λ―Ή λ””μžμΈ([[Atomic Design|Atomic Design]]):** UI μš”μ†Œλ₯Ό μ›μž(Atoms), λΆ„μž(Molecules), 유기체(Organisms), ν…œν”Œλ¦Ώ, νŽ˜μ΄μ§€ λ‹¨μœ„λ‘œ κ³„μΈ΅ν™”ν•˜μ—¬ κ°œλ°œμžκ°€ κ°œλ³„ μš”μ†Œμ™€ 전체 UIλ₯Ό λ™μ‹œμ— νŒŒμ•…ν•˜κ³  μΌκ΄€λ˜κ²Œ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€ [12-14]. * **ν•©μ„± μ»΄ν¬λ„ŒνŠΈ([[Compound Components|Compound Components]]):** νƒ­(Tabs)μ΄λ‚˜ μ•„μ½”λ””μ–Έ(Accordion) 같은 λ³΅μž‘ν•œ UIμ—μ„œ, React Contextλ₯Ό 톡해 μ•”μ‹œμ μœΌλ‘œ μƒνƒœλ₯Ό κ³΅μœ ν•˜λŠ” μ—¬λŸ¬ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ‘œ μ±…μž„μ„ λΆ„μ‚°μ‹œν‚΅λ‹ˆλ‹€. μ΄λŠ” λΆˆν•„μš”ν•œ Props 전달([[Prop Drilling|Prop Drilling]])κ³Ό λΉ„λŒ€ν•œ Props(Prop soup)λ₯Ό λ°©μ§€ν•˜κ³  높은 μœ μ—°μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [15-18]. * **μ˜€λ²„λΌμ΄λ“œ νŒ¨ν„΄([[Overrides Pattern|Overrides Pattern]]):** Uber의 Base Web λ“±μ—μ„œ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μœΌλ‘œ, μ΅œμƒμœ„ Propsλ₯Ό κ³Όλ„ν•˜κ²Œ λŠ˜λ¦¬μ§€ μ•Šκ³ λ„ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ νŠΉμ • μš”μ†Œμ— μ‹λ³„μžλ₯Ό λΆ€μ—¬ν•΄ μΆ”κ°€ μŠ€νƒ€μΌμ΄λ‚˜ 속성을 μ£Όμž…ν•˜κ±°λ‚˜ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈ 자체λ₯Ό ꡐ체할 수 있게 ν•©λ‹ˆλ‹€ [19-21]. * **μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„ 비ꡐ ([[Tailwind CSS|Tailwind CSS]] vs [[styled-components|styled-components]]):** * **Tailwind CSS:** μœ ν‹Έλ¦¬ν‹° μš°μ„ (Utility-first) μ ‘κ·Ό λ°©μ‹μœΌλ‘œ λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 특히 v4μ—μ„œλŠ” `@theme` μ§€μ‹œμ–΄μ™€ λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ₯Ό ν™œμš©ν•˜λŠ” 'CSS-first' μ•„ν‚€ν…μ²˜λ₯Ό μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€. λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†κ³ , λ²ˆλ“€ 크기가 μž‘μœΌλ©°, [[React Server Components|React Server Components]](RSC) ν™˜κ²½κ³Ό 높은 ν˜Έν™˜μ„±μ„ κ°€μ Έ μ„±λŠ₯ μ΅œμ ν™”μ— μœ λ¦¬ν•©λ‹ˆλ‹€ [22-25]. * **Styled-Components ([[CSS-in-JS|CSS-in-JS]]):** Props 기반의 동적 μŠ€νƒ€μΌλ§κ³Ό μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„μ˜ μΊ‘μŠν™”λ₯Ό 톡해 λ›°μ–΄λ‚œ 개발자 κ²½ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ λΈŒλΌμš°μ €μ—μ„œ JavaScriptλ₯Ό μ‹€ν–‰ν•΄ μŠ€νƒ€μΌ νƒœκ·Έλ₯Ό μ£Όμž…ν•΄μ•Ό ν•˜λ―€λ‘œ CPU λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜λ©°, React Context에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— Next.js App Router의 RSC ν™˜κ²½μ—μ„œλŠ” 본질적으둜 λΉ„ν˜Έν™˜μ„± 문제λ₯Ό κ°€μ§‘λ‹ˆλ‹€([[Style Registry|Style Registry]] 등을 ν†΅ν•œ 우회 ν•„μš”) [24, 26-29]. * **ν”„λ‘ νŠΈμ—”λ“œ λͺ¨λ…Έλ ˆν¬μ™€ μ•„ν‚€ν…μ²˜ ꡬ성:** μ‹œμŠ€ν…œμ΄ 컀질수둝 λ‹€μˆ˜μ˜ μ•±κ³Ό 곡유 라이브러리λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ [[Turborepo|Turborepo]], Nx λ“±μ˜ λͺ¨λ…Έλ ˆν¬(Monorepo) μ•„ν‚€ν…μ²˜κ°€ μ‚¬μš©λ©λ‹ˆλ‹€ [30, 31]. 이와 ν•¨κ»˜ κΈ°λŠ₯ λΆ„ν•  섀계([[Feature-Sliced Design|Feature-Sliced Design]], FSD) 방법둠을 μ μš©ν•΄ μ½”λ“œλ₯Ό Shared, Entities, Features, Widgets, Pages, App κ³„μΈ΅μœΌλ‘œ λ‚˜λˆ„μ–΄ μ—„κ²©ν•œ μ˜μ‘΄μ„± 경계λ₯Ό μ„€μ •ν•˜κ³  μŠ€νŒŒκ²Œν‹° μ½”λ“œλ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [32, 33]. * **μžλ™ν™”μ™€ μ‹œμŠ€ν…œ κ΄€μΈ‘μ„±(Observability):** λŒ€κ·œλͺ¨ μ—”ν„°ν”„λΌμ΄μ¦ˆ ν™˜κ²½μ—μ„œλŠ” λ””μžμΈ μ‹œμŠ€ν…œμ˜ μœ μ§€λ³΄μˆ˜λ₯Ό μœ„ν•΄ μžλ™ν™”κ°€ ν•„μˆ˜μ μž…λ‹ˆλ‹€. UberλŠ” [[Figma|Figma]] Console MCP와 AI μ—μ΄μ „νŠΈλ₯Ό κ²°ν•©ν•΄ λͺ‡ λΆ„ λ§Œμ— λ©€ν‹° ν”Œλž«νΌμš© μ»΄ν¬λ„ŒνŠΈ μŠ€νŽ™ λ¬Έμ„œλ₯Ό μžλ™ μƒμ„±ν•©λ‹ˆλ‹€ [34-36]. λ˜ν•œ 'Design System Observability' μ‹œμŠ€ν…œμ„ 톡해 λ·° 트리λ₯Ό νƒμƒ‰ν•˜μ—¬ 수천 개의 ν™”λ©΄μ—μ„œ ν‘œμ€€ μ»΄ν¬λ„ŒνŠΈμ˜ μ‹€μ œ 채택λ₯ μ„ μ •λŸ‰μ μœΌλ‘œ μΈ‘μ •ν•˜κ³  μ½”λ“œ ν’ˆμ§ˆμ„ μ œμ–΄ν•©λ‹ˆλ‹€ [37-39]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Design Tokens|Design Tokens]], Atomic Design, Compound Components, [[React Server Components (RSC)|React Server Components (RSC]], [[Tailwind CSS|Tailwind CSS]], Styled-Components, [[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD]] - **Projects/Contexts:** [[Next.js App Router|Next.js App Router]], Uber Base Web, [[Shopify Polaris|Shopify Polaris]] - **Contradictions/Notes:** μ†ŒμŠ€ [40, 41]λŠ” Tailwind CSSκ°€ JSX λ§ˆν¬μ—…μ„ μž₯ν™©ν•˜κ²Œ(Verbose) λ§Œλ“€κ³  μ»΄ν¬λ„ŒνŠΈ μˆ˜μ€€μ˜ μΊ‘μŠν™”κ°€ λΆ€μ‘±ν•˜λ‹€κ³  μ§€μ ν•˜μ§€λ§Œ, μ†ŒμŠ€ [25, 42, 43]λŠ” [[Headless UI|Headless UI]] μ»΄ν¬λ„ŒνŠΈ, CVA(Class Variance Authority), 그리고 Tailwind v4의 `@theme` μ§€μ‹œμ–΄λ₯Ό κ²°ν•©ν•˜λ©΄ μ΄λŸ¬ν•œ 단점을 κ·Ήλ³΅ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό 효과적으둜 좔상화할 수 μžˆλ‹€κ³  μ£Όμž₯ν•©λ‹ˆλ‹€. λ˜ν•œ, CSS-in-JS(Styled-Components)λŠ” 동적 μŠ€νƒ€μΌλ§μ˜ νŽΈλ¦¬ν•¨μ„ μ œκ³΅ν•˜μ§€λ§Œ λŒ€κ·œλͺ¨ νŠΈλž˜ν”½μ΄λ‚˜ μ„±λŠ₯(Core Web Vitals)이 μ€‘μš”ν•œ ν”„λ‘œμ νŠΈ 및 μ΅œμ‹  RSC 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” 제둜 λŸ°νƒ€μž„μΈ Tailwindλ‚˜ [[CSS Modules|CSS Modules]]의 μ‚¬μš©μ΄ 적극 ꢌμž₯λ©λ‹ˆλ‹€ [44-46]. --- *Last updated: 2026-04-26*