34 lines
5.6 KiB
Markdown
34 lines
5.6 KiB
Markdown
# [[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* |