아래는 적용 구조를 설명하는 예시입니다. 특정 조직에서 직접 달성한 시간이나 결과가 아니라, legacy와 새 client가 token package를 소비하도록 나누는 방법으로 읽어야 합니다.
Spring Boot, React, WebView가 섞인 경우
Spring Boot+JSP legacy, React와 mobile WebView가 함께 있는 제품에서 brand color를 바꾼다고 가정합니다. 먼저 hard-coded 값의 사용처를 inventory로 만들고 같은 색이 정말 같은 의미인지 분류합니다. #333333을 모두 한 token으로 일괄 교체하면 text, border, disabled 상태가 원치 않게 같이 바뀔 수 있습니다.
token repository를 versioned npm package와 CDN CSS artifact로 분리할 수 있습니다. JSP는 고정 version의 global-tokens.css를 import하고 React는 package를 theme provider에 주입합니다. 각 consumer는 자동으로 latest를 당기지 않고 version update PR을 받아 visual regression을 통과한 뒤 배포합니다. 같은 token도 browser, font, native rendering에서 완전히 같은 look을 보장하지 않으므로 대표 화면을 platform별로 확인합니다.
GitHub Actions에서 PR까지만 자동화한다
디자인 도구에서 publish하면 repository dispatch로 token build와 PR 생성을 시작할 수 있습니다. 아래 YAML은 구조 예시이며 action version, plugin webhook 인증, permission과 package 배포 단계가 빠져 있습니다. 외부 event가 임의 branch나 script를 실행하지 않도록 event payload와 token을 검증해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| name: Sync Design Tokens from Figma
on:
repository_dispatch:
types: [update-tokens] # 피그마 플러그인에서 발송하는 Webhook 이벤트
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Style Dictionary
run: npm install -g style-dictionary
- name: Build Tokens for All Platforms
run: style-dictionary build
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
title: "feat(design): 디자인 토큰 업데이트 반영"
commit-message: "chore: compile new design tokens"
branch: "design-update/${{ github.run_id }}"
|
자동 PR에는 source token diff와 생성된 platform artifact를 함께 보여 줍니다. schema validation, alias cycle, 금지된 raw value, contrast와 각 platform build를 실행하고 visual snapshot 변경을 첨부합니다. 색상 하나의 변경이 수백 component에 전파될 수 있으므로 merge는 사람 검토 뒤에 수행합니다. 실패한 consumer가 있을 때 이전 package version으로 rollback할 수 있어야 합니다.