TechFeedTechFeed
Frontend

테일윈드 v4, Next.js, CSS 변수, 플러그인 | 기존 프로젝트를 v4로 올릴 때 어디서 막히나?

Tailwind CSS v4의 핵심 변화인 tailwind.config.js 삭제·@theme 블록·CSS 변수 기반 테마 정의를 Next.js 프로젝트 기준으로 정리한다. 업그레이드 도구 실행 순서, 플러그인 호환 문제, 임의 값 문법 변화, v4 전환 여부 판단 기준까지 포함.

by

Tailwind CSS v4가 2025년 초에 정식 릴리스됐습니다. v3와 설정 방식이 많이 달라서 기존 프로젝트를 그냥 버전만 올리면 빌드가 깨집니다. 설정 파일이 tailwind.config.js에서 CSS 변수 기반으로 바뀌었고, @tailwind 지시어도 사라졌습니다. 제가 Next.js 프로젝트 세 개를 v4로 올리면서 막힌 자리를 정리합니다.


Tailwind v4의 빌드 속도가 v3보다 10배 빠르다는 얘기는 공식 문서에서 말하는 수치입니다. 실제로 개발 서버 HMR 속도가 올라가는 건 체감됩니다. 단, 마이그레이션 비용이 있습니다. 새로 시작하는 프로젝트라면 v4부터 시작하는 게 낫고, 기존 프로젝트는 마이그레이션 공식 도구를 먼저 돌려보는 게 순서입니다.


v3에서 v4로 바뀐 것들

바뀐 것 중 개발자가 직접 손대야 하는 부분만 추립니다.


항목v3v4
설정 파일tailwind.config.jsCSS 파일 안의 @theme 블록
진입점 지시어@tailwind base; utilities; components;@import "tailwindcss";
커스텀 색상config의 theme.extend.colorsCSS 변수 --color-brand: … in @theme
플러그인config에 plugins: [require(…)]@plugin "…" 지시어
PostCSS 설정postcss.config.jstailwindcss 추가자동 감지 (수동 설정 불필요)
content 경로config의 content: ["./pages/**/*"]자동 감지 (명시 필요 없음, 일부 예외)

가장 큰 변화는 JavaScript 설정 파일이 CSS 파일로 통합됐다는 것입니다. tailwind.config.js를 완전히 삭제하고 CSS 파일 안에서 테마를 정의합니다. 기존 v3 프로젝트에는 이게 가장 큰 작업입니다.


Next.js 프로젝트에 Tailwind v4 설치하는 순서

신규 프로젝트는 Next.js 15 이상에서 create-next-app이 Tailwind v4 옵션을 제공합니다. 기존 프로젝트는 아래 순서로 진행합니다.


기존 v3 프로젝트를 v4로 올리는 명령
# 1. 공식 업그레이드 도구 실행 (파일 자동 수정) npx @tailwindcss/upgrade # 2. 도구가 안 되면 수동 설치 npm install tailwindcss@next @tailwindcss/postcss@next # 또는 pnpm pnpm add tailwindcss@next @tailwindcss/postcss@next # 3. PostCSS 플러그인 교체 # postcss.config.js 또는 postcss.config.mjs 확인 # 'tailwindcss' → '@tailwindcss/postcss' 로 교체

@tailwindcss/upgrade를 먼저 실행하면 대부분의 설정을 자동으로 옮겨줍니다. 하지만 커스텀 플러그인, 사용자 정의 클래스가 많을수록 수동으로 손봐야 할 부분이 늘어납니다.


v4 방식 CSS 진입점 (globals.css)
/* v3 방식 — 삭제 */ /* @tailwind base; */ /* @tailwind components; */ /* @tailwind utilities; */ /* v4 방식 — 이것만 */ @import "tailwindcss"; /* 커스텀 테마를 @theme 블록에 */ @theme { --color-brand: #0F4C81; --color-brand-light: #38BDF8; --font-sans: "Pretendard", sans-serif; --spacing-section: 4rem; } /* 커스텀 클래스는 @layer utilities */ @layer utilities { .prose-kr { word-break: keep-all; overflow-wrap: break-word; } }
Tailwind CSS v4 설정 파일 구조와 CSS 변수 테마 블록
v4는 CSS 파일 안에서 테마를 정의한다. tailwind.config.js는 삭제한다

업그레이드 후 막히는 패턴 3가지

업그레이드 도구를 돌리고 나서도 빌드가 깨지는 경우가 있습니다. 제가 직접 만난 것들입니다.


⚠️ v3 플러그인 호환성 | @tailwindcss/forms, @tailwindcss/typography, @tailwindcss/aspect-ratio는 v4용 버전을 따로 설치해야 합니다. 기존 npm 패키지를 그대로 두면 충돌이 납니다. @plugin "@tailwindcss/typography" 지시어로 CSS에서 부릅니다.


⚠️ 임의 값(arbitrary value) 문법 일부 변경 | v3의 text-[#333]는 그대로지만, bg-[url('/img.png')]처럼 CSS 함수가 포함된 임의 값은 이스케이프 방식이 바뀌었습니다. 빌드 후 화면을 직접 확인해야 합니다.


⚠️ content 경로 자동 감지 예외 | 기본 감지는 .js, .ts, .jsx, .tsx, .html을 읽습니다. .mdx, .vue, 커스텀 확장자를 쓰면 @source 지시어로 직접 지정해야 합니다.


플러그인과 사용자 정의 토큰 마이그레이션

v3에서 tailwind.config.jstheme.extend에 넣던 커스텀 토큰은 v4에서 @theme 블록으로 옮깁니다.


v3 theme.extend → v4 @theme 변환 예시
/* v3 tailwind.config.js (삭제) */ // module.exports = { // theme: { // extend: { // colors: { // brand: { DEFAULT: '#0F4C81', light: '#38BDF8' }, // }, // fontFamily: { // sans: ['Pretendard', 'sans-serif'], // }, // }, // }, // } /* v4 globals.css (@theme 블록) */ @theme { --color-brand: #0F4C81; --color-brand-light: #38BDF8; --font-sans: "Pretendard", sans-serif; } /* 클래스 사용 방법은 동일 */ /* bg-brand, text-brand-light, font-sans */

변수 이름 규칙이 있습니다. 색상은 --color-{이름}, 폰트는 --font-{이름}, 간격은 --spacing-{이름}입니다. 이 규칙을 지키면 기존 클래스 이름을 그대로 씁니다. bg-brand, text-brand-light가 그대로 동작합니다.


더 자세한 마이그레이션 가이드는 Tailwind CSS 공식 업그레이드 가이드를 참조합니다.


Tailwind CSS v4 @theme 블록과 CSS 변수로 정의된 색상 팔레트
@theme 블록에 정의한 CSS 변수는 기존 클래스 이름 그대로 사용된다

v4를 지금 올릴지 말지 판단 기준

v4가 v3보다 빠르고 설정이 단순해진 건 사실입니다. 하지만 올릴 이유보다 올리지 말 이유가 더 많은 상황이 있습니다.


상황권장
신규 프로젝트v4로 시작 — 설정 단순, 빠름
커스텀 플러그인이 없는 v3 프로젝트업그레이드 도구 실행 → 테스트 후 올리기
커스텀 플러그인이 많은 v3 프로젝트각 플러그인 v4 호환 여부 확인 후 결정
팀 프로젝트, 릴리스 앞둔 시점보류 — 마이그레이션 후 테스트 시간 필요

저는 신규 프로젝트 두 개는 v4로 시작했고, 기존 세 개는 v3 유지 중입니다. 기존 프로젝트는 마이그레이션 작업이 하루 정도 걸렸고, 플러그인 호환 문제로 예상보다 시간이 더 걸렸습니다.


자주 묻는 것들

v4에서 tailwind.config.js를 완전히 삭제해야 하나?

꼭 삭제하지 않아도 됩니다. v4는 tailwind.config.js가 있으면 일부 설정을 읽습니다. 하지만 v4 방식(CSS 변수 + @theme)을 쓰는 게 권장이고, 장기적으로 config 파일을 삭제하는 방향이 공식 권고입니다.


Tailwind v4와 shadcn/ui가 같이 되나?

2026년 8월 기준으로 shadcn/ui가 Tailwind v4를 지원합니다. 단, 일부 컴포넌트나 테마 설정에서 수동 조정이 필요할 수 있습니다. shadcn 공식 문서에서 v4 설치 가이드를 별도로 제공합니다.


@tailwindcss/typography v4에서 쓰는 방법은?

npm install @tailwindcss/typography로 설치 후 CSS에 @plugin "@tailwindcss/typography";를 추가합니다. v3처럼 config에 플러그인 배열을 넣는 방식은 v4에서 쓰지 않습니다.


빌드 속도가 정말 10배 빠른가?

공식 문서의 "최대 10배" 수치는 대형 프로젝트 기준입니다. 작은 프로젝트에서는 차이가 덜 납니다. 실제로 제가 테스트한 Next.js 프로젝트에서는 HMR 속도가 체감 수준으로 빨라졌고, 전체 빌드는 2~4배 빠른 정도였습니다.


기존 v3 프로젝트에서 일부 페이지만 v4 스타일을 쓸 수 있나?

실용적이지 않습니다. Tailwind는 전체 프로젝트에 일괄 적용됩니다. v3와 v4를 한 프로젝트에 혼용하는 건 설정 충돌이 납니다. 마이그레이션은 전체 프로젝트 단위로 진행해야 합니다.


테일윈드Tailwind CSSv4CSS 변수Next.js프론트엔드업그레이드마이그레이션개발자플러그인@theme

함께 보면 좋은 문제 해결

EXPLORE / Frontend

이어서 읽어보기

전체 토픽 둘러보기