Ari.dev

2026.06 - 재직중

사내 디자인 시스템

빈 레포에서 시작한 사내 운영 시스템 공통 UI 디자인 시스템. 디자인 토큰·컴포넌트·번들 파이프라인과 소비 앱 통합 담당. 현재 컴포넌트 37종.

역할
디자인 토큰·컴포넌트·번들 파이프라인 담당
  • React
  • TypeScript
  • Tailwind CSS
  • cva
  • tsup
  • Storybook
  • size-limit

문제

컴포넌트를 소비하는 쪽이 쉽게 쓸 수 있어야 하고 번들이 무분별하게 커지면 안 되는데, 기존 CI 번들 게이트 수치가 실제 번들 크기를 반영하는지는 한 번도 검증된 적이 없었다.

소비 앱에 실제로 붙이자 두 번째 문제가 드러났다. 예약 앱에 도입한 직후 lg: 반응형이 무력화돼 운영에서 롤백해야 했다.

해결

  • size-limit 게이트가 컴포넌트 스텁 파일 하나만 재고, 그 파일이 끌고 들어오는 의존 청크를 집계하지 못하던 측정 범위 결함을 발견
  • preset-small-lib으로 측정 방식을 교체해 게이트 8개를 실측 기준으로 재설계 (스텁만 재던 값 대비 의존성 포함 값은 Button 기준 약 66배)
  • 팀에 공유됐던 번들 수치가 실제와 무관함을 밝히고, 근거 없던 본인의 이전 주장도 함께 철회
  • tsup으로 CSS를 사전 컴파일해 동봉, 소비 측은 import 2줄만으로 사용
  • base/semantic 2계층 토큰 구조로 컴포넌트 8종(Button, Input, Dropdown, Badge, Modal, Toast, Tooltip, Popover)에서 시작해, 예약 페이지·백오피스 컴포넌트를 더해 현재 37종(0.17.0)
  • DS의 컴파일된 CSS가 앱과 같은 유틸리티 레이어에 bare 유틸리티를 담고 있어, 빌드 병합 후 .flex가 lg:flex 미디어 블록 뒤에 놓이던 캐스케이드 충돌을 산출 CSS에서 확인 → 앱 Tailwind가 DS 클래스를 직접 생성하는 @source 방식으로 전환하고, 우회용 ! 오버라이드 116건 제거 후 운영 재도입
  • 스토리북 CI가 develop 전용이라 MR에 파이프라인이 생기지 않아 머지가 막히던 문제를 rules: 기반으로 전환, 브라우저 캐시 키를 lockfile에서 분리해 공유 러너 디스크 부족 해소
  • 컴포넌트 생성 하네스 PoC를 설계한 뒤 역할을 분담해 통합

효과

  • 측정 근거 없는 주장을 스스로 검증·정정해 팀 신뢰도 확보
  • 소비 앱 운영에서 반응형 회귀 없이 DS 재도입, lg 브레이크포인트를 앱 기준 하나로 통일
  • Storybook play + axe로 접근성 위반 자동 검출

관련 글