학습

Tailwind CSS vs shadcn/ui — 차트·블로그 사이트 기준 비교

2026년 3월 5일

Tailwind CSS vs shadcn/ui — 차트·블로그 사이트 기준 비교

핵심 전제: shadcn/ui는 Tailwind CSS를 대체하지 않는다. Tailwind 위에서 동작하는 컴포넌트 레이어다. 비교 대상은 "Tailwind만 쓸 것인가 vs shadcn/ui도 함께 쓸 것인가"다.


1. 개념적 위치

구분Tailwind CSSshadcn/ui
종류Utility-first CSS 프레임워크컴포넌트 컬렉션 (Radix UI + Tailwind 기반)
역할스타일 유틸리티 제공접근성 있는 UI 컴포넌트 제공
설치 방식npm 패키지 의존성소스코드를 직접 복사 (의존성 없음)
커스터마이징클래스 조합으로 자유롭게복사된 코드를 직접 수정
번들 크기CSS 유틸리티만 포함사용한 컴포넌트 JS만 포함

2. 기능 비교

UI 컴포넌트

기능Tailwind만Tailwind + shadcn/ui
버튼, 배지, 카드직접 제작즉시 사용 가능
모달 / 다이얼로그직접 제작 (접근성 직접 구현)Radix 기반 접근성 내장
드롭다운 / 셀렉트직접 제작키보드 탐색 자동 지원
폼 / 인풋직접 스타일링검증 상태 스타일 포함
테마 (다크모드)dark: 클래스 수동 적용CSS 변수 기반 자동 전환

차트

항목Tailwind만shadcn/ui Chart
기반 라이브러리Recharts, Chart.js 직접 연결Recharts 래핑 (shadcn/ui v0.8+)
스타일 통일테마와 별도 관리CSS 변수로 사이트 테마와 자동 연동
다크모드Recharts에 직접 색상 지정자동 전환
반응형Recharts ResponsiveContainer 직접 설정기본 제공
툴팁 커스터마이징컴포넌트 직접 작성<ChartTooltip> 컴포넌트로 간단 처리
지원 차트 유형Recharts 전체 (무제한)Bar, Line, Area, Pie, Radar, Radial

블로그 특화 기능

기능Tailwind만Tailwind + shadcn/ui
글 목록 카드직접 제작<Card> 컴포넌트 조합
태그 / 카테고리직접 제작<Badge> 즉시 활용
목차 (TOC)직접 제작<ScrollArea> + 직접 구성
코드 블록prose 클래스 + 직접 스타일shadcn Typography + 직접 조합
페이지네이션직접 제작<Pagination> 컴포넌트
검색 UI직접 제작<Command> (Cmd+K 검색 팔레트 내장)
관리자 사이드바직접 제작<Sidebar> 컴포넌트 (v0.9+)

3. 개발 속도 vs 자유도

code
Tailwind만 사용          Tailwind + shadcn/ui
─────────────────────    ──────────────────────────
초기 세팅: 빠름          초기 세팅: 약간 더 걸림
컴포넌트 제작: 느림      컴포넌트 제작: 빠름
디자인 자유도: 최대      디자인 자유도: 높음 (코드 소유)
번들 제어: 완전          번들 제어: 사용한 것만 포함
학습 비용: 낮음          학습 비용: Radix API 추가 필요

4. 차트 + 블로그 사이트에 적합한 선택

추천: Tailwind + shadcn/ui 함께 사용

이유:

  1. 차트 테마 통일 — shadcn Chart는 사이트 CSS 변수를 그대로 읽어 다크/라이트 전환이 자동
  2. 블로그 UI 생산성 — Card, Badge, Pagination, Command(검색) 등 블로그에 바로 쓸 컴포넌트가 이미 있음
  3. 코드 소유권 — npm 의존성이 아니라 components/ui/ 폴더에 복사된 코드라 마음대로 수정 가능
  4. 접근성 무료 제공 — Radix UI 기반이라 키보드 탐색, ARIA 속성이 자동 처리됨

Tailwind만 고려할 경우

  • 완전히 독자적인 디자인 시스템을 구축할 때
  • 기존에 만들어둔 컴포넌트 라이브러리가 있을 때
  • 번들 크기를 극단적으로 줄여야 할 때 (shadcn은 이미 가벼우므로 해당 없는 경우 많음)

5. 실제 적용 예시 (블로그 + 차트)

tsx
// shadcn Chart + 블로그 통계 위젯 예시
import { ChartContainer, ChartTooltip } from "@/components/ui/chart"
import { BarChart, Bar, XAxis, YAxis } from "recharts"

const chartConfig = {
  views: { label: "조회수", color: "hsl(var(--chart-1))" },
}

export function PostViewsChart({ data }) {
  return (
    <ChartContainer config={chartConfig} className="h-48">
      <BarChart data={data}>
        <XAxis dataKey="date" />
        <YAxis />
        <ChartTooltip />
        <Bar dataKey="views" fill="var(--color-views)" radius={4} />
      </BarChart>
    </ChartContainer>
  )
}

CSS 변수(--chart-1)가 다크모드에서 자동으로 바뀌므로 별도 색상 분기 불필요.


6. 설치 순서

bash
# 1. Next.js + Tailwind (기존 스택)
npx create-next-app@latest --tailwind

# 2. shadcn/ui 초기화
npx shadcn@latest init

# 3. 필요한 컴포넌트만 추가
npx shadcn@latest add card badge pagination command
npx shadcn@latest add chart   # Recharts 기반 차트

결론

차트와 블로그를 함께 운영하는 사이트라면 shadcn/ui를 추가하지 않을 이유가 없다. Tailwind를 대체하는 게 아니라 위에 얹는 구조이고, 코드는 내 것이 되며, 차트 테마 통일 문제를 가장 깔끔하게 해결해준다.