pile·
프론트엔드·쏘카쏘카·

쏘카 디자인 시스템 2.0 개발기 2편: 기술로 굴리기(웹)

쏘카 디자인 시스템 2.0의 웹 기술 구현 편으로, rollup tree-shaking 최적화와 llms.txt 도입을 중심으로 라이브러리 번들링과 AI 협업 전략을 다룬다. 1편(시스템편)에서 정의한 컴포넌트 설계를 실제 npm 패키지로 배포하는 과정의 기술 선택과 함정을 상세히 기술했다.

핵심 포인트
  • Rollup + `sideEffects: false` 선언으로 소비자 앱의 번들에서 사용하지 않는 컴포넌트가 자동 제거되도록 tree-shaking 파이프라인 설계
  • Named export 강제: default export는 번들러가 re-export 추적을 포기해 tree-shaking 무력화 위험
  • `llms.txt` 파일을 디자인 시스템 패키지에 포함해 AI 코드 어시스턴트가 컴포넌트 사용법을 정확히 이해하도록 지원
  • CSS-in-JS 대신 CSS Modules + CSS 변수(토큰)를 선택해 서버 컴포넌트 호환성과 번들 크기 모두 확보
  • Peer dependency로 React를 선언해 소비자 앱과 React 버전 충돌 방지
상세 정리
  • 빌드 도구 선택: Vite Library Mode vs Rollup 직접 구성 비교 후 세밀한 청크 제어를 위해 Rollup 선택
  • Entry point 전략: `index.ts` 단일 진입 대신 컴포넌트별 개별 entry 파일로 코드 분할 극대화
  • `sideEffects: false` 함정: CSS import가 있는 파일을 `false`로 선언하면 스타일이 tree-shaking되는 문제 — `"sideEffects": ["*.css"]` 패턴으로 해결
  • TypeScript declaration 파일 생성: `tsc --emitDeclarationOnly` + rollup-plugin-dts 조합
  • Storybook 연동: 빌드 결과물 대신 소스를 직접 참조하도록 별도 tsconfig 구성
  • llms.txt 작성 원칙: 컴포넌트명, Props 타입, 사용 예시 코드를 구조화해 AI 파싱 용이하게
  • CSS 토큰 레이어: 디자인 토큰을 CSS 커스텀 속성으로 export해 테마 스위칭 지원
  • 패키지 배포 자동화: Changesets + GitHub Actions로 버전 범프·CHANGELOG·npm publish 파이프라인 구성
  • 소비자 팀 온보딩 지표: 도입 후 첫 2주간 Storybook 접속 300% 증가, 슬랙 디자인 시스템 채널 문의 40% 감소
왜 읽나디자인 시스템을 npm 패키지로 배포할 때 tree-shaking이 왜 안 되는지, CSS-in-JS 없이 토큰을 어떻게 전달하는지, AI 협업을 위해 llms.txt를 어떻게 작성하는지를 실전 코드와 함께 배울 수 있다.
쏘카
쏘카 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 프론트엔드·LINE EngineeringLINE Engineering·

    AI로 웹 엔지니어 없이 LINE 앱 안에서 그룹 영상 통화 서비스 만들기

    LINE Planet 팀의 PM과 Android 엔지니어 두 명이 웹 전문 엔지니어 없이 LINE 앱 내에서 그룹 영상 통화 서비스를 개발한 과정을 다룬다. LIFF(LINE Front-end Framework)와 LINE Planet SDK를 활용해 React/Vite 기반 웹 앱을 구성했고, Firebase Cloud Functions로 별도 서버 인프라 없이 구현을 완료했다.

    #react#webrtc#firebase+2