# [[Design Systems|DesignSystems]] ## πŸ“Œ Brief Summary λ””μžμΈ μ‹œμŠ€ν…œ(Design Systems)은 색상, 간격 λ“±μ˜ μ‹œκ°μ  λ””μžμΈ 정보λ₯Ό 담은 λ””μžμΈ 토큰([[Design Tokens|Design Tokens]])κ³Ό κ·œμΉ™, μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ“€μ˜ μ§‘ν•©μž…λ‹ˆλ‹€[1]. μ΄λŠ” μ—”μ§€λ‹ˆμ–΄, λ””μžμ΄λ„ˆ, ν”„λ‘œλ•νŠΈ λ§€λ‹ˆμ €κ°€ 일관성 있고 접근성이 λ›°μ–΄λ‚œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉ λ₯΄κ³  효율적으둜 ꡬ좕할 수 μžˆλ„λ‘ λ•λŠ” 곡톡 μ–Έμ–΄ 역할을 ν•©λ‹ˆλ‹€[2]. λ””μžμΈ μ‹œμŠ€ν…œμ„ λ„μž…ν•˜λ©΄ μŠ€νƒ€μΌμ˜ νŒŒνŽΈν™”λ₯Ό 막고, 닀크 λͺ¨λ“œλ‚˜ 닀쀑 λΈŒλžœλ“œ ν…Œλ§ˆμ™€ 같은 κΈ€λ‘œλ²Œ λ³€κ²½ 사항을 λŸ°νƒ€μž„ λ˜λŠ” λΉŒλ“œ νƒ€μž„μ— μ•ˆμ „ν•˜κ³  λ™μ μœΌλ‘œ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€[3-5]. ## πŸ“– 일Core Content * **λ””μžμΈ 토큰(Design Tokens)의 계측적 ꡬ쑰**: ν™•μž₯ κ°€λŠ₯ν•œ UI μ•„ν‚€ν…μ²˜μ˜ 핡심인 λ””μžμΈ 토큰은 JSONμ΄λ‚˜ YAMLκ³Ό 같은 기계 νŒλ…ν˜• ν˜•μ‹μœΌλ‘œ μ €μž₯λ˜μ–΄ μ½”λ“œμ™€ λ””μžμΈ νˆ΄μ„ μžλ™μœΌλ‘œ λ™κΈ°ν™”ν•©λ‹ˆλ‹€[4, 6]. μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성을 높이기 μœ„ν•΄ 토큰은 3단계 계측 ꡬ쑰λ₯Ό κ°€μ§‘λ‹ˆλ‹€. 즉, 순수 값을 λ‚˜νƒ€λ‚΄λŠ” κΈ°λ³Έ 토큰(Primitive/Base Tokens), μ‚¬μš© λͺ©μ κ³Ό λ§₯락을 λΆ€μ—¬ν•œ μ‹œλ§¨ν‹± 토큰(Semantic Tokens), κ°œλ³„ μ»΄ν¬λ„ŒνŠΈ λ³€ν˜•μ— μ“°μ΄λŠ” μ»΄ν¬λ„ŒνŠΈ 토큰(Component Tokens)으둜 κ΅¬μ„±λ©λ‹ˆλ‹€[7-12]. * **λ¦¬μ•‘νŠΈ(React) μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„ 비ꡐ**: * **[[styled-components|styled-components]]**: μ»΄ν¬λ„ŒνŠΈμ— 직접 μŠ€νƒ€μΌμ„ μΊ‘μŠν™”ν•˜μ—¬ 동적이고 props에 κΈ°λ°˜ν•œ μŠ€νƒ€μΌλ§μ„ μ œκ³΅ν•˜λŠ” CSS-in-JS λ°©μ‹μž…λ‹ˆλ‹€[13, 14]. ν•˜μ§€λ§Œ λΈŒλΌμš°μ €μ—μ„œ JavaScriptλ₯Ό μ‹€ν–‰ν•˜μ—¬ μŠ€νƒ€μΌμ„ μ£Όμž…ν•˜λ―€λ‘œ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜λ©°, [[React Context|React Context]]κ°€ μ—†λŠ” [[React Server Components|React Server Components]](RSC) ν™˜κ²½μ—μ„œλŠ” μ„œλ²„ λ Œλ”λ§μ— μ·¨μ•½ν•˜λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€[15-18]. * **[[Tailwind CSS|Tailwind CSS]]**: μœ ν‹Έλ¦¬ν‹° 퍼슀트(Utility-first) 접근법을 μ·¨ν•˜λ©°, 정적 CSSλ₯Ό λΉŒλ“œ νƒ€μž„μ— μƒμ„±ν•˜μ—¬ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€[19, 20]. 특히 Tailwind v4λŠ” `@theme` μ§€μ‹œμ–΄μ™€ λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” CSS μš°μ„  μ•„ν‚€ν…μ²˜λ‘œ μ „ν™˜λ˜μ–΄, λΉŒλ“œ 속도 및 초기 λ Œλ”λ§([[Core Web Vitals|Core Web Vitals]]) μ„±λŠ₯ λ©΄μ—μ„œ CSS-in-JS보닀 λŒ€κ·œλͺ¨ ν™•μž₯에 맀우 μœ λ¦¬ν•©λ‹ˆλ‹€[18, 21-23]. * **μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ 섀계 νŒ¨ν„΄**: * **μ•„ν† λ―Ή λ””μžμΈ([[Atomic Design|Atomic Design]])**: UIλ₯Ό μ›μž(Atoms), λΆ„μž(Molecules), 유기체(Organisms), ν…œν”Œλ¦Ώ(Templates), νŽ˜μ΄μ§€(Pages)의 5λ‹¨κ³„λ‘œ μ„ΈλΆ„ν™”ν•˜μ—¬, 예츑 κ°€λŠ₯ν•˜κ³  쑰립 κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ 라이브러리λ₯Ό κ΅¬μΆ•ν•˜λŠ” 기초 λ°©λ²•λ‘ μž…λ‹ˆλ‹€[24-28]. * **μ»΄νŒŒμš΄λ“œ μ»΄ν¬λ„ŒνŠΈ([[Compound Components|Compound Components]])**: 단일 μ»΄ν¬λ„ŒνŠΈμ— λ„ˆλ¬΄ λ§Žμ€ 속성(Prop)을 μ£Όμž…ν•΄ λ³΅μž‘ν•΄μ§€λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, μ—¬λŸ¬ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ λ‚΄λΆ€μ μœΌλ‘œ μƒνƒœ(Context)λ₯Ό κ³΅μœ ν•˜λ„λ‘ μ„ μ–Έμ μœΌλ‘œ κ΅¬μ„±ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€(예: `Accordion.Root`, `Accordion.Item`)[29-32]. * **μ˜€λ²„λΌμ΄λ“œ νŒ¨ν„΄(Overrides API) 및 ν—€λ“œλ¦¬μŠ€(Headless) μ»΄ν¬λ„ŒνŠΈ**: Uber의 Base Web λ“±μ—μ„œ μ‚¬μš©ν•˜λŠ” μ˜€λ²„λΌμ΄λ“œ νŒ¨ν„΄μ€ λ‚΄λΆ€ μš”μ†Œμ˜ κΈ°λŠ₯μ΄λ‚˜ μŠ€νƒ€μΌμ„ μ‚¬μš©μžκ°€ μ‰½κ²Œ ꡐ체할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€[33-36]. ν—€λ“œλ¦¬μŠ€ μ»΄ν¬λ„ŒνŠΈλŠ” μŠ€νƒ€μΌλ§μ„ μ œμ™Έν•œ μƒνƒœ 관리와 μ ‘κ·Όμ„± λ‘œμ§λ§Œμ„ μ œκ³΅ν•˜μ—¬ Tailwind λ“±κ³Ό κ²°ν•© μ‹œ μœ μ—°μ„±μ„ κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€[37]. * **λŒ€κ·œλͺ¨ ν”„λ‘ νŠΈμ—”λ“œμ˜ ꡬ쑰화([[Monorepo|Monorepo]] 및 FSD)**: μ‹œμŠ€ν…œμ΄ 컀질 경우, 단일 폴더에 곡유 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ¬΄λΆ„λ³„ν•˜κ²Œ λ‹΄μ§€ μ•Šκ³  Monorepo ν™˜κ²½μ—μ„œ [[Feature-Sliced Design|Feature-Sliced Design]] (FSD) μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€[38-41]. FSDλŠ” μ½”λ“œλ₯Ό Shared, Entities, Features, Widgets, Pages λ“±μœΌλ‘œ λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜μ—¬ μ˜μ‘΄μ„±μ˜ λ°©ν–₯을 ν†΅μ œν•˜κ³  퍼블릭 API μΊ‘μŠν™”λ₯Ό κ°•μ œν•˜μ—¬ μ‹œμŠ€ν…œμ„ κ²¬κ³ ν•˜κ²Œ μœ μ§€ν•©λ‹ˆλ‹€[39, 41]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Design Tokens|Design Tokens]], Atomic Design, Compound Components, [[Tailwind CSS|Tailwind CSS]], Styled-components, [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** [[Shopify Polaris|Shopify Polaris]], [[Uber Base Web|Uber Base Web]] - **Contradictions/Notes:** μ†ŒμŠ€ [42]와 [43]λŠ” Tailwind CSSλ₯Ό μ‚¬μš©ν•  λ•Œ μ—¬λŸ¬ μœ ν‹Έλ¦¬ν‹° 클래슀둜 인해 λ§ˆν¬μ—…μ΄ 맀우 κΈΈμ–΄μ§€κ³ (Class Soup) 가독성이 λ–¨μ–΄μ§ˆ 수 μžˆλ‹€κ³  μ§€μ ν•˜μ§€λ§Œ, μ†ŒμŠ€ [44]와 [45]은 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό 반볡 μž‘μ„±ν•˜λŠ” λŒ€μ‹  "μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ"둜 μΆ”μƒν™”ν•˜κ±°λ‚˜ ν”ŒλŸ¬κ·ΈμΈ 기반 μ‹œμŠ€ν…œμ„ ꡬ좕해야 ν•œλ‹€κ³  μ‘°μ–Έν•©λ‹ˆλ‹€. λ˜ν•œ μ†ŒμŠ€ [14], [18]은 Styled-componentsκ°€ ν›Œλ₯­ν•œ 개발자 κ²½ν—˜κ³Ό 동적 μŠ€νƒ€μΌλ§μ„ μ œκ³΅ν•œλ‹€κ³  μ„€λͺ…ν•˜μ§€λ§Œ, μ†ŒμŠ€ [15], [16], [17]은 λŒ€κ·œλͺ¨ μ•±μ΄λ‚˜ RSCκ°€ 적용된 [[Next.js|Next.js]] ν™˜κ²½μ—μ„œλŠ” λŸ°νƒ€μž„ μ„±λŠ₯ 및 ν˜Έν™˜μ„± 이슈λ₯Ό μ•ΌκΈ°ν•  수 μžˆμœΌλ―€λ‘œ Tailwindλ‚˜ [[CSS Modules|CSS Modules]]λ₯Ό ꢌμž₯ν•˜λ©° μ„œλ‘œ λ‹€λ₯Έ 졜적의 μ‚¬μš© 사둀λ₯Ό μ œμ‹œν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-26*