피드로 돌아가기
Dev.toFrontend
원문 읽기
CSS-in-JS 제거 및 CSS Custom Properties 도입으로 테넌트별 테마 번들 340KB 절감
Building a Custom Tailwind CSS Theme System for Multi-Tenant Branding: Dynamic Colors Without CSS-in-JS
AI 요약
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 변수를 통한 스타일 공유 가능성 분석