
HTML에서 유틸리티 클래스를 조합하여 UI를 스타일링하고,
빌드 단계에서 필요한 CSS만 생성하는 컴파일 기반 CSS 프레임워크이다.
CSS 파일에 들어가지 않아도 CSS 작업을 할 수 있습니다.
기존 방식
.button {
background: blue;
padding: 8px 16px;
border-radius: 4px;
}
Tailwind 사용
<button class="bg-blue-500 px-4 py-2 rounded">
Tailwind는 spacing, color, font-size 같은 값들을
미리 정의된 scale로 제공합니다.
p-1
p-2
p-4
p-8
와 같이 코드의 일관성을 유지 할 수 있습니다.
CSS 파일에서 코드를 작성하는 것이 아닌 스타일이 HTML과 같이 있기 때문에 스타일 변경이 간편합니다.
간단하게 요약하자면 다음과 같다
- CSS Entry 파일 로드
- Tailwind config 확인
- 프로젝트 파일 스캔
- 사용된 클래스 추출
- Utility Resolver 실행
- CSS Rule 생성
- dist/index.css 출력
- Next.js 번들링
- 브라우저 렌더링
개발 서버(npm run dev 또는 pnpm dev)가 실행되면
빌드 도구(예: Vite, Next.js)가 Tailwind 컴파일러를 실행합니다.
@import "tailwindcss";
해당 코드가 있는 CSS 파일은 Entry Point로 사용합니다.
이 시점에서 Tailwind는 CSS 파싱을 시작합니다.
다음으로 Tailwind는 프로젝트 루트에서 config를 찾습니다.
export default {
content: [
"./src/**/*.{ts,tsx}",
"../../apps/web/**/*.{ts,tsx}"
],
theme: {
extend: {}
}
}
이 파일에서
들의 정보를 얻습니다.
Tailwind v4부터는 content 설정이 없어도
프로젝트 파일을 자동으로 탐색하여 클래스를 찾습니다.
또한 기존에는 tailwind.config.ts에서 설정하던
theme 값도 CSS에서 직접 정의할 수 있습니다.
하지만 아직도 모노레포 등 복잡한 파일 구조에서는 필요합니다.
content: [
"./src/**/*.{ts,tsx}",
"../../apps/web/**/*.{ts,tsx}"
]
config 파일에 content로 설정된 모든 파일을 스켄합니다.
./src/components/button.tsx
./src/components/card.tsx
../../apps/web/app/page.tsx
이 파일을 텍스트 기반으로 분석합니다.
<div className="xs:flex bg-blue-500 p-4 hover:bg-blue-600">
이러한 텍스트를 읽었을 때
xs:flex bg-blue-500 p-4 hover:bg-blue-600
를 클래스로 추출합니다.
이러한 클래스를
Candidate Utility List로 저장합니다.
이 전단계에서 저장한 클래스를 해석합니다.
예)
bg-blue-500
분석
prefix → bg
value → blue-500
Tailwind는 내부 theme에서 찾습니다.
예)
theme.colors.blue.500
마무리
#3b82f6
예)
hover:bg-blue-600
분석
variant → hover
utility → bg-blue-600
결과 CSS
.hover\:bg-blue-600:hover {
background-color: #2563eb;
}
Tailwind는 content 에서 읽은 클래스만 생성합니다.
이 값을 기반으로 CSS rule을 동적으로 생성합니다.
.bg-blue-500 {
background-color: #3b82f6;
}
.p-4 {
padding: 1rem;
}
이 방식이 바로 Tailwind의 JIT(Just-In-Time) 컴파일 방식입니다.
사용된 클래스만 분석하여 필요한 CSS만 생성합니다.
Tailwind는 CSS를 다음 Layer로 정리합니다.
@layer base
@layer components
@layer utilities
위에서 만든 모든 CSS를 합쳐서 파일을 만듭니다.
@layer base { ... }
@layer components { ... }
@layer utilities { ... }
다음 Next.js 에서 CSS 를 import 해옵니다.
import '@repo/ui/styles.css'
이 import는 실제로 이 전 단계에서 만든 dist/index.css를 import 해옵니다,
이때 Next.js는
Next.js 의 빌드 시스템을 통해 CSS를 번들에 포함합니다.
흐름
Next.js bundler
↓
CSS bundle 생성
↓
브라우저 전달
브라우저가 CSS를 받으면
HTML
↓
CSS 매칭
↓
Style 계산
↓
Layout
↓
Paint
과정을 거쳐 렌더링 됩니다.
Tailwind는 HTML에서 사용된 클래스만 분석해서 CSS를 생성하는 컴파일 기반 CSS 엔진이다.