Tailwind CSS v4, 실전에서 뭐가 달라졌나

Tailwind CSS v4, 실전에서 뭐가 달라졌나

카풀 앱부터 이커머스 헤더, 리뷰 시스템까지—세 가지 프로덕션 사례로 읽는 v4 실전 적용의 진짜 포인트

Tailwind CSS v4 반응형 디자인 디자인 시스템 CSS Variables 다크모드 Container Queries 프론트엔드 아키텍처 Design Token
광고

솔직히 말하면, Tailwind CSS v4가 나왔을 때 처음엔 "또 설정 바꿔야 해?" 하는 반응이 먼저였습니다. tailwind.config.js 없애고 CSS-first 설정으로 전환한다는 게 익숙한 워크플로우를 통째로 흔드는 변화거든요. 그런데 최근 실제 프로덕션에 v4를 적용한 사례들을 들여다보니, 그 변화가 단순한 DX 개선이 아니라 디자인 시스템 설계 철학 자체를 바꾸는 신호라는 걸 느끼게 됩니다.

프로덕션 사례 ①: UTMACH Rides — 모바일 퍼스트 PWA에서의 v4

dev.to에 공개된 UTMACH Rides 프로젝트는 에콰도르 UTMACH 대학 학생들을 위한 카풀 앱입니다. Next.js 16 App Router + React 19 + Tailwind CSS v4 + Supabase라는, 지금 시점에서 꽤 공격적인 스택을 선택했어요. 흥미로운 건 이게 토이 프로젝트가 아니라는 점입니다. 14개 지역, 5개 캠퍼스를 커버하는 실제 커뮤니티 문제를 풀기 위해 만들어졌고, 보안 이슈까지 고려해 기관 이메일(@utmachala.edu.ec)만 허용하는 인증 게이트를 설계했습니다.

이 프로젝트에서 주목할 부분은 mobile-first PWA 설계와 v4의 조합입니다. Glassmorphism UI를 랜딩에 적용하고, 하단 네비게이션(BottomNav)을 Auth 레이어와 분리해 라우트 그룹으로 관리한 구조는 v4의 CSS 레이어(@layer) 시스템과 맞물리면 컴포넌트 단위 스타일 격리가 훨씬 깔끔해집니다. 기존 v3에서 @apply를 남발하다 보면 생기는 specificity 지옥을 @layer로 정리할 수 있다는 게 실전에서 체감되는 포인트예요. 그리고 React 19 + Turbopack 조합이라면 HMR 속도 자체가 달라지니까, v4의 빌드 성능 개선과 시너지가 납니다.

프로덕션 사례 ②: Triple-Tier Responsive Header — v4 반응형 설계의 현실

CodeBar Library에서 공개한 Triple-Tier Responsive E-commerce Header는 Tailwind CSS v4 + Vanilla JavaScript로만 만든 제로 디펜던시 컴포넌트입니다. 3단 구조(유틸리티 바 / 네비게이션 허브 / 검색바)를 모든 브레이크포인트에서 자연스럽게 접히도록 만들었어요.

사용자 입장에서 헤더는 가장 먼저 눈에 들어오는 UI인데, 3단 구조를 모바일에서 햄버거 메뉴 하나로 수렴시키는 건 생각보다 까다로운 작업입니다. Figma에서 볼 때는 괜찮았는데 실제로 구현하면 tier 간 transition 타이밍이 어긋나거나, 카테고리 드롭다운이 검색 인풋을 가리는 z-index 이슈가 터지거든요. 이 컴포넌트가 "smooth-transition hamburger menu, no jarring jumps"를 강조하는 것도 그 이유겠죠.

v4 관점에서 중요한 건 브레이크포인트 전략의 변화입니다. v4는 sm:, md: 같은 고정 브레이크포인트 외에도 Container Queries 지원이 네이티브로 강화됐습니다. 3단 헤더처럼 컨텍스트에 따라 컴포넌트 자체가 레이아웃을 결정해야 하는 경우, 뷰포트 기반 미디어 쿼리보다 @container 기반이 더 적절할 수 있어요. "이거 왜 viewport 기준으로 했을까?" 싶은 헤더 반응형 코드를 Container Queries로 바꾸면 재사용성이 확 올라갑니다.

프로덕션 사례 ③: 리뷰 시스템 — CSS 변수로 다크모드를 제대로 다루는 법

DotSuite v0.5.0의 리뷰 시스템 구축 사례(dev.to)는 CSS 아키텍처 관점에서 가장 눈이 가는 케이스입니다. 핵심은 하드코딩된 Tailwind 색상 클래스를 CSS 변수 시스템으로 전면 교체한 것입니다. text-yellow-400 같은 클래스를 전역 globals.css의 CSS Variables로 리팩터링했고, 덕분에 다크모드 전환이 React 컴포넌트 내부의 조건 분기 없이 CSS 레벨에서 완결됩니다.

이게 왜 중요하냐면, Tailwind v4에서 Design Token과 CSS Variables 통합이 훨씬 자연스러워졌기 때문입니다. v3에서는 tailwind.config.jstheme.extend에 토큰을 정의하고, CSS Variables와 이중으로 관리해야 하는 번거로움이 있었어요. v4에서는 @theme 블록 안에서 CSS Variables를 직접 토큰으로 선언할 수 있어서, 디자인 시스템과 코드 사이의 싱크가 훨씬 가까워집니다. Figma Dev Mode에서 뽑은 토큰 값을 globals.css 하나에서 관리하고, 라이트/다크 모드를 :root[data-theme='dark'] 셀렉터로 분기하면 컴포넌트는 그냥 토큰만 참조하면 됩니다. 조건 분기 없는 다크모드, 이게 진짜 디자인 시스템의 모습이에요.

세 사례가 공통으로 말하는 것

세 프로젝트를 관통하는 공통점이 있습니다. "설정 파일이 아니라 CSS 자체가 진실의 원천(source of truth)" 이 되는 방향으로 이동하고 있다는 것입니다. v4는 tailwind.config.js를 걷어내고 CSS 파일 안에서 모든 걸 선언하게 함으로써, 디자인 토큰 → CSS Variables → 유틸리티 클래스의 파이프라인을 단일 레이어로 만들려 합니다.

물론 러닝 커브는 있습니다. 기존 v3 기반 프로젝트를 마이그레이션하면 @apply 동작 방식 차이, PostCSS 설정 변경, IDE 자동완성 플러그인 업데이트 같은 것들이 한꺼번에 따라오거든요. "이거 bundle size에 영향 없나?" 하는 걱정도 있는데, v4는 엔진을 Rust(Lightning CSS)로 교체해 빌드 속도와 출력 CSS 사이즈 모두 개선됐습니다. Lighthouse 점수에도 긍정적인 영향을 줄 수 있어요.

전망: Tailwind v4가 바꾸는 프론트엔드 협업 구조

앞으로가 더 흥미롭습니다. Figma Dev Mode에서 디자인 토큰을 CSS Variables로 export하고, 그걸 v4의 @theme 블록에 직접 붙여넣는 워크플로우가 현실화되면, 디자이너-개발자 간 핸드오프 비용이 눈에 띄게 줄어들 수 있습니다. "Figma에서 볼 때는 괜찮았는데 실제 구현하면 달라져요"라는 말이 점점 줄어드는 세상, 그게 v4가 목표하는 방향이라고 생각합니다.

지금 당장 v4로 마이그레이션하지 않더라도, 신규 프로젝트라면 v4로 시작하는 게 맞습니다. 세 가지 실전 사례가 증명하듯, 이미 프로덕션에서 충분히 돌아가고 있거든요.

출처

더 많은 AI 트렌드를 Seedora 앱에서 확인하세요