# [[React Design Tokens|React Design Tokens]] ## πŸ“Œ Brief Summary React ν”„λ‘œμ νŠΈμ—μ„œ λ””μžμΈ 토큰([[Design Tokens|Design Tokens]])은 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό, 간격, 그림자 λ“± μΈν„°νŽ˜μ΄μŠ€μ˜ 핡심 μ‹œκ°μ  속성을 쀑앙 μ§‘μ€‘ν™”ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” μ›μ²œ 데이터(Single Source of Truth)μž…λ‹ˆλ‹€. ν•˜λ“œμ½”λ”©λœ 값을 λ°°μ œν•˜κ³  JSONμ΄λ‚˜ YAMLκ³Ό 같은 기계 νŒλ… κ°€λŠ₯ν•œ ν˜•μ‹μœΌλ‘œ μ €μž₯되며, Style Dictionary λ“±μ˜ 도ꡬλ₯Ό 톡해 CSS λ³€μˆ˜λ‚˜ ν…Œλ§ˆ 객체둜 λ³€ν™˜λ˜μ–΄ React μ»΄ν¬λ„ŒνŠΈμ— μ μš©λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ””μžμΈμ˜ 일관성을 μœ μ§€ν•˜κ³ , 라이트/닀크 λͺ¨λ“œμ™€ 같은 동적 ν…Œλ§ˆ([[Dynamic Theming|Dynamic Theming]]) κ΅¬ν˜„ 및 ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ UI μ‹œμŠ€ν…œ ꡬ좕을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€. ## πŸ“– Core Content * **λ””μžμΈ ν† ν°μ˜ μ •μ˜μ™€ λͺ©μ ** * λ””μžμΈ 토큰은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹œκ°μ  DNAλ₯Ό κ΅¬μ„±ν•˜λŠ” μ›μžμ  데이터 ν¬μΈνŠΈμž…λ‹ˆλ‹€. * κ°œλ°œμžλŠ” κ³ μ •λœ κ°’(예: `#4A00FF`)을 직접 ν•˜λ“œμ½”λ”©ν•˜λŠ” λŒ€μ‹  `primary`와 같은 μž¬μ‚¬μš© κ°€λŠ₯ν•œ 토큰을 μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€. 값이 변경될 λ•Œ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜λ―€λ‘œ μœ μ§€λ³΄μˆ˜μ„±μ΄ 크게 ν–₯μƒλ˜λ©° λ””μžμ΄λ„ˆμ™€ 개발자 κ°„μ˜ 곡톡 μ–Έμ–΄ 역할을 ν•©λ‹ˆλ‹€ [1-3]. * **ν† ν°μ˜ 3단계 계측 ꡬ쑰 (Token Hierarchy)** * ν™•μž₯ κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ 토큰은 3κ°€μ§€ κ³„μΈ΅μœΌλ‘œ λ‚˜λ‰˜μ–΄ κ΄€λ¦¬λ©λ‹ˆλ‹€ [4-10]. * **κΈ°λ³Έ 토큰 (Primitive/[[Reference|Reference]] Tokens):** `#3366FF` λ˜λŠ” `16px`κ³Ό 같은 μ›μ‹œμ μ΄κ³  λ§₯락이 μ—†λŠ” κΈ°λ³Έ 값을 μ˜λ―Έν•©λ‹ˆλ‹€. * **μ‹œλ§¨ν‹± 토큰 (Semantic/Alias Tokens):** κΈ°λ³Έ 토큰을 μ°Έμ‘°ν•˜λ©°, `color.primary`λ‚˜ `button.background`처럼 ν† ν°μ˜ λͺ©μ κ³Ό μ˜λ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. ν…Œλ§ˆ(라이트/닀크 λͺ¨λ“œ) μ „ν™˜ μ‹œ μ»΄ν¬λ„ŒνŠΈ μ½”λ“œλ₯Ό μˆ˜μ •ν•  ν•„μš” 없이 μ‹œλ§¨ν‹± 토큰이 κ°€λ¦¬ν‚€λŠ” κΈ°λ³Έ κ°’λ§Œ κ΅μ²΄ν•˜μ—¬ ν…Œλ§ˆλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€. * **μ»΄ν¬λ„ŒνŠΈ 토큰 (Component Tokens):** `button.background.primary`와 같이 νŠΉμ • μ»΄ν¬λ„ŒνŠΈλ‚˜ λ³€ν˜•(variant)에 κ΅­ν•œλœ ν† ν°μœΌλ‘œ, μ‹œλ§¨ν‹± 토큰을 μ°Έμ‘°ν•΄μ•Ό ν•©λ‹ˆλ‹€. * **React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œμ˜ κ΅¬ν˜„ (Implementation Pipeline)** * **λ””μžμΈ 도ꡬ 톡합:** [[Figma|Figma]]의 Tokens Studio와 같은 ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ—¬ λ””μžμ΄λ„ˆκ°€ μ„€μ •ν•œ μ‹œκ°μ  결정듀을 JSON 데이터 ꡬ쑰둜 μΆ”μΆœν•©λ‹ˆλ‹€ [11-14]. * **토큰 λ³€ν™˜:** Style Dictionary λ˜λŠ” Knapsackκ³Ό 같은 λ³€ν™˜ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ JSON/YAML ν˜•νƒœμ˜ 토큰을 Reactμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” CSS λ³€μˆ˜(Custom Properties) λ˜λŠ” JS 객체 포맷으둜 μžλ™ λ³€ν™˜ν•©λ‹ˆλ‹€ [15-17]. * **React 톡합:** μƒμ„±λœ CSS λ³€μˆ˜λ₯Ό `index.css`와 같은 μ΅œμƒμœ„ μŠ€νƒ€μΌμ— μ •μ˜ν•œ λ’€, React μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ 인라인 μŠ€νƒ€μΌ, [[CSS Modules|CSS Modules]], styled-components, λ˜λŠ” [[Tailwind CSS|Tailwind CSS]]와 κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€ [15, 18, 19]. * **μ΅œμ‹  νŠΈλ Œλ“œ: [[Tailwind CSS v4|Tailwind CSS v4]]의 CSS-First μ ‘κ·Ό** * 2025/2026λ…„ κΈ°μ€€, Tailwind CSS v4λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ„€μ • 파일(`tailwind.config.js`) λŒ€μ‹  CSS `@theme` λ””λ ‰ν‹°λΈŒλ₯Ό μ‚¬μš©ν•˜μ—¬ λ””μžμΈ 토큰을 μ„ μ–Έν•©λ‹ˆλ‹€ [20-22]. * 이 접근법은 λ””μžμΈ 토큰을 λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ‘œ 직접 λ…ΈμΆœμ‹œν‚€λ©°, TailwindλŠ” 이 λ³€μˆ˜λ“€μ„ λ°”νƒ•μœΌλ‘œ μœ ν‹Έλ¦¬ν‹° 클래슀(예: `--color-primary-500` μ„ μ–Έ μ‹œ `bg-primary-500` μžλ™ 생성)λ₯Ό μƒμ„±ν•˜μ—¬ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ 없이 λΉ λ₯Έ μ„±λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€ [21, 23]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Tailwind CSS|Tailwind CSS]], styled-components, Dynamic Theming, [[Atomic Design|Atomic Design]], [[CSS-in-JS|CSS-in-JS]] - **Projects/Contexts:** [[Style Dictionary|Style Dictionary]], Figma Tokens Studio, [[React Server Components|React Server Components]] - **Contradictions/Notes:** μ†ŒμŠ€ [15]와 [19]은 λ””μžμΈ 토큰을 기반으둜 μƒμ„±λœ CSS λ³€μˆ˜λ₯Ό styled-components와 같은 λŸ°νƒ€μž„ [[CSS-in-JS|CSS-in-JS]] λΌμ΄λΈŒλŸ¬λ¦¬μ— λ¬Άμ–΄μ„œ μ‚¬μš©ν•˜λŠ” 방식을 μ„€λͺ…ν•˜μ§€λ§Œ, μ†ŒμŠ€ [24-27]와 [28-30]은 [[React Server Components|React Server Components]](RSC) ν™˜κ²½μ—μ„œλŠ” λŸ°νƒ€μž„ CSS-in-JS의 μ„±λŠ₯ 및 ν˜Έν™˜μ„± 문제둜 인해 Tailwind CSSλ‚˜ CSS Modules처럼 λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•˜λŠ” 방식(Zero-runtime)으둜 μ „ν™˜ν•˜λŠ” 것을 κ°•λ ₯히 ꢌμž₯ν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-26*