피드로 돌아가기
Building a Custom Tailwind CSS Theme System for Multi-Tenant Branding: Dynamic Colors Without CSS-in-JS
Dev.toDev.to
Frontend

CSS-in-JS 제거 및 CSS Custom Properties 도입으로 테넌트별 테마 번들 340KB 절감

Building a Custom Tailwind CSS Theme System for Multi-Tenant Branding: Dynamic Colors Without CSS-in-JS

Ugur Aslim2026년 6월 3일7intermediate

Context

Multi-Tenant SaaS 환경에서 CSS-in-JS 기반 테마 시스템을 운영하며 테넌트당 340KB의 번들 증가 및 런타임 오버헤드 발생. Dark Mode 전환 시 발생하는 Flash of Unstyled Content(FOUC) 및 복잡한 번들 분리 전략으로 인한 배포 효율성 저하 직면.

Technical Solution

  • Tailwind CSS의 theme configuration과 CSS Custom Properties를 결합한 정적-동적 하이브리드 구조 설계
  • Tailwind Config 내 컬러 값을 rgb(var(--variable) / <alpha-value>) 형태로 정의하여 JS 런타임 없이 투명도 조절 기능 유지
  • Backend API에서 테넌트별 설정값을 RGB 형태로 전송하고 이를 :root 레벨의 CSS 변수로 주입하는 Runtime Injection 방식 채택
  • CSS 변수 기반의 설계로 Astro 정적 페이지와 React Dynamic Island 간의 스타일 동기화 구현
  • @media (prefers-color-scheme: dark) 및 CSS 변수 덮어쓰기를 통한 제로 런타임 비용의 Dark Mode 전환 로직 구축

1. Tailwind CSS 사용 시 테마 변수를 RGB 숫자로 정의하여 opacity modifier(/50) 호환성 확보했는지 확인

2. 테넌트별 테마 설정을 DB에서 관리하고 API를 통해 :root style property로 주입하는 흐름 검토

3. 정적 생성(SSG)과 클라이언트 렌더링(CSR)이 혼재된 환경에서 CSS 변수를 통한 스타일 공유 가능성 분석

원문 읽기