본문 바로가기

TIL

Tailwind CSS, CSS-in-JS, Styled Components 비교: 왜 Tailwind를 선택했는지?

이번 프로젝트를 진행하면서 Tailwind CSS를 사용했습니다. 이를 선택한 이유와 다른 스타일 라이브러리와의 비교를 통해 설명드리겠습니다.

1. 스타일링 접근 방식

  • Tailwind CSS: 유틸리티 클래스 기반의 프레임워크로, 미리 정의된 클래스들을 HTML 요소에 적용하여 스타일링합니다. CSS 파일을 작성할 필요 없이, 필요한 스타일을 HTML에서 바로 적용할 수 있습니다.
  • CSS-in-JS: 스타일을 자바스크립트 파일 내에서 직접 작성하고 관리할 수 있게 해주는 접근 방식입니다. 대표적으로 Emotion, Styled Components 등이 있으며, 스타일을 컴포넌트 내부에 작성해 스타일링과 자바스크립트를 결합할 수 있습니다.
  • Styled Components: CSS-in-JS의 한 종류로, 컴포넌트 기반의 스타일링을 지원합니다. 자바스크립트 내에서 스타일을 작성하며, styled.div`` 같은 태그를 사용해 스타일을 적용합니다.

비교: Tailwind는 스타일링과 자바스크립트를 분리하여 관리할 수 있는 반면, CSS-in-JS와 Styled Components는 스타일과 자바스크립트를 결합하여 컴포넌트 단위로 관리할 수 있습니다. Tailwind는 별도의 CSS 파일 없이 스타일링이 가능해 빠른 개발이 가능하며, CSS-in-JS와 Styled Components는 컴포넌트 단위로 스타일을 작성하는 데 강점이 있습니다.

2. 개발 속도와 생산성

  • Tailwind CSS: 유틸리티 클래스들을 통해 빠르게 스타일을 적용할 수 있으며, 코드 작성 속도가 빠릅니다. 복잡한 스타일링이 필요하지 않은 경우 특히 유리합니다.
  • CSS-in-JS: 스타일링과 자바스크립트를 결합해 관리할 수 있어, 컴포넌트 단위로 작업할 때 생산성이 높습니다. 하지만 스타일을 자바스크립트 내에서 작성해야 하므로, 코드가 복잡해질 수 있습니다.
  • Styled Components: CSS-in-JS의 특징을 가져가면서도, CSS 문법에 익숙한 개발자에게 익숙한 스타일링 방식을 제공합니다. 다만, Tailwind와 비교했을 때 스타일을 적용하는 속도는 다소 느릴 수 있습니다.

비교: Tailwind는 빠르게 스타일을 적용할 수 있는 반면, CSS-in-JS와 Styled Components는 컴포넌트별로 스타일을 세밀하게 관리할 수 있는 장점이 있습니다. 하지만 이로 인해 코드가 길어지고 복잡해질 수 있습니다. Tailwind는 일관된 유틸리티 클래스 사용으로 코드가 간결해지며 생산성이 높아집니다.

3. 성능과 번들 크기

  • Tailwind CSS: PurgeCSS와 같은 도구를 사용해 사용하지 않는 CSS를 제거하여 번들 크기를 최적화할 수 있습니다. 모든 스타일이 미리 컴파일되어 있기 때문에 런타임 성능이 뛰어납니다.
  • CSS-in-JS: 스타일이 자바스크립트 코드에 포함되므로, 런타임에 스타일이 생성되며, 이에 따라 번들 크기가 커질 수 있고 성능에 영향을 미칠 수 있습니다.
  • Styled Components: CSS-in-JS와 유사하게 스타일이 런타임에 생성됩니다. 런타임 성능이 Tailwind보다 낮을 수 있으며, 특히 큰 프로젝트에서 번들 크기가 커질 가능성이 있습니다.

비교: Tailwind는 미리 컴파일된 스타일을 사용해 런타임 성능과 번들 크기에서 우위를 점합니다. 반면, CSS-in-JS와 Styled Components는 런타임에 스타일을 생성하기 때문에 번들 크기가 커질 수 있고 성능에 영향을 줄 수 있습니다.

4. 유지보수와 협업

  • Tailwind CSS: 유틸리티 클래스 기반의 일관된 스타일링을 제공해, 코드베이스가 커져도 스타일의 일관성을 유지하기 쉽습니다. 팀이 동일한 유틸리티 클래스를 사용해 협업할 수 있어 코드 유지보수성이 높습니다.
  • CSS-in-JS: 컴포넌트 단위로 스타일을 관리하므로, 특정 컴포넌트의 스타일을 수정할 때 다른 컴포넌트에 영향을 주지 않아 유지보수에 유리합니다. 하지만, 스타일링이 분산되면 전체적인 스타일 일관성을 유지하기 어려울 수 있습니다.
  • Styled Components: CSS-in-JS와 유사하게 컴포넌트별로 스타일을 작성하여 관리합니다. CSS 문법에 익숙한 개발자들이 쉽게 접근할 수 있는 장점이 있지만, Tailwind처럼 일관된 클래스 사용으로 팀 간 협업하는 것은 아닙니다.

비교: Tailwind는 일관된 스타일링이 가능해 유지보수성과 협업에서 강점을 보입니다. CSS-in-JS와 Styled Components는 컴포넌트별로 스타일을 관리할 수 있어 유지보수가 편리하지만, 스타일 일관성을 유지하는 데는 다소 어려움이 있을 수 있습니다.

결론

Tailwind CSS는 빠른 개발 속도, 뛰어난 성능 최적화, 그리고 유지보수성을 강조한 프로젝트에서 특히 유리합니다. CSS-in-JSStyled Components는 컴포넌트별로 세밀한 스타일링이 필요한 경우에 적합하지만, 런타임 성능이나 번들 크기에서 Tailwind보다 낮은 평가를 받을 수 있습니다. 프로젝트의 특성과 요구사항에 따라 이 세 가지 도구 중 가장 적합한 것을 선택하는 것이 중요합니다.