# [[CSS Variables|CSS Variables]] ## πŸ“Œ Brief Summary CSS Variables(μ‚¬μš©μž μ§€μ • 속성, CSS custom properties)은 React 및 μ΅œμ‹  ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œμ νŠΈμ—μ„œ λ””μžμΈ 토큰을 κ΄€λ¦¬ν•˜κ³  동적 ν…Œλ§ˆλ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 핡심 기반 κΈ°μˆ μž…λ‹ˆλ‹€. 이 κΈ°μˆ μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „λ°˜μ— 걸쳐 ν•˜λ“œμ½”λ”©λœ μŠ€νƒ€μΌ 값을 λŒ€μ²΄ν•˜μ—¬ λ””μžμΈμ˜ 일관성을 μœ μ§€ν•˜κ³ , 라이트/닀크 λͺ¨λ“œμ™€ 같은 ν…Œλ§ˆ μ „ν™˜μ„ μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€. 특히 [[Tailwind CSS v4|Tailwind CSS v4]]와 같은 μ΅œμ‹  ν”„λ ˆμž„μ›Œν¬λ‚˜ styled-components와 같은 CSS-in-JS ν™˜κ²½μ—μ„œ [[React Server Components|React Server Components]](RSC) ν˜Έν™˜μ„± 및 λŸ°νƒ€μž„ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•œ ν•„μˆ˜μ μΈ ν•΄κ²°μ±…μœΌλ‘œ μ±„νƒλ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ## πŸ“– Core Content * **λ””μžμΈ 토큰과 동적 ν…Œλ§ˆ([[Dynamic Theming|Dynamic Theming]])의 핡심:** CSS λ³€μˆ˜λŠ” 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό, 간격 λ“±μ˜ λ””μžμΈ 토큰을 쀑앙 μ§‘μ€‘ν™”ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 단일 μ§„μ‹€ 곡급원([[Single_Source_of_Truth|Single Source of Truth]]) 역할을 ν•©λ‹ˆλ‹€ [1, 2]. Style Dictionary와 같은 도ꡬλ₯Ό μ‚¬μš©ν•΄ JSON ν˜•μ‹μ˜ λ””μžμΈ 토큰을 CSS λ³€μˆ˜(예: `--color-primary`)둜 λ³€ν™˜ν•˜κ³  이λ₯Ό `:root` λ ˆλ²¨μ— μ •μ˜ν•˜λ©΄, [[JavaScript|JavaScript]]의 κ°œμž… 없이도 κΈ°λ³Έ ν…Œλ§ˆλ‚˜ 라이트/닀크 λͺ¨λ“œλ₯Ό λ™μ μœΌλ‘œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3-6]. * **[[Tailwind CSS|Tailwind CSS]] v4의 CSS μš°μ„ (CSS-first) μ•„ν‚€ν…μ²˜:** Tailwind CSS v4λŠ” 기쑴의 JavaScript μ„€μ • 파일(tailwind.config.js)을 μ œκ±°ν•˜κ³  `@theme` λ””λ ‰ν‹°λΈŒλ₯Ό μ‚¬μš©ν•˜μ—¬ λ””μžμΈ 토큰을 κΈ°λ³Έ CSS λ³€μˆ˜λ‘œ 직접 λ…ΈμΆœν•©λ‹ˆλ‹€ [7-10]. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” JavaScript ꡬ동 μ»¨ν…μŠ€νŠΈ μ—…λ°μ΄νŠΈ 없이 λŸ°νƒ€μž„ ν…Œλ§ˆ 적용과 νƒ€μž… μ•ˆμ •μ„±(Type Safety)을 확보할 수 μžˆμŠ΅λ‹ˆλ‹€ [10, 11]. λ˜ν•œ, μƒμ„±λœ μ •κ·œ CSS λ³€μˆ˜λŠ” 인라인 μŠ€νƒ€μΌμ΄λ‚˜ μž„μ˜μ˜ κ°’(arbitrary values)μ—μ„œ μ°Έμ‘°ν•  수 있으며, JavaScript의 `getComputedStyle`을 ν†΅ν•΄μ„œλ„ μ‰½κ²Œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€ [12-14]. * **styled-components 및 RSC ν™˜κ²½μ—μ„œμ˜ ν•œκ³„ 극볡:** React [[Server Components|Server Components]](RSC) ν™˜κ²½μ—μ„œλŠ” [[React Context|React Context]]κ°€ μ œκ³΅λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, styled-componentsλ‚˜ Emotion이 μ˜μ‘΄ν•˜λ˜ `ThemeProvider`λ₯Ό ν†΅ν•œ 동적 ν…Œλ§ˆ μ£Όμž…μ΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [15-17]. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ styled-components v6.4+ μ—μ„œλŠ” `createTheme` ν•¨μˆ˜λ₯Ό λ„μž…ν•˜μ—¬ ν…Œλ§ˆ 객체의 λͺ¨λ“  리프(leaf) 값을 CSS λ³€μˆ˜ μ°Έμ‘°(`var(--prefix-path)`)둜 λ³€ν™˜ν•©λ‹ˆλ‹€ [18]. 이 접근법을 μ‚¬μš©ν•˜λ©΄ React μ»¨ν…μŠ€νŠΈ 없이도 ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ™€ RSC λͺ¨λ‘μ—μ„œ μ•ˆμ •μ μœΌλ‘œ ν…Œλ§ˆλ₯Ό μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [18]. * **μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ λ‚΄μ—μ„œμ˜ μœ μ—°ν•œ κ²°ν•©:** μ •μ˜λœ CSS λ³€μˆ˜λŠ” 인라인 μŠ€νƒ€μΌ, CSS λͺ¨λ“ˆ, ν˜Ήμ€ styled-components와 같은 CSS-in-JS 라이브러리 λ‚΄λΆ€μ—μ„œ λͺ¨λ‘ ν˜Έν™˜λ˜μ–΄ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€ [19]. μ΄λŠ” νŠΉμ • μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μ— μ’…μ†λ˜μ§€ μ•Šκ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹œκ°μ  일관성을 μœ μ§€ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€ [19, 20]. ## πŸ”— Knowledge Connections - **Related Topics:** `[[Design Tokens|Design Tokens]]`, `Dynamic Theming`, `Tailwind CSS v4`, `[[React Server Components (RSC)|React Server Components (RSC]]`, `[[Styled Components|Styled Components]]` - **Projects/Contexts:** `[[Next.js App Router|Next.js App Router]]` (RSC ν™˜κ²½ λ„μž…μœΌλ‘œ μΈν•œ CSS-in-JS의 ν•œκ³„ 및 CSS λ³€μˆ˜λ₯Ό ν™œμš©ν•œ ν…Œλ§ˆ 관리 μ²΄κ³„λ‘œμ˜ μ „ν™˜ λ§₯락 [15-17]), `Figma DesignSystem Integration` ([[Figma|Figma]]μ—μ„œ μ •μ˜λœ 토큰을 CSS λ³€μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ μžλ™ν™”λœ μ›Œν¬ν”Œλ‘œμš°λ₯Ό κ΅¬μΆ•ν•˜λŠ” ν”„λ‘œμ νŠΈ ν™˜κ²½ [21-23]) - **Contradictions/Notes:** κΈ°μ‘΄ CSS-in-JS 라이브러리(styled-components, Emotion)λŠ” λŸ°νƒ€μž„μ— JavaScript둜 μŠ€νƒ€μΌμ„ μƒμ„±ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ μˆ˜μ€€μ˜ κ°•λ ₯ν•œ 동적 μŠ€νƒ€μΌλ§μ„ μ œκ³΅ν–ˆμœΌλ‚˜ λ Œλ”λ§ μ„±λŠ₯κ³Ό RSC ν˜Έν™˜μ„±μ—μ„œ 단점이 μ‘΄μž¬ν–ˆμŠ΅λ‹ˆλ‹€. μ΅œκ·Όμ—λŠ” λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†λŠ” 정적 λΉŒλ“œνƒ€μž„ CSS λ³€μˆ˜(Tailwind CSS v4, [[vanilla-extract|vanilla-extract]]) 기반 접근법이 규λͺ¨κ°€ 큰 ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ λ”μš± μ„ ν˜Έλ˜λŠ” μΆ”μ„Έμž…λ‹ˆλ‹€ [16, 17, 24-26]. --- *Last updated: 2026-04-26*