# [[Tailwind CSS v4 CSS-first Architecture|Tailwind CSS v4 CSS-first Architecture]] ## πŸ“Œ Brief Summary [[Tailwind CSS v4|Tailwind CSS v4]]의 CSS-first μ•„ν‚€ν…μ²˜λŠ” 기쑴의 μžλ°”μŠ€ν¬λ¦½νŠΈ μ„€μ • 파일(`tailwind.config.js`)에 μ˜μ‘΄ν•˜λ˜ 방식을 νƒˆν”Όν•˜μ—¬ CSS 기반의 μ„€μ •μœΌλ‘œ μ „ν™˜ν•œ 근본적인 νŒ¨λŸ¬λ‹€μž„μ˜ λ³€ν™”μž…λ‹ˆλ‹€ [1, 2]. `@theme` λ””λ ‰ν‹°λΈŒλ₯Ό μ‚¬μš©ν•˜μ—¬ λ””μžμΈ 토큰을 λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ‘œ μ •μ˜ν•˜λ©΄ ν”„λ ˆμž„μ›Œν¬κ°€ ν•΄λ‹Ήν•˜λŠ” μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€ [2-5]. 이λ₯Ό 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ 없이 동적인 ν…Œλ°μ΄ κ°€λŠ₯ν•΄μ§€λ©°, Rust 기반의 Oxide μ—”μ§„κ³Ό κ²°ν•©ν•˜μ—¬ λΉŒλ“œ μ„±λŠ₯이 λΉ„μ•½μ μœΌλ‘œ ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€ [3, 6]. ## πŸ“– Core Content * **μžλ°”μŠ€ν¬λ¦½νŠΈ μ„€μ •μ—μ„œ CSS μ€‘μ‹¬μœΌλ‘œμ˜ μ „ν™˜:** [[Tailwind CSS|Tailwind CSS]] v4λŠ” κΈ°μ‘΄ `tailwind.config.js`λ₯Ό ν†΅ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ ꡬ성 λŒ€μ‹  `@theme` 및 `@source` λ””λ ‰ν‹°λΈŒλ₯Ό ν™œμš©ν•˜λŠ” CSS-first μ•„ν‚€ν…μ²˜λ₯Ό μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€ [1, 3]. κ³Όκ±°μ—λŠ” 컴파일 νƒ€μž„μ—λ§Œ 토큰이 적용되고 μžλ°”μŠ€ν¬λ¦½νŠΈ 객체둜 ν…Œλ§ˆλ₯Ό ν™•μž₯ν•΄μ•Ό ν–ˆμ§€λ§Œ, v4λΆ€ν„°λŠ” λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ₯Ό 톡해 λŸ°νƒ€μž„μ—μ„œλ„ μ ‘κ·Ό κ°€λŠ₯ν•œ ν˜•νƒœλ‘œ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [2]. * **`@theme` λ””λ ‰ν‹°λΈŒμ™€ μœ ν‹Έλ¦¬ν‹° 클래슀 μžλ™ 생성:** `@theme` 블둝 내에 λ””μžμΈ 토큰(예: `--color-primary-500`)을 λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜λ‘œ μ •μ˜ν•˜λ©΄, TailwindλŠ” 이λ₯Ό λ°”νƒ•μœΌλ‘œ `bg-primary-500`, `text-primary-500`, `border-primary-500`κ³Ό 같은 μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€ [2, 3, 5]. 일반적인 `:root` μ„ νƒμžμ™€ 달리, `@theme`λŠ” λ‹¨μˆœ λ³€μˆ˜ μ •μ˜λ₯Ό λ„˜μ–΄ μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€μ™€μ˜ 맀핑을 μ§€μ‹œν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€ [7]. μ •μ˜λ˜λŠ” λ³€μˆ˜λ“€μ€ `--spacing-*`, `--font-*`, `--radius-*` λ“± μ§€μ •λœ λ„€μž„μŠ€νŽ˜μ΄μŠ€ κ·œμΉ™μ„ λ”°λ¦…λ‹ˆλ‹€ [8, 9]. * **`@source` λ””λ ‰ν‹°λΈŒλ₯Ό ν†΅ν•œ 경둜 관리:** μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μŠ€μΊ”ν•  μ½˜ν…μΈ  경둜λ₯Ό μ„€μ •ν•˜λ˜ κΈ°μ‘΄ 방식 λŒ€μ‹ , CSS 파일 λ‚΄μ—μ„œ 직접 `@source` λ””λ ‰ν‹°λΈŒλ₯Ό μ‚¬μš©ν•˜μ—¬ 경둜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€ [10]. μ΄λŠ” CSS μž„ν¬νŠΈμ™€ μžμ—°μŠ€λŸ½κ²Œ μ—°λ™λ˜λ©°, λ³΅μž‘ν•œ λͺ¨λ…Έλ ˆν¬([[Monorepo|Monorepo]]) ν™˜κ²½μ—μ„œ 관리λ₯Ό λ”μš± μš©μ΄ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€ [10]. * **μ›Ή ν”Œλž«νΌ μ •λ ¬ 및 μ„±λŠ₯ μ΅œμ ν™”:** μ΄λŸ¬ν•œ CSS-first μ•„ν‚€ν…μ²˜λŠ” λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜μ™€μ˜ 직접적인 톡합을 톡해 ν˜„λŒ€ μ›Ή ν”Œλž«νΌμ˜ λ°©ν–₯μ„±κ³Ό μ™„λ²½ν•˜κ²Œ λΆ€ν•©ν•©λ‹ˆλ‹€ [3, 11]. λ˜ν•œ Rust둜 μž‘μ„±λœ Oxide μ—”μ§„μ˜ λ„μž…μœΌλ‘œ μ΄μ „μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ 기반 μ»΄νŒŒμΌλŸ¬λ³΄λ‹€ 전체 λΉŒλ“œλŠ” 5~10λ°°, 증뢄 λΉŒλ“œ(Incremental build)λŠ” 100λ°° 이상 λΉ¨λΌμ‘ŒμŠ΅λ‹ˆλ‹€ [3, 6, 12]. * **Zero-Config 및 ν–₯μƒλœ λŸ°νƒ€μž„ ν…Œλ°:** React ν”„λ‘œμ νŠΈμ—μ„œ κΈ°μ‘΄ [[CSS-in-JS|CSS-in-JS]] 라이브러리(Styled Components λ“±)κ°€ [[React Context|React Context]]에 μ˜μ‘΄ν•˜λ©° μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC) ν™˜κ²½μ΄λ‚˜ λŸ°νƒ€μž„ μ„±λŠ₯μ—μ„œ ν•œκ³„λ₯Ό λ³΄μ˜€λ˜ 반면, Tailwind v4λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ꡬ성이 ν•„μš” μ—†λŠ” Zero-config ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [3, 6, 13]. λ˜ν•œ μ»΄ν¬λ„ŒνŠΈμ˜ 둜직 μˆ˜μ • 없이 CSS λ³€μˆ˜μ˜ κ°’λ§Œ μŠ€μ™‘ν•˜λŠ” λ°©μ‹μœΌλ‘œ 닀크 λͺ¨λ“œλ‚˜ 닀쀑 λΈŒλžœλ“œ ν…Œλ°μ„ 맀우 직관적이고 효율적으둜 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 14]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Design Tokens|Design Tokens]], Utility-first CSS, React Server Components (RSC, [[CSS-in-JS|CSS-in-JS]] - **Projects/Contexts:** [[Modern Scalable Frontend Architecture|Modern Scalable Frontend Architecture]], [[Next.js App Router Migration|Next.js App Router Migration]] - **Contradictions/Notes:** κΈ°μ‘΄ Tailwind CSS v3κΉŒμ§€λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•΄ μ„€μ • νŒŒμΌμ„ 닀루고 컴파일 νƒ€μž„μ—λ§Œ λ””μžμΈ μ‹œμŠ€ν…œμ΄ μƒμ„±λ˜μ—ˆλ‹€λ©΄, v4λŠ” CSS λ³€μˆ˜λ₯Ό λ°”νƒ•μœΌλ‘œ λŸ°νƒ€μž„κ³Ό λΈŒλΌμš°μ €μ˜ κΈ°λ³Έ κΈ°λŠ₯을 적극 ν™œμš©ν•˜λŠ” λ°©ν–₯으둜 섀계 사상이 μ™„μ „νžˆ λ°˜μ „λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [2]. --- *Last updated: 2026-04-26*