# [[Tailwind CSS|Tailwind CSS]] ## πŸ“Œ Brief Summary Tailwind CSSλŠ” κ°œλ°œμžκ°€ λ§ˆν¬μ—…(HTML/JSX) λ‚΄μ—μ„œ 미리 μ •μ˜λœ μ €μˆ˜μ€€ μœ ν‹Έλ¦¬ν‹° 클래슀(예: `flex`, `pt-4`, `bg-blue-500`)λ₯Ό μ‘°ν•©ν•˜μ—¬ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό 직접 ꡬ좕할 수 있게 ν•΄μ£ΌλŠ” μœ ν‹Έλ¦¬ν‹° 퍼슀트(Utility-first) CSS ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€ [1, 2]. μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ λΆ„λ¦¬λœ κΈ°μ‘΄ CSS 파일 μž‘μ„± 방식과 달리 μ»¨ν…μŠ€νŠΈ μ „ν™˜ 없이 λΉ λ₯Έ UI κ°œλ°œμ„ μ§€μ›ν•˜λ©°, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” CSSλ₯Ό λΉŒλ“œ νƒ€μž„μ— μ œκ±°ν•˜μ—¬ 맀우 μž‘κ³  μ΅œμ ν™”λœ ν”„λ‘œλ•μ…˜ λ²ˆλ“€μ„ μƒμ„±ν•˜λŠ” 것이 νŠΉμ§•μž…λ‹ˆλ‹€ [1, 3, 4]. 졜근 [[React Server Components|React Server Components]](RSC) ν™˜κ²½κ³Ό 같이 κ³ μ„±λŠ₯이 μš”κ΅¬λ˜λŠ” ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œ μ•„ν‚€ν…μ²˜μ—μ„œ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†λŠ” 졜적의 μŠ€νƒ€μΌλ§ λ°©μ‹μœΌλ‘œ 널리 μ±„νƒλ˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [5-7]. ## πŸ“– Core Content **μž‘λ™ 방식 및 μ£Όμš” νŠΉμ§•** * **μœ ν‹Έλ¦¬ν‹° 퍼슀트(Utility-First) μ ‘κ·Ό:** λ³΅μž‘ν•œ CSS 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” λŒ€μ‹  단일 CSS 속성에 λŒ€μ‘ν•˜λŠ” μž‘κ³  λͺ…ν™•ν•œ μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μ‘°ν•©ν•˜μ—¬ UIλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€ [1, 8]. * **λ””μžμΈ μ‹œμŠ€ν…œ λ‚΄μž₯:** 간격(spacing), νƒ€μ΄ν¬κ·Έλž˜ν”Ό, 색상 λ“± μΌκ΄€λœ λ””μžμΈ 토큰을 λ‚΄μž₯ν•˜μ—¬ μ—¬λŸ¬ λͺ…μ˜ κ°œλ°œμžκ°€ μž‘μ—…ν•΄λ„ λ””μžμΈμ΄ μ–΄κΈ‹λ‚˜λŠ” ν˜„μƒ(예: 수백 κ°€μ§€μ˜ λ‹€λ₯Έ νšŒμƒ‰ 음영)을 λ°©μ§€ν•©λ‹ˆλ‹€ [3, 9]. * **Tailwind v4의 μ•„ν‚€ν…μ²˜ ν˜μ‹ :** μ΅œμ‹  Tailwind v4μ—μ„œλŠ” [[JavaScript|JavaScript]] μ„€μ • 파일(`tailwind.config.js`) λŒ€μ‹  `@theme`, `@source` λ””λ ‰ν‹°λΈŒλ₯Ό μ‚¬μš©ν•˜λŠ” 'CSS-first' μ•„ν‚€ν…μ²˜λ₯Ό μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€ [10, 11]. μ΄λŠ” λ„€μ΄ν‹°λΈŒ CSS λ³€μˆ˜μ— 직접 μ ‘κ·Όν•˜κ²Œ ν•΄ μ£Όλ©°, Rust 기반의 Oxide 엔진을 ν™œμš©ν•˜μ—¬ κΈ°μ‘΄ λŒ€λΉ„ λΉŒλ“œ 속도λ₯Ό μ΅œλŒ€ 10λ°° ν–₯μƒμ‹œμΌ°μŠ΅λ‹ˆλ‹€ [10, 12, 13]. **Tailwind CSS의 μ£Όμš” μž₯점 (Pros)** * **μ„±λŠ₯ 및 λ²ˆλ“€ μ΅œμ ν™”:** λŸ°νƒ€μž„μ— μŠ€νƒ€μΌμ„ ꡬ문 λΆ„μ„ν•˜κ³  μ£Όμž…ν•˜λŠ” [[CSS-in-JS|CSS-in-JS]]와 달리, JIT(Just-In-Time) μ»΄νŒŒμΌλŸ¬μ™€ PurgeCSSλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©λœ 클래슀만 μΆ”μΆœν•œ 정적 CSSλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€ [3, 4, 7]. 이둜 인해 λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ 'Zero'이며, ν”„λ‘œλ•μ…˜ CSS λ²ˆλ“€ 크기λ₯Ό 5~20kb μˆ˜μ€€μœΌλ‘œ μ–΅μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 6, 7]. * **[[React Server Components (RSC)|React Server Components (RSC]] μ™„λ²½ ν˜Έν™˜:** λŸ°νƒ€μž„ λ‹¨κ³„μ—μ„œ React Context에 μ˜μ‘΄ν•˜λŠ” Styled Componentsλ‚˜ Emotionκ³Ό 달리, TailwindλŠ” 정적 CSSλ₯Ό 기반으둜 ν•˜λ―€λ‘œ [[Next.js 15|Next.js 15]]의 App Router와 같은 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ ν™˜κ²½μ—μ„œ μ œμ•½ 없이 μ™„λ²½νžˆ λ™μž‘ν•©λ‹ˆλ‹€ [5, 6, 14, 15]. * **μ½”λ“œ μœ μ§€λ³΄μˆ˜ 및 개발 속도:** μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚­μ œν•  λ•Œ ν•΄λ‹Ή μŠ€νƒ€μΌλ„ ν•¨κ»˜ μ•ˆμ „ν•˜κ²Œ μ œκ±°λ˜λ―€λ‘œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 'κ³ μ•„ CSS(Orphaned CSS)'κ°€ μŒ“μ΄μ§€ μ•ŠμœΌλ©°, λ§ˆν¬μ—…κ³Ό μŠ€νƒ€μΌλ§μ„ ν•œ κ³³μ—μ„œ μ²˜λ¦¬ν•˜μ—¬ 개발 속도λ₯Ό λ†’μ—¬μ€λ‹ˆλ‹€ [3, 8]. **Tailwind CSS의 단점 및 ν•œκ³„ (Cons)** * **가독성 μ €ν•˜ (Class Soup):** λ³΅μž‘ν•œ μ»΄ν¬λ„ŒνŠΈμ˜ 경우 `className`에 μˆ˜μ‹­ 개의 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€κ°€ λ‚˜μ—΄λ˜μ–΄ λ§ˆν¬μ—…μ˜ 가독성이 λ–¨μ–΄μ§€κ³  μ½”λ“œκ°€ μ§€μ €λΆ„ν•΄μ§€λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [3, 16, 17]. * **μž„μ˜μ˜ κ°’(Arbitrary Values) λ‚¨μš© 문제:** λ””μžμΈ 토큰에 μ •μ˜λ˜μ§€ μ•Šμ€ μž„μ˜μ˜ κ°’(예: `w-[347px]`)을 ν”„λ‘œμ νŠΈ 내에 λ¬΄λΆ„λ³„ν•˜κ²Œ μ‚¬μš©ν•˜λ©΄ λ””μžμΈ μ‹œμŠ€ν…œμ˜ ν™•μž₯μ„±κ³Ό 일관성이 훼손될 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€ [16, 18]. * **λŸ¬λ‹ 컀브:** μƒˆλ‘œμš΄ μœ ν‹Έλ¦¬ν‹° 클래슀 μ΄λ¦„μ˜ κ·œμΉ™μ„ μ΅ν˜€μ•Ό ν•˜λ―€λ‘œ 초기 μ§„μž… μž₯λ²½κ³Ό ν•™μŠ΅ μ‹œκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€ [17, 18]. **μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ 및 λͺ¨λ²” 사둀 (Best Practices)** * **μ»΄ν¬λ„ŒνŠΈ 좔상화:** κΈ΄ μœ ν‹Έλ¦¬ν‹° 클래슀 λ¬Έμžμ—΄μ˜ 쀑볡과 가독성 μ €ν•˜λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄, `@apply` μ§€μ‹œμ–΄λ₯Ό λ¬΄λΆ„λ³„ν•˜κ²Œ μ‚¬μš©ν•˜κΈ°λ³΄λ‹€λŠ” λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄μ„ λ³„λ„μ˜ React μ»΄ν¬λ„ŒνŠΈλ‘œ μΆ”μΆœν•˜μ—¬ μΊ‘μŠν™”ν•˜λŠ” 것이 κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆλ‹€ [16, 19]. * **도ꡬ μƒνƒœκ³„ ν™œμš©:** Tailwind와 ν•¨κ»˜ [[Radix UI|Radix UI]] λ“± μŠ€νƒ€μΌμ΄ μ—†λŠ” '[[Headless UI|Headless UI]]'λ₯Ό κ²°ν•©ν•˜κ±°λ‚˜, CVA(Class Variance Authority) 및 `clsx`, `tailwind-merge` 라이브러리λ₯Ό ν™œμš©ν•˜μ—¬ 동적 λ³€ν˜•(Variants)κ³Ό 클래슀 μΆ©λŒμ„ 효율적으둜 관리해야 ν•©λ‹ˆλ‹€ [3, 20-22]. * **λ””μžμΈ 토큰 쀑앙 집쀑화:** μ‚°λ°œμ μΈ μƒ‰μƒμ΄λ‚˜ 간격 값을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ„€μ • νŒŒμΌμ΄λ‚˜ `@theme` 블둝을 톡해 ν…Œλ§ˆ λ³€μˆ˜(CSS λ³€μˆ˜)λ₯Ό 쀑앙 μ§‘μ€‘ν™”ν•˜λ©΄ 닀크 λͺ¨λ“œ 및 λ©€ν‹° λΈŒλžœλ”© μ‹œμŠ€ν…œμ„ κ²¬κ³ ν•˜κ²Œ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€ [9, 23-25]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Styled Components|Styled Components]], CSS-in-JS, Design Tokens, [[React Server Components (RSC)|React Server Components (RSC]], [[Headless UI|Headless UI]] - **Projects/Contexts:** [[Next.js App Router|Next.js App Router]], Component Library Architecture, Scalable FrontendSystems - **Contradictions/Notes:** μ†ŒμŠ€ μ „λ°˜μ— 걸쳐 Styled ComponentsλŠ” 동적 μŠ€νƒ€μΌλ§κ³Ό propsλ₯Ό ν†΅ν•œ μΊ‘μŠν™” λ“± λ›°μ–΄λ‚œ 개발자 κ²½ν—˜(DX)을 μ œκ³΅ν•œλ‹€κ³  μ–ΈκΈ‰λ˜μ§€λ§Œ [26, 27], ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½(특히 [[Next.js App Router|Next.js App Router]]/RSC)μ—μ„œλŠ” Tailwind CSSκ°€ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†κ³  λ²ˆλ“€ 크기가 μž‘κΈ° λ•Œλ¬Έμ— μ•„ν‚€ν…μ²˜ μƒμ˜ μ„±λŠ₯ μš°μœ„λ₯Ό κ°€μ§€λ©° ν™•μž₯ κ°€λŠ₯ν•œ λŒ€κ·œλͺ¨ 섀계에 훨씬 μ ν•©ν•˜λ‹€κ³  λŒ€μ‘°μ μœΌλ‘œ ν‰κ°€ν•©λ‹ˆλ‹€ [6, 7, 14, 15, 28, 29]. --- *Last updated: 2026-04-26*