Tailwind CSS 도입 후 3개월 회고

도입 배경

사내 대시보드 프로젝트를 진행하면서 CSS 관리가 점점 복잡해지고 있었다. Styled-components를 쓰고 있었지만, 컴포넌트마다 스타일 코드가 길어지고 네이밍에 시간을 많이 쓰게 됐다.

재택근무로 전환되면서 새 프로젝트 셋업 기회가 생겼고, Tailwind CSS 2.0을 도입해보기로 했다.

적응 과정

처음엔 HTML이 지저분해 보였다.

// 이전
<Button primary large>확인</Button>

// Tailwind 도입 후
<button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
  확인
</button>

하지만 2주 정도 쓰다 보니 장점이 명확했다.

  • CSS 파일을 왔다갔다 할 필요 없음
  • 클래스명 고민 시간 제로
  • 디자인 시스템이 자연스럽게 통일됨 (spacing, color 등)

실전 팁

1. @apply로 반복 줄이기

자주 쓰는 조합은 커스텀 클래스로 만들었다.

@layer components {
  .btn-primary {
    @apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded;
  }
}

2. PurgeCSS 설정 필수

프로덕션 빌드 시 사용하지 않는 클래스를 제거해야 한다. 설정 안 하면 번들 크기가 엄청나게 커진다.

// tailwind.config.js
module.exports = {
  purge: ['./src/**/*.{js,jsx,ts,tsx}'],
  // ...
}

3. 조건부 클래스는 clsx 활용

import clsx from 'clsx';

const Button = ({ primary, disabled }) => (
  <button className={clsx(
    'py-2 px-4 rounded',
    primary ? 'bg-blue-500' : 'bg-gray-500',
    disabled && 'opacity-50 cursor-not-allowed'
  )}>
    버튼
  </button>
);

아쉬운 점

  • 클래스명이 너무 길어지는 건 여전히 거슬림
  • 팀원들 초기 학습 곡선 존재
  • IDE 자동완성 플러그인 필수

그래도 전체적으로 만족스럽다. 다음 프로젝트에도 계속 쓸 예정이다.