디자인 시스템 D-13 오픈 2026-09-16
기획 07

디자인 시스템

웹과 앱이 같은 토큰을 씁니다. 디자이너 없이 5인이 일관된 화면을 만들기 위한 최소 장치.

담당 김충식

⚠︎ 컨셉 영상이 이 레포에 없습니다

화면 기록 2026-09-03 오후 12.32.47.mov 는 PM 로컬(macOS)에만 있어 반영되지 않았습니다. 아래 토큰은 구조만 잡아둔 자리표시자이며, 값은 영상 컨셉으로 교체해야 합니다. 영상을 assets/concept/ 에 올리거나, 01 개요의 4개 항목만 글로 정리해 주면 즉시 확정됩니다. 담당 류준(PM) · 기한 D-12(9/04)

왜 토큰부터인가

디자이너가 따로 없는 팀에서 화면 일관성은 각자의 감각이 아니라 공유된 값에서 나옵니다. 색·간격·글자 크기를 각자 정하면 웹과 앱이 다른 제품처럼 보이고, 나중에 맞추는 비용이 훨씬 큽니다.

웹(FE-02)과 앱(APP-03)이 같은 토큰 값을 쓰는 것이 이 문서의 유일한 목표입니다.

토큰 (자리표시자 — 영상 반영 필요)

토큰 쓰임
color.brand (영상에서) 주 버튼, 강조, 링크
color.brand.pressed (영상에서) 눌림 상태
color.bg (영상에서) 화면 배경
color.surface (영상에서) 카드·시트 배경
color.text (영상에서) 본문
color.text.muted (영상에서) 보조 설명
color.border (영상에서) 구분선
color.danger #EF6461 오류·삭제
color.warn #F2C94C 주의
color.success #31D0AA 성공

상태색(danger/warn/success) 3종은 컨셉과 무관하게 통용되는 값이라 먼저 고정합니다.

간격 · 반경

4px 배수로 통일합니다. 중간값을 쓰고 싶어지면 대개 레이아웃이 잘못된 것입니다.

spacing   4 · 8 · 12 · 16 · 24 · 32 · 48
radius    sm 6 · md 10 · lg 16 · full 999

타이포

토큰 크기 / 행간 쓰임
display 28 / 1.3 화면 대표 제목
title 20 / 1.4 섹션 제목
body 15 / 1.7 본문
caption 13 / 1.6 보조
mono 13 코드·ID

한글 본문 행간은 1.6 이상을 씁니다. 영문 기준(1.4)을 그대로 쓰면 한글은 답답해 보입니다. 줄바꿈은 word-break: keep-all 로 어절 단위를 유지합니다.

공통 컴포넌트

웹·앱 양쪽에서 같은 이름, 같은 상태를 갖습니다. 이름이 다르면 논의할 때마다 번역이 필요해집니다.

컴포넌트 상태 담당
Button (primary / secondary / ghost) default · hover · pressed · disabled · loading FE-06 · APP-12
TextField default · focus · error · disabled FE-06 · APP-12
Card FE-06 · APP-12
Modal / BottomSheet FE-18 · APP-12
Toast success · error · info FE-18
Skeleton FE-14
EmptyState 빈 목록 · 검색 결과 없음 · 오류 FE-14 · APP-14
ChatBubble user · assistant · streaming · error FE-16 · APP-16

화면 상태 3종 — 전부 만든다

가장 흔한 누락

데이터를 보여주는 화면은 반드시 세 가지 상태를 갖습니다. 하나라도 빠지면 시연 중에 흰 화면이 나옵니다.

  1. 로딩 — 스켈레톤. 스피너만 도는 화면은 얼마나 기다릴지 알 수 없어 답답합니다.
  2. 비어 있음 — 왜 비었는지 + 무엇을 하면 되는지. “데이터가 없습니다” 만 쓰지 않습니다.
  3. 오류 — 무슨 일이 있었는지 + 재시도 버튼. 여기서 error.code 별로 문구가 갈립니다.

대화 UI

AI 대화는 이 제품의 얼굴입니다. 웹·앱이 동일하게 동작해야 합니다.

  • 스트리밍 중에는 글자가 실시간으로 쌓이고, 중단 버튼이 보인다.
  • 툴 호출 중에는 “~를 찾는 중” 같은 진행 표시를 낸다 (event: tool).
  • 오류는 말풍선 안에 표시하고 재시도 버튼을 붙인다. 화면 전체를 오류로 덮지 않는다.
  • 자체 타임아웃(예: 60초)을 걸어 무한 로딩을 막는다.

접근성 최소선

14일 안에 완벽할 수 없으니 아래 4개만 지킵니다.

  • 본문 대비비 4.5:1 이상
  • 터치 영역 최소 44×44
  • 주요 플로우를 키보드만으로 완주 가능 (웹)
  • 시스템 글자 크기 확대 시 잘림 없음 (앱)

기획서 v6 · 컨셉 영상 대조

  • 색 토큰 7종을 영상 컨셉의 실제 HEX 로 교체
  • 다크/라이트 중 무엇이 기본인지 확정
  • 모션 성격 확정 (전환 속도·이징)
  • 정보 밀도 확정 (대시보드형 / 카드형)
  • 대화 UI 위치 확정 (전용 탭 / 전역 플로팅)
  • 로고·아이콘 에셋 확보 → 앱 아이콘·스플래시(APP-24)

결정 로그

날짜 결정 이유
2026-09-03 웹이 토큰 원본, 앱이 값을 따라감 원본이 둘이면 반드시 어긋난다. 한쪽을 정본으로
2026-09-03 상태색 3종 선확정 컨셉과 무관하고, 없으면 에러 UI 를 못 만든다
2026-09-03 화면 상태 3종을 컴포넌트 완료 조건에 포함 나중에 채우자고 하면 시연 당일까지 안 채워진다