디자인 시스템 배포를 위한 파일 구조가 어느정도 잡혀서 다음으로 넘어가기로 했다.💨
크게 토큰과 아이콘, ui로 나눠서 진행할 예정
디자이너분들 앞에서 모르는데 아는 척하지 않기 위해 미리 개념 정도는 잡고 가보려고 한다..🤓
나는 디자인 토큰이 "디자인에 사용하는 속성값을 변수에 저장한 것"이라고 이해했다.
예를 들어 #ABC123이라는 색상이 있고 이를 그대로 다양한 요소에 적용을 해두고 개발을 하다가 다양한 이유로 이 색상을 변경하려면?
➡️ 그 요소를 포함하고 있는 모든 곳에 가서 하나하나 수정해야하는 대참사가......☠️
💡 이런 값들을 변수에 담아 토큰화해두면 한 곳에서만 수정하면 된다!! 🙌
또한 개발자와 디자이너 사이에 소통에도 많은 도움이 될 것 같다..!
ex) 👨🎨: primary 색상 변경해주세요~ // 🧑💻: 그게 무슨 색인데요?
⬇️
👨🎨: color-primary 색상이 변경되었습니다. 업데이트해주세요 // 🧑💻: 넵! 토큰 업데이트 하겠습니다!
토큰은 보통 3단계로 이루어져 있다고 한다.
1단계: Primitive Token (원시 토큰)
{
"color-blue-500": "#4F46E5",
"color-gray-100": "#F3F4F6",
"space-4": "16px"
}
2단계: Semantic Token (의미 토큰)
{
"color-primary": "{color-blue-500}",
"color-background": "{color-gray-100}",
"spacing-button-padding": "{space-4}"
}
3단계: Component Token (컴포넌트 토큰)
{
"button-bg-color": "{color-primary}",
"button-text-color": "{color-white}",
"button-padding": "{spacing-button-padding}"
}
❓ 시맨틱 토큰 없이 원시 토큰 단계에서 붙인 속성값들의 이름을 바로 컴포넌트 토큰에 넣으면 안되나?
✅ 원시 토큰에는 의미가 부여되지 않았기 때문에 컴포넌트 토큰에 원시 토큰의 이름을 그대로 쓴다면 하드코딩된 값을 쓰는 것과 별반 다르지 않다.
여전히 컴포넌트 안의 속성값이 다르면 일일이 수정해줘야 한다는 뜻이다.
(그냥 속성값을 한 번 더 쓴 사람이 되고 싶다면 추천..)
단순히 색상이나 간격 정도만 있는 줄 알았는데 생각보다 범위가 넓어서 멈칫했다.
font-size, font-weight, line-height 등 글자와 관련된 모든 것이 포함된다.다른 서비스/프로젝트의 디자인 시스템들을 염탐하려고 보니 전부 다 공개를 해놓지는 않았더라.
우리 프로젝트도 어디까지 공개할지 정해봐도 괜찮을 것 같다.
// Chakra UI 방식
Primitive → colors.blue[500]: "#4299E1"
Semantic → colors.brand.primary: "blue.500"
Component → theme.components.Button.baseStyle
// Github Primer 방식
Primitive → --color-scale-blue-5: #0969da
Semantic → --color-accent-fg: var(--color-scale-blue-5)
Component → --color-btn-primary-bg: var(--color-accent-fg)
atlassian design system : 접두사로 네임스페이스를 구분하고, 상태까지 토큰 이름에 포함시켰음!
atlassian design system 전체 토큰
Radix UI : 클래스 기반
class="dark"를 루트에 붙이는 방식. Semantic 토큰 값만 교체해서 다크모드 구현Shopify Polaris : 미디어 쿼리 기반
Chakra UI
Github Primer
data-color-mode 속성을 HTML에 붙이는 방식.[data-color-mode="light"] { --color-canvas-default: #ffffff; }
[data-color-mode="dark"] { --color-canvas-default: #0d1117; }
🥸☝️ 팀의 상황과 프로젝트 규모가 전부 다르기에 어쨌든 우리 팀의 맞는 설정을 잘 논의하는 게 중요하다는 것을 깨달았고 다 같이 얘기해 보면 좋을 주제를 몇 가지 생각해 보았다.
1. 네이밍 컨벤션
--mm-color-primary vs --color-primary )blue-500 vs blue-5 vs blue-md )--color-button-hovered )2. 공개 범위 설정
3. Figma
4. 다크모드 지원 여부와 방식
5. 토큰으로 어디까지 포함할건지?
🔗 참고자료
KRDS 디자인 토큰
'디자인시스템'과 '디자인 토큰'에 관한 가장 쉬운 개념 정리!(Design System & Design Token)
Figma 디자인 시스템에서의 디자인 토큰 vs 베리어블(Variables) 완전 정리