한 줄 정의

웹 기술 표준인 Vanilla CSS의 발전상(CSS 변수, 중첩, container queries 등)과 프레임워크 의존성(Tailwind CSS, Bootstrap 등) 사이에서 제품 성능, 유지 보수 편의성 및 오픈소스 지속 가능성을 극대화하기 위해 스타일링 구현 방식을 결정하는 의사결정 체계다.

핵심 요지

  1. 프레임워크 종속성 피로: Bootstrap, Material UI, Tailwind CSS 등으로 이어지는 스타일링 프레임워크 전환 유행은 프론트엔드 아키텍처의 복잡도를 증가시킨다.
  2. Vanilla CSS의 현대화: 과거 CSS 전처리기(Sass/Less)나 유틸리티 클래스가 제공하던 편의 기능들(중첩, 변수, 격리 등)이 현대 W3C 표준 CSS에 대거 탑재되면서 프레임워크 도입의 실익이 감소하고 있다.
  3. 독자적 자재(자체 빌드 vs 기성품 구매) 평가: 스타일링 프레임워크는 개발 속도를 빠르게 하는 기성품이지만, 장기적인 디자인 시스템의 유연성과 기계 가독성 확보를 위해서는 표준 Vanilla CSS의 활용 능력이 펀더멘탈로 중요시된다.
  • 인라인 우선 조립 패러다임: 1픽셀 세부 튜닝을 할 때 LLM에게 매번 CSS 규칙 변경을 구걸하지 않고, Sublime Text에서 인라인 스타일로 빠르게 직접 수정한 후, 최종 정돈 단계에서 AI에게 스타일시트 분리를 지시한다.
  • 그리드 및 rem 변환: 레이아웃 설계의 블루프린트 그리드 표준으로 64 x 32 x 12 구조를 일관되게 채택하고, 글자 크기 등은 소수점 rem 값으로 환산하여 브라우저 스케일링 성능을 활용한다.

상세

1. 스타일링 프레임워크의 역사적 계보와 모순

  • Bootstrap / Foundation (2010년대초): 미리 스타일링된 컴포넌트 클래스를 제공해 일관된 레이아웃을 빠르게 찍어내었으나, 모든 사이트의 시각 디자인이 획일화되는 결함이 있었다.
  • Tailwind CSS (2020년대): 컴포넌트가 아닌 미세 유틸리티 클래스(Utility-first) 단위로 조립하여 유연성을 높였다. 그러나 HTML 마크다운이 수많은 스타일링 클래스명으로 더러워지는 인지 부하(markup bloat)와, 빌드 시 불필요한 클래스를 파지(Purge)해야 하는 복잡도가 생겨났다.
  • 공통된 한계: 기술이 변경될 때마다 전체 소스코드를 대대적으로 리팩토링해야 하며, 외부 프레임워크 라이선스 유지 보수 상태에 종속된다.

2. 현대 표준 Vanilla CSS의 경쟁력

웹 API 표준의 빠른 발전으로 인해 스타일 프레임워크가 독점하던 기능들의 대안이 마련되었다.

  • CSS Custom Properties (변수): 실시간 런타임 토큰 제어를 가능하게 하여 프레임워크의 변수 테마 설정을 표준 스펙으로 대체한다.
  • CSS Nesting (중첩): Sass 등의 도구 없이 표준 CSS 파일 내에서 계층화된 규칙 작성을 가능케 한다.
  • Container Queries & :has() 선택자: 컴포넌트 단위의 완전 격리식 스타일링 및 동적 부모-자식 요소 반응형 디자인을 CSS 네이티브 수준에서 구현한다.

3. 스타일링 도구 선택 시의 의사결정 프레임

개발팀은 Build vs Buy 관점에서 다음 3가지 기준으로 스타일링 구현 방식을 평가해야 한다.

  1. 디자인 시스템의 독창성: 완전히 커스텀화된 프리미엄 UI가 비즈니스 가치라면, 프레임워크의 추상화 계층을 우회하고 표준 Vanilla CSS를 사용하는 것이 장기적인 유지 보수 유연성을 준다.
  2. 기계 가독성(Machine Readability): AI 에이전트가 코드를 읽고 컴포넌트를 조립할 때 복잡한 테일윈드 유틸리티 문자열보다 의미가 명확한 표준 CSS 변수와 클래스 구조가 환각을 방지하고 컨텍스트 효율을 높인다.
  3. 수명 주기: 프레임워크 라이선스 위기나 커뮤니티 쇠퇴 시에도 코드베이스를 안전하게 보존하려면 표준 CSS와의 거리를 좁혀 설계해야 한다.

4. 에이전시 실무 스타일링 조율 워크플로우 (Squareblack 사례)

  • 인라인 스타일링 기반 신속 반복: AI 에이전트와의 협업 시 스타일 코드를 즉각 눈으로 확인하며 픽셀 퍼펙션을 챙기기 위해 초기 코드는 HTML 인라인 스타일로 기재한다. 이후 세부 완성도 조율이 모두 끝나면 스타일시트(CSS)와 자바스크립트를 클래스명 단위로 일괄 분리(Refactoring)해달라고 AI에게 지시해 파일 구조를 깨끗하게 정돈한다.
  • 그리드 표준과 가독성 제어: 래퍼(wrapper), 내비게이션, H1 구조 설계 시 64 x 32 x 12 그리드 스펙을 블루프린트로 삼으며, 모바일 가독성 대응(breakpoint)은 AI에 일임하지 않고 디자이너가 브라우저 상에서 줄바꿈 태그(br) 위치를 직접 지정하여 타이포그래피 계층을 완성한다.

예시

  • Tailwind CSS vs Vanilla CSS (변수 조립):
    • Tailwind CSS:
      <div class="flex items-center justify-between p-4 bg-slate-100 dark:bg-slate-800 rounded-lg shadow-sm">
        <span class="text-sm font-semibold text-slate-900 dark:text-white">사용자 프로필</span>
      </div>
    • Vanilla CSS (Modern Standard):
      /* component.css */
      .profile-card {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: var(--spacing-4);
        background-color: var(--color-bg-secondary);
        border-radius: var(--radius-lg);
        box-shadow: var(--shadow-sm);
      }
      Vanilla CSS를 사용하면 HTML 구조가 에이전트에게 직관적으로 읽히며, 테마 변경 시에도 CSS 변수 레이어만 오버라이드하면 되므로 유지 보수가 용이하다.

예시

  • 인라인 스타일 조립 및 CSS 분리: HTML 요소 내에 style="padding: 13px; font-size: 1.15rem;" 형태로 컴포넌트 간격을 디자이너가 Sublime Text를 통해 수동 미세 조정한 뒤, 최종 배포 단계에서 Claude에게 지시하여 스타일 속성을 component.css로 분리하고 소수점 rem 값으로 자동 픽스하는 워크플로우.

충돌

  • 유틸리티 클래스 편의성 vs 마크다운 복잡성:
    • 프레임워크 진영: CSS 파일을 따로 열지 않고 HTML 내에서 모든 스타일을 즉시 파악해 빠르게 작성할 수 있는 유틸리티 스타일링이 압도적으로 빠르다.
    • 표준 CSS 진영: 유틸리티 코드가 길어질수록 HTML의 기계 가독성이 깨지고 AI 에이전트가 마크다운 요소 구조를 혼동하기 쉬우며, 프레임워크 비즈니스 붕괴나 라이선스 종속 위험을 흡수하기 어렵다.

관련 노트