토큰기반 디자인시스템 만들기
1개의 토큰으로 Web, Android, iOS Foundation 만들기
토큰 기반 디자인시스템 만들기 – 실전 구축기
문서를 읽으시면서 아래 링크로 완성된 전체 코드를 함께 살펴보시는 것을 추천합니다.
1. 왜 디자인 토큰인가?
과거에는 디자인 시스템을 만들 때, 피그마에서 Foundation(컬러, 타이포 등)과 컴포넌트 정보를 하나하나 코드로 옮기고, 색상 팔레트나 타이포그래피를 직접 변수로 변환해서 프로젝트에 적용했습니다.
이 과정은 반복적이고, 토큰이 바뀔 때마다 개발자와 디자이너가 모두 신경 써야 했죠.
하지만!
이제는 디자인 토큰을 활용하면, 피그마에서 정의한 값을 다양한 플랫폼(웹, 앱)에서 자동으로 활용할 수 있습니다.
게다가 웹에서는 css, tailwind(v4, v3), scss, js-in-css 등 다양한 방식을 지원하도록 할수도 있습니다.
2. 디자인 토큰 추출 – Figma → Style Dictionary
2-1. Figma에서 토큰 정의
피그마에서 아래와 같이 컬러, 타이포그래피 등 토큰을 JSON 형태로 정의합니다. 단 이 형태로 바로 토큰을 정의할순 없기에 토큰 스튜디오 플러그인을 설치해야 합니다. https://tokens.studio/
그럼 plugin > token studio 클릭후 표시되는 창을 통해 토큰을 설정할수 있습니다.
{
"primary": {
"soil": {
"50": { "value": "#d9d9d9", "type": "color" },
"100": { "value": "#a6a6a6", "type": "color" }
}
},
"typo": {
"regular": {
"headline1": { "value": { "fontWeight": "400", "fontSize": "48" }, "type": "typography" }
}
}
}
이렇게 만든 토큰은 Figma 플러그인(예: Tokens Studio, Guide Map 등)을 활용해 쉽게 관리할 수 있습니다.
토큰이 변경/추가될 때마다 플러그인으로 자동화된 프리뷰와 가이드도 생성할 수 있어, 디자이너의 반복 작업이 크게 줄어듭니다.
2-2. 실제 피그마에서 토큰 기반으로 만든 가이드
3. Style Dictionary로 멀티 플랫폼 토큰 변환
3-1. 프로젝트 구조 예시
실제 프로젝트에서는 아래와 같이 폴더를 구성했습니다.
design-system-practice/
├── config.json # style-dictionary 설정
├── design-token/
│ ├── android/ # 안드로이드용 토큰
│ ├── css/ # CSS 변수
│ ├── ios-swift/ # iOS용 토큰
│ ├── js/ # JS 변수
│ ├── scss/ # SCSS 변수
│ └── tailwind/ # Tailwind용 JSON
├── scripts/
│ └── generate-foundation-stories.mjs
├── stories/
│ └── Foundation/ # Storybook용 스토리
├── tokens/
│ └── global.json # Figma에서 추출한 토큰
└── ...
3-2. Style Dictionary 설정 및 빌드
tokens/global.json
에 Figma에서 추출한 토큰을 넣습니다.config.json
에서 각 플랫폼별로 어떤 포맷으로 토큰을 변환할지 정의합니다.npm run build
를 실행하면, design-token/ 아래에 각 플랫폼별 토큰 파일이 자동 생성됩니다.
예시:
design-token/css/_variable.css
design-token/tailwind/_variable.json
design-token/js/_variable.js
- 등등
4. Storybook, Tailwind, 실제 적용
4-1. Storybook에서 토큰 프리뷰
css/_variable.css
를 Storybook의preview.js
에 import하면, 스토리북 내에서 토큰을 바로 사용할 수 있습니다.stories/Foundation/
폴더에 컬러, 폰트사이즈, 폰트웨이트, 타이포그래피 등 토큰별 Story를 만들어, 실제 토큰 값이 어떻게 보이는지 바로 확인할 수 있습니다.
4-2. Tailwind v4와의 연동
Tailwind v4부터는 CSS 변수를 직접 유틸리티 클래스에서 참조해 @theme 을 구성할수 있습니다.(아쉽게도 자동으론 안됩니다. 커스텀 로직 짜야해요 현재는 v3 기준으로 설정파일을 뱉어 줍니다) 이 작업을 미리 해 두면 추후 dark/light 모드 구현도 손쉽게 가능합니다 (이 블로그도 같은 방법으로 만들어짐)
tailwind.css 파일에 아래와 같이 설정해 두면 bg-primary-soil-50, text-primary-soil-50 등 tailwind className 을 사용해 바로 색상값 적용이 가능합니다.
@import 'tailwindcss';
@import '../design-token/css/_variable.css';
/* 이 부분까지는 자동화 하지 않고 테스트를 위해 수동으로 작성함. 필요시 이 부분도 자동 생성하도록 코드 커스텀 가능 */
@theme {
--color-primary-soil-50: var(--primary-soil-50);
--color-primary-soil-100: var(--primary-soil-100);
--color-primary-soil-200: var(--primary-soil-200);
--color-primary-soil-300: var(--primary-soil-300);
--color-primary-soil-400: var(--primary-soil-400);
--color-primary-soil-500: var(--primary-soil-500);
--color-primary-soil-600: var(--primary-soil-600);
}
5. 실전 팁 & 마무리
- 토큰 관리 자동화: Figma → Style Dictionary → Storybook/Tailwind까지 자동화하면, 디자이너와 개발자 모두 반복 작업이 크게 줄어듭니다.
- 토큰 변경 대응: 토큰이 바뀌면 Figma에서 export → Style Dictionary 빌드만 하면, 모든 플랫폼에 즉시 반영됩니다.
- 확장성: Android, iOS, Web 등 다양한 플랫폼에 동일한 토큰을 일관되게 적용할 수 있습니다.
6. 사용시 주의할 점
style-dictionary 는 오픈소스이기에 모든 상황에 항상 완벽하지 않습니다. 하지만 이 오픈소스 개발자도 그 점을 잘 알고 있기에 커스텀 함수를 만들어 토큰을 원하는 방식으로 파싱할수 있도록 기능을 제공하고 있습니다.
- tailwindv4 를 사용할 경우 지금은 v3 기준이기에 별도 함수 작업 필요.
- Android, iOS 는 값이 객체인 경우(type 이 typography 일때)는 제대로 값을 참조할수 없습니다. 객체를 각각의 값으로 바꿔 파싱해야 합니다.
그래도 전반적으로는 이 동작을 통해 하나하나 수동으로 만들고 있었던 이 동작을 쉽게 할수 있었어요.
참고 코드/리소스
이렇게 하면, 디자인 토큰 기반의 디자인 시스템을 효율적으로 구축하고,
디자이너-개발자 협업도 훨씬 수월해집니다!
혹시 실제 코드 예시나, 각 단계별 상세 설정법(예: style-dictionary config, Storybook 연동법 등)이 더 필요하시면 말씀해 주세요.
실제 프로젝트의 config나 스크립트, 스토리북 설정 등도 구체적으로 추가해드릴 수 있습니다.