수련  ›  기초 — 예쁜 사이트로  ›  CH1 / 4
기초 — 예쁜 사이트로 ⏱ 10분 +130 XP

디자인 토큰 이해

색, 타이포, 간격을 흩어진 값이 아니라 이름 붙은 시스템으로 다루는 법을 배웁니다.

입문 단계에서는 색이나 글자 크기를 필요할 때마다 즉석에서 정했습니다. 그러다 보면 같은 회색인데 어떤 곳은 #888, 다른 곳은 #8a8a8a처럼 미묘하게 어긋나고, 화면이 묘하게 지저분해 보입니다. 이 챕터에서는 그 혼란을 정리하는 핵심 개념인 디자인 토큰(design token)을 배웁니다. 토큰이란 디자인에서 반복되는 결정을 이름 붙여 한곳에 모아 둔 값입니다. 마치 요리에서 양념을 매번 눈대중으로 넣는 대신, 미리 계량한 통에 담아 두고 꺼내 쓰는 것과 같습니다.

왜 값에 이름을 붙이는가

#a78bfa를 사이트 곳곳에 그대로 적어 두면, 브랜드 색을 바꾸고 싶을 때 모든 파일을 뒤져 일일이 고쳐야 합니다. 대신 --color-primary라는 이름을 만들고 그 안에 색을 넣으면, 이름은 그대로 두고 값 하나만 바꿔도 사이트 전체가 따라 바뀝니다. 이름은 '무엇에 쓰는 색인가'라는 의도를 담고, 값은 '실제로 어떤 색인가'를 담습니다. 이 둘을 분리하는 것이 토큰의 본질입니다.

:root {
  --color-primary: #a78bfa;
  --color-text: #1f2937;
  --color-muted: #6b7280;
  --color-bg: #ffffff;
}

.button {
  background: var(--color-primary);
  color: var(--color-bg);
}
CSS에서 :root는 문서 전체의 최상위 요소를 가리킵니다. 여기에 --이름 형태의 커스텀 속성을 선언하면, 모든 자식 요소가 var(--이름)으로 그 값을 꺼내 쓸 수 있습니다.

세 가지 핵심 토큰 묶음

토큰은 보통 세 영역으로 나눕니다. 처음에는 이 세 가지만 정리해도 화면이 눈에 띄게 단정해집니다.

  • 색(color) — 주조색, 본문 텍스트, 흐린 보조 텍스트, 배경, 경계선처럼 역할별로 이름을 붙입니다.
  • 타이포(typography) — 글자 크기와 굵기, 줄 간격을 단계로 정리합니다.
  • 간격(spacing) — 여백과 요소 사이 거리를 일정한 배수로 통일합니다.

간격은 배수로 묶는다

여백을 5px, 7px, 13px처럼 제멋대로 쓰면 리듬이 깨집니다. 보통 4px를 기준 단위로 삼아 그 배수(4, 8, 12, 16, 24, 32)만 사용합니다. 이렇게 정해진 후보 안에서만 고르면 선택이 빨라지고 결과가 일관됩니다. 이런 '정해진 후보 묶음'을 스케일(scale)이라고 부릅니다.

토큰쓰임
--space-28px아이콘과 글자 사이
--space-416px카드 안쪽 여백
--space-624px섹션 사이 간격

타이포 스케일

글자 크기도 마찬가지로 단계를 정합니다. 예를 들어 본문 16px를 기준으로 제목은 24px, 큰 제목은 32px처럼 또렷이 구분되는 몇 단계만 둡니다. 단계가 너무 촘촘하면 위계가 흐려지므로, 차이가 분명한 4~5단계면 충분합니다.

토큰은 디자이너의 취향을 코드로 옮긴 약속입니다. 약속이 한곳에 모여 있으면, 나중에 누구든 그 약속만 바꿔 사이트 전체의 인상을 통째로 바꿀 수 있습니다.
토큰을 만들었다면 반드시 그 토큰만 사용해야 의미가 있습니다. 일부는 var(--color-primary)를 쓰고 일부는 #a78bfa를 직접 적으면, 나중에 값을 바꿀 때 직접 적은 곳이 따라오지 않아 오히려 더 큰 혼란이 생깁니다.

이해도 퀴즈

정답 3개 이상 → +130 XP

배운 내용을 확인해 보세요. 4문항 중 60% 이상 맞히면 챕터가 완료되고 경험치가 적립됩니다.

Q1.디자인 토큰을 사용하는 가장 큰 이유는 무엇인가요?
Q2.CSS에서 :root에 선언한 --color-primary 같은 값을 실제로 꺼내 쓰는 방법은?
Q3.간격(spacing) 토큰을 4px의 배수(4, 8, 12, 16...)로 통일하면 좋은 점은?
Q4.토큰을 만든 뒤 일부 요소에는 토큰을, 일부에는 색 값을 직접 적었습니다. 어떤 문제가 생기나요?