# [[Utility-first CSS|Utility-first CSS]] ## πŸ“Œ Brief Summary Utility-first CSSλŠ” μž‘κ³  단일 λͺ©μ μ„ κ°€μ§„ μ €μˆ˜μ€€(low-level) μœ ν‹Έλ¦¬ν‹° 클래슀(예: `flex`, `pt-4`, `text-gray-500`)λ₯Ό HTMLμ΄λ‚˜ JSX λ§ˆν¬μ—… 내에 직접 μ‘°ν•©ν•˜μ—¬ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ””μžμΈν•˜λŠ” μŠ€νƒ€μΌλ§ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€ [1-3]. 이 방식은 λ³„λ„μ˜ μ»€μŠ€ν…€ CSS μ½”λ“œλ₯Ό μž‘μ„±ν•  ν•„μš”λ₯Ό 쀄여 ν”„λ‘œν† νƒ€μ΄ν•‘ 속도λ₯Ό 높이며, κ°œλ°œμžκ°€ 파일 κ°„ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ 없이 μ§κ΄€μ μœΌλ‘œ μŠ€νƒ€μΌμ„ ꡬ성할 수 있게 ν•©λ‹ˆλ‹€ [1, 4, 5]. 이 νŒ¨λŸ¬λ‹€μž„μ„ λŒ€ν‘œν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μΈ [[Tailwind CSS|Tailwind CSS]]λŠ” λ””μžμΈ 토큰을 κ°•μ œν•˜μ—¬ 일관성을 높이고 λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œλ₯Ό μ—†μ• λŠ” λ“±μ˜ μž₯점으둜 ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ—μ„œ 널리 μ±„νƒλ˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [1, 6, 7]. ## πŸ“– Core Content * **핡심 κ°œλ… 및 λ™μž‘ 방식:** Utility-first CSSλŠ” `mt-px`, `px-2`, `text-center`, `font-bold` λ“±κ³Ό 같이 νŠΉμ •ν•œ ν•˜λ‚˜μ˜ μŠ€νƒ€μΌ 속성을 λ‹΄λ‹Ήν•˜λŠ” 미리 μ •μ˜λœ μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λ“€μ„ μ‘°λ¦½ν•˜μ—¬ UIλ₯Ό κ΅¬μΆ•ν•©λ‹ˆλ‹€ [4, 8, 9]. 전톡적인 CSS μž‘μ„± λ°©μ‹μ΄λ‚˜ λ³„λ„μ˜ μ»΄ν¬λ„ŒνŠΈ 생성 없이 μš”μ†Œμ˜ 클래슀 μ†μ„±λ§Œμ„ ν™œμš©ν•΄ μ‹ μ†ν•˜κ²Œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μŠ€νƒ€μΌλ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. * **μ£Όμš” μž₯점:** * **개발 속도와 μ»¨ν…μŠ€νŠΈ μœ μ§€:** λ§ˆν¬μ—…(JSX)κ³Ό μŠ€νƒ€μΌλ§μ„ ν•œ κ³³μ—μ„œ μž‘μ„±ν•˜λ―€λ‘œ CSS 파일둜 μ „ν™˜ν•  ν•„μš”κ°€ μ—†μ–΄ 개발 속도가 맀우 λΉ λ¦…λ‹ˆλ‹€ [1, 5]. * **λ””μžμΈ 일관성:** μ—¬λ°±, 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό 등이 ν”„λ ˆμž„μ›Œν¬μ˜ λ””μžμΈ ν† ν°μœΌλ‘œ κ³ μ •λ˜μ–΄ μžˆμ–΄ μ‹œκ°μ  뢈일치(예: μž„μ˜λ‘œ μƒμ„±λœ 수백 κ°€μ§€μ˜ νšŒμƒ‰μ΄ ν˜Όμž¬ν•˜λŠ” 문제)λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 10]. * **μ„±λŠ₯ 및 λΉŒλ“œ μ΅œμ ν™”:** Utility-first CSS ν”„λ ˆμž„μ›Œν¬(특히 Tailwind CSS)λŠ” μ‚¬μš©λœ 클래슀만 μŠ€μΊ”ν•˜μ—¬ ν”„λ‘œλ•μ…˜ CSS λ²ˆλ“€μ— ν¬ν•¨μ‹œν‚€λŠ” 컴파일러λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€ [6, 11]. μ΄λŠ” [[CSS-in-JS|CSS-in-JS]]와 달리 λŸ°νƒ€μž„ μžλ°”μŠ€ν¬λ¦½νŠΈ μ˜€λ²„ν—€λ“œκ°€ μ—†μœΌλ©°, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” CSSκ°€ μŒ“μ΄λŠ” 것을 막고 λ²ˆλ“€ 크기λ₯Ό 5~20kb μˆ˜μ€€μœΌλ‘œ μž‘κ²Œ μœ μ§€ν•˜μ—¬ μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [6, 11, 12]. * **단점 및 ν•œκ³„:** * **가독성 μ €ν•˜ (Verbose JSX):** λ³΅μž‘ν•œ μ»΄ν¬λ„ŒνŠΈμ˜ 경우 HTML νƒœκ·Έ λ‚΄μ˜ 클래슀 λ¬Έμžμ—΄μ΄ 맀우 κΈΈμ–΄μ§€κ³  μ§€μ €λΆ„ν•΄μ Έ μ½”λ“œ 가독성이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 13]. * **ν•™μŠ΅ 곑선:** λ°©λŒ€ν•œ μœ ν‹Έλ¦¬ν‹° 클래슀 μ΄λ¦„μ˜ κ·œμΉ™κ³Ό ν”„λ ˆμž„μ›Œν¬ μ„€μ • 방법을 μƒˆλ‘œ μ΅ν˜€μ•Ό ν•˜λ―€λ‘œ 초기 적응에 μ‹œκ°„μ΄ μ†Œμš”λ©λ‹ˆλ‹€ [13, 14]. * **μž„μ˜μ˜ κ°’ λˆ„μ :** `w-[347px]`와 같은 λ””μžμΈ μ‹œμŠ€ν…œμ„ μš°νšŒν•˜λŠ” μž„μ˜μ˜ κ°’(Arbitrary values)이 μ½”λ“œλ² μ΄μŠ€μ— λ¬΄λΆ„λ³„ν•˜κ²Œ 좕적될 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€ [14-16]. * **λͺ¨λ²” 사둀:** λ§ˆν¬μ—…μ΄ κΈΈμ–΄μ§€λŠ” "Class Soup" 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, λ‹¨μˆœνžˆ λ°˜λ³΅λ˜λŠ” μœ ν‹Έλ¦¬ν‹°λ₯Ό `@apply` μ§€μ‹œμ–΄λ‘œ CSS에 μΆ”μΆœν•˜λŠ” κ²ƒλ³΄λ‹€λŠ” React μ»΄ν¬λ„ŒνŠΈμ™€ 같은 UI 좔상화 λ‹¨μœ„μ—μ„œ λ¨Όμ € μ»΄ν¬λ„ŒνŠΈν™”ν•˜λŠ” 것이 κ°•λ ₯ν•˜κ²Œ ꢌμž₯λ©λ‹ˆλ‹€ [16-18]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Tailwind CSS|Tailwind CSS]], CSS-in-JS, Design Tokens, [[React Server Components|React Server Components]], [[Component-Based Design|Component-Based Design]] - **Projects/Contexts:** kiwi.com λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν”„λ‘œμ νŠΈ ([[styled-components|styled-components]]μ—μ„œ Utility-first ν”„λ ˆμž„μ›Œν¬μΈ Tailwind둜 μ „ν™˜ν•˜μ—¬ μ„±λŠ₯ μ§€ν‘œ 및 λͺ¨λ°”일 λ Œλ”λ§ 속도λ₯Ό 크게 κ°œμ„ ν•œ 사둀 [19-21]), [[Tailwind CSS v4|Tailwind CSS v4]] λ„μž… (μžλ°”μŠ€ν¬λ¦½νŠΈ μ„€μ •μ—μ„œ CSS-first μ•„ν‚€ν…μ²˜λ‘œ μ „ν™˜ [22]) - **Contradictions/Notes:** μ†ŒμŠ€λ“€μ€ Utility-first CSS(Tailwind)κ°€ λΉŒλ“œ νƒ€μž„μ— CSSλ₯Ό μƒμ„±ν•˜μ—¬ λŸ°νƒ€μž„ λΉ„μš©μ΄ μ—†κ³  λ Œλ”λ§ μ„±λŠ₯이 맀우 λ›°μ–΄λ‚œ 반면 μ½”λ“œκ°€ μž₯ν™©ν•΄μ§€λŠ” 단점이 μžˆλ‹€κ³  μ„€λͺ…ν•©λ‹ˆλ‹€ [11, 13, 23]. λ°˜λŒ€λ‘œ CSS-in-JS([[Styled Components|Styled Components]])λŠ” μ»΄ν¬λ„ŒνŠΈ 쀑심 μŠ€νƒ€μΌλ§μœΌλ‘œ 가독성이 λ†’κ³  동적 μŠ€νƒ€μΌλ§μ— μœ λ¦¬ν•˜μ§€λ§Œ, λŸ°νƒ€μž„μ— μŠ€νƒ€μΌμ„ μ£Όμž…ν•˜λ―€λ‘œ CPU/μžλ°”μŠ€ν¬λ¦½νŠΈ μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜λ©° [[React Server Components|React Server Components]](RSC) ν™˜κ²½κ³ΌλŠ” ꡬ쑰적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” 문제점이 μžˆλ‹€κ³  λͺ…ν™•νžˆ λŒ€μ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [24-26]. --- *Last updated: 2026-04-26*