Design System

디자인 시스템

Noto Sans KR 기반 한글 웹 최적화. 수치는 모두 연구와 WCAG 기준에 근거합니다.

이지만 (i@leejiman.net)

01 Typography Scale

타이포그래피 위계

각 단계는 한글 획의 밀도를 고려해 자간과 행간을 별도로 조정했습니다.

타이포그래피 64px · 700 · lh 1.2 · ls -0.04em

한글은 단어 단위로 읽힙니다

40px · 700 · lh 1.3 · ls -0.03em

수치는 감각이 아닌 근거입니다

32px · 700 · lh 1.35 · ls -0.025em

Noto Sans KR의 x-height

24px · 600 · lh 1.4 · ls -0.02em

8의 배수가 만드는 리듬

20px · 600 · lh 1.45 · ls -0.02em
본문은 16px, 행간 1.7, 자간 -0.01em. 이 조합이 한글 가독성의 기준입니다. 16px · 400 · lh 1.7 · ls -0.01em
작은 글자는 행간을 조금 더 넉넉히. 14px 본문은 1.65가 적절합니다. 14px · 400 · lh 1.65
CAPTION · 메타데이터 · 12px 이하는 자간을 좁히지 않음 12px · 400 · lh 1.5 · ls 0
02 Line Length

한 줄 글자 수 25–40자

WCAG 1.4.8 기준으로 한글(CJK)은 40자 이하. 너무 길면 다음 줄 시작점을 놓치고, 너무 짧으면 리듬이 깨집니다.

GOOD · max-width 36ch

좋은 타이포그래피는 보이지 않습니다. 독자가 글의 내용에 몰입할 수 있도록 텍스트는 조용히 뒤로 물러섭니다. 한 줄에 25자에서 40자 사이로 제한할 때, 눈은 자연스러운 리듬으로 다음 줄을 찾아갑니다.

반대로 줄이 너무 길면 독자는 다음 줄의 시작점을 놓치기 쉽습니다. Baymard Institute 연구에 따르면 80자가 넘는 줄은 60–70자 대비 41% 더 자주 스킵됩니다.

BAD · 제한 없음

한 줄이 너무 길어지면 독자의 눈은 다음 줄의 시작점을 찾는 데 피로를 느낍니다. 특히 한글은 영어보다 한 글자당 시각적 정보량이 많기 때문에, 영문 기준 65자를 그대로 적용하면 지나치게 답답해집니다. 그래서 한글 사이트는 반드시 본문 컨테이너의 최대 너비를 제한해야 하는데, 이 문단은 일부러 제한을 풀어 얼마나 읽기 불편한지 보여주기 위한 예시입니다.

03 Korean-Specific

한글에 가장 중요한 한 줄

word-break: keep-all 하나로 가독성이 확연히 달라집니다.

기본값 (적용 안 함)

오늘 아침 회의에서 우리 팀은 새로운 프로젝트의 방향성에 대해 논의했습니다.

keep-all 적용

오늘 아침 회의에서 우리 팀은 새로운 프로젝트의 방향성에 대해 논의했습니다.

브라우저 너비를 줄여보면 차이가 선명해집니다. 왼쪽은 "아침"의 중간에서도 줄이 끊길 수 있지만, 오른쪽은 띄어쓰기 단위로만 줄바꿈됩니다.

04 Color System

글자색 4단계 체계

본문·부제·메타·비활성 네 단계로 고정. 순수 검정(#000)은 쓰지 않습니다.

Primary

Primary

#1a1a1a

본문, 제목, 주요 텍스트

AAA · 17.4:1
Secondary

Secondary

#4a4a4a

부제목, 보조 본문, 인용문

AAA · 9.7:1
Tertiary

Tertiary

#6e6e6e

작성자, 날짜, 캡션, 메타

AA · 5.3:1
Muted

Muted

#a1a1a1

비활성, placeholder, 힌트

FAIL · 2.8:1 · 본문 금지

왜 위계가 중요한가

모든 텍스트가 같은 색이면 독자는 중요도를 시각적으로 구분할 수 없습니다. 4단계로 나누면 눈이 자연스럽게 중요한 정보부터 훑습니다.

BAD · 전체 순수 검정

좋은 타이포그래피는 눈에 띄지 않는다

독자가 내용에 몰입할 수 있도록 텍스트는 조용히 뒤로 물러섭니다

이지만 · 2026년 4월 19일 · 5분 읽기

웹 디자인에서 타이포그래피는 가장 먼저 보이지만 가장 마지막에 의식되는 요소입니다.

GOOD · 4단계 적용

좋은 타이포그래피는 눈에 띄지 않는다

독자가 내용에 몰입할 수 있도록 텍스트는 조용히 뒤로 물러섭니다

이지만 · 2026년 4월 19일 · 5분 읽기

웹 디자인에서 타이포그래피는 가장 먼저 보이지만 가장 마지막에 의식되는 요소입니다.

액센트 컬러

보라 계열(purple, indigo, violet)은 쓰지 않습니다. 채도가 낮은 딥 네이비 계열로 차분하고 묵직한 프리미엄 인상을 유지합니다.

Primary Accent

#15253d · Deep Navy

Accent Hover

#0e1a2b · Darker

Accent BG

#eef1f6 · Subtle

Accent Border

#c8d0de · Border

배경 · 보더 (Slate)

네이비 액센트와 조화되도록 아주 옅은 slate 계열을 사용합니다. 섹션 구분·테이블 헤더·카드 보더 모두 이 스케일 안에서만.

BG

#ffffff · Base

BG Subtle

#f5f7fa · 섹션·테이블 헤더

BG Muted

#eef1f5 · 코드·비활성

Border

#e2e7ee · 카드·입력

Border Strong

#cbd2dc · 강조 구분선

다크 네이비 (반전 영역)

Navbar 등 반전된 영역에 사용. 액센트보다 한 단계 더 깊은 네이비를 기본으로, 밝은 파생색으로 활성·호버 상태를 표현합니다.

Navbar BG

#0b1528 · 기본 배경

Navbar Avatar

#24395c · 밝은 파생

Navbar Text

#cbd5e1 · 기본 링크

On Accent

#ffffff · 반전 전경

상태 색상

각 상태마다 main / strong / bg / border 4개 토큰으로 구성. 배지·알럿·아이콘 모두 같은 세트를 참조합니다.

Success
Warning
Error
Info (= Accent)
05 8pt Grid

모든 간격은 8의 배수

현대 디자인 시스템의 표준. 해상도 스케일링에서 깨지지 않고, 개발자가 암산으로도 간격을 맞출 수 있습니다.

4
8
16
24
32
48
64
96
06 12 Column Grid

12 컬럼 레이아웃

12는 2, 3, 4, 6으로 모두 나눠지는 유일한 작은 수. 가장 유연한 분할 단위입니다.

span 12
span 6
span 6
span 4
span 4
span 4
span 3
span 3
span 3
span 3
07 Real-world Example

실제 적용 예시

좋은 타이포그래피는 눈에 띄지 않는다

웹 디자인에서 타이포그래피는 가장 먼저 보이지만 가장 마지막에 의식되는 요소입니다. 잘 설계된 본문은 독자가 내용에 몰입하는 동안 존재감을 드러내지 않습니다. 반대로 서체, 행간, 자간, 그리고 글자색이 조화롭지 못하면 읽는 행위 자체가 피로해집니다.

한글 웹 타이포그래피는 영문 기준을 그대로 적용하면 실패합니다. 한글은 음절 단위로 조합되는 문자라 한 글자당 시각 정보가 훨씬 많고, 획의 밀도도 높습니다. 그래서 행간 1.7, 자간 -0.01em, 한 줄 40자 이하, 본문 색 #1a1a1a라는 별도 기준이 필요합니다.

Noto Sans KR이 표준이 된 이유

Noto Sans CJK(한글판 Noto Sans KR)는 Apache 2.0 오픈 라이선스로 배포되는 오픈 서체입니다. 모든 운영체제와 브라우저에서 동일하게 렌더링되며, 본문용으로 충분한 가독성이 검증되었습니다.

한글 본문의 가독성은 서체 선택보다 행간, 한 줄 글자 수, 글자색 체계에 더 크게 좌우됩니다.

Noto Sans KR은 영문 폰트에 비해 획이 두꺼운 편이라 순수 검정(#000)을 쓰면 화면이 답답해집니다. 가독성을 중시하는 디자인 시스템들이 본문에 #1a1a1a ~ #242424 대역의 약간 옅은 검정을 쓰는 이유도 같습니다. 이 문서는 #1a1a1a를 권장합니다.

수치는 근거가 있다

행간을 100%에서 120%로 늘리면 읽기 정확도가 20% 향상되고 눈 피로도는 30% 감소한다는 대학 연구가 있습니다. 대비비 4.5:1(WCAG AA)을 만족하면 시각 장애인 포함 90% 이상의 사용자가 편하게 읽을 수 있습니다.

디자인 시스템의 숫자들은 취향이 아닙니다. 누적된 실험과 관찰의 결과이고, 그래서 임의로 바꾸면 반드시 어딘가가 어색해집니다.

참고: WCAG 2.1 (1.4.3, 1.4.8), Bringhurst The Elements of Typographic Style, Baymard Institute — Line Length Readability Study, Nielsen Norman Group — F-Pattern 아이트래킹.

08 Tokens · Interaction · Icons

시각 토큰과 상호작용 원칙

모서리 반경·그림자·포커스·모션·아이콘을 한 화면에서 검토합니다. 절제된 미니멀 지향 — 보더와 공간으로 위계를 만들고, 움직임은 쓰지 않습니다.

Border Radius

모서리 반경 4단계

4, 6, 8px 범위. 12px 이상은 쓰지 않아 단단한 인상을 유지.

4px

6px

8px

full

Depth

그림자 없이, 보더로

깊이감은 1px 보더로 표현. 그림자는 드롭다운처럼 꼭 필요할 때만.

Border only

기본값

Subtle

드롭다운용

Focus Ring

포커스 링은 얇고 단색

키보드로 Tab 키를 눌러보세요. 아래 버튼에 1.5px 얇은 라인이 나타납니다.

Icons

Heroicons Outline · 1.5px

16은 버튼·리스트, 20은 내비, 24는 독립 아이콘, 32는 큰 카드. heroicons.com

16 20 24 32
버튼 내비 독립 카드
Motion

모션은 쓰지 않는다

transform, opacity, height 애니메이션 모두 금지. 상태 변경은 즉각적. 단 하나 예외는 색상 전환 150ms로 버튼 호버가 자연스럽도록. prefers-reduced-motion: reduce 사용자에게는 색상 전환도 제거.

09 Components

핵심 UI 컴포넌트

모든 컴포넌트는 그림자 없이 보더로 깊이를 만들고, 상태 변화는 색상 전환만 150ms로 유지합니다.

Stacked Layout · Navbar + 페이지 헤더

대시보드

팀 전체 현황과 주요 지표를 한눈에 확인할 수 있습니다.

페이지 본문 영역

Sidebar Layout · 좌측 세로 내비 (Stacked의 짝 패턴)

대시보드

좌측 Sidebar와 메인 영역이 그리드로 나란히. 모바일(<900px)에선 Sidebar가 Drawer로 접힙니다.

페이지 본문 영역

Navbar · Dark (기본형 · 앱 쉘용)

Navbar · Light (블로그·랜딩용 변형)

Breadcrumb

Page Header · Stacked

백엔드 개발자

풀타임 서울 강남구 2일 전 공지

Buttons

Icon Button

Dropdown Menu

프리뷰용으로 메뉴가 펼쳐진 상태를 고정 표시. 실제 구현은 JS 토글.

Divider

섹션 A의 본문 텍스트입니다. 아래에 가로 구분선이 옵니다.


또는 라벨 포함

섹션 B의 본문 텍스트. 인라인 세로 구분선: 설정 알림

Form Input

회사 이메일 주소를 입력하세요.

이미 존재하는 이름입니다.

Search Input

좌측 돋보기 + 우측 × — 값이 있을 때만 clear 버튼 표시.

Textarea

최소 높이 96px, 세로 리사이즈만 허용.

Checkbox

Combobox (Select)

거주하시는 국가를 선택하세요.

Radio

요금제

Toggle Switch

Badges

Draft 진행 중 완료 검토 대기 실패

Avatars

Tooltip · hover/focus 시 표시

자주 묻는 질문 보기 링크 복사 (⌘C) VIP 최근 3개월 활동 상위 10%

Alerts

새 기능이 추가되었습니다

팀 관리 페이지에서 멤버 역할을 세분화할 수 있습니다.

저장 완료

변경사항이 정상적으로 반영되었습니다.

구독 만료 예정

7일 뒤 플랜이 종료됩니다. 설정에서 갱신해주세요.

업로드에 실패했습니다

파일 크기가 10MB를 초과합니다.

Notification · 흰색 배경

저장되었습니다

변경 사항이 안전하게 저장되었습니다.

새로운 업데이트가 있습니다

버전 2.4.0이 출시되었습니다. 변경 사항을 확인해보세요.

Progress Bar · 결정적 진행률

파일 업로드 중 62%
저장 완료 100%
디스크 용량 87% 사용

Spinner · 비결정적 로딩

Skeleton Loader · 구조 유지 로딩

Modal · 삭제 확인 (파괴적 액션)

프로젝트를 삭제하시겠습니까?

이 작업은 되돌릴 수 없으며, 관련된 모든 데이터가 영구적으로 삭제됩니다.

Modal · 일반 확인

변경사항을 게시하시겠습니까?

게시 후에도 언제든 다시 편집할 수 있습니다.

Modal · 입력 폼 (기본 480px)

새 프로젝트

기본 정보를 입력해 시작하세요.

Modal · 입력 폼 (넓은 640px · 2컬럼)

신규 매물 등록

필수 정보를 입력해 등록을 완료하세요.

Empty State

프로젝트가 없습니다

새 프로젝트를 만들어 팀과 협업을 시작하세요.

Table

1. 상단 열 헤더 (Column Header)

사용자 역할 상태 마지막 접속
이지만
jiman@example.com
관리자 활성 2시간 전
한소율
soyul@example.com
멤버 진행 중 어제
정우진
woojin@example.com
게스트 비활성 2주 전

2. 행 그룹 헤더 (Grouped Rows)

관리자
이지만
jiman@example.com
2시간 전 접속
멤버
한소율
soyul@example.com
어제 접속
정우진
woojin@example.com
2주 전 접속

3. 속성 테이블 (Property / Key-Value)

이름 이지만 생년월일 1990년 3월 15일
이메일 jiman@example.com 휴대폰 010-1234-5678
회원등급 VIP 가입일 2024년 8월 3일
주소 서울특별시 강남구 테헤란로 152, 16층
마케팅 수신 동의 SMS 수신 미동의

Pagination

1,284건 중 1–20 표시

Tabs · 카운트 배지 포함

Accordion · FAQ·필터 접기

프로젝트 HTML <head>design-system.css<link>로 로드하면 토큰과 컴포넌트가 바로 적용됩니다. 특정 컴포넌트만 쓰고 싶다면 components/ 폴더의 개별 CSS를 골라 import할 수 있습니다.

폰트 교체는 가능하지만, 간격·행간·자간이 Noto Sans KR의 획 두께에 맞춰 조정되어 있어 다른 폰트로 바꾸면 시각적 균형이 깨질 수 있습니다.

--color-accent 변수만 덮어쓰면 전체 Primary 버튼·링크·활성 상태 색이 자동 반영됩니다. 단 보라 계열(purple/indigo)은 권장하지 않습니다.

첫 항목만 열린 상태. 실제 구현은 .open 클래스 JS 토글.

09b Tier 2 Components

특수 상황 컴포넌트

Tier 1 15개 외에 특정 맥락에서 쓰이는 10가지. 같은 토큰·원칙을 따릅니다.

Button Group

Segmented Control

Date Picker · 기간 입력

~

File Upload · Dropzone

파일을 드래그해 올리거나 클릭 PNG, JPG · 최대 10MB

Popover · 클릭 시 풍부한 내용

윤다은

프로덕트 디자이너 · 서울
참여 프로젝트 8개, 마지막 활동 2시간 전

Drawer · 우측 슬라이드 패널

상세 보기

역삼빌딩 리노베이션

2026년 4월 착공 예정. 외관 리모델링과 공용공간 재설계를 포함합니다.

Timeline · 세로 이력

오늘 14:22

계약 체결 완료

임차인 김민재 · 보증금 5,000만 원 · 월세 350만 원

어제 11:08

계약 조건 합의

2년 계약, 매년 3% 인상에 합의했습니다.

2일 전

내부 점검 완료

배관·전기 모두 정상. 도장 일부 보수 필요.

1주 전

기존 임차인 퇴거

3년간 운영했던 카페가 문을 닫았습니다.

Tree View · 폴더 구조

  • 매물
    • 강남구
      • 역삼동 테헤란로 152
      • 삼성동 봉은사로 524
    • 서초구
  • 계약서

Code Block

npm install design-system
echo "디자인 토큰이 적용되었습니다"
/* --color-accent: #15253d; */

인라인 코드: --color-accent 변수로 액센트 교체 가능.

Quote / Blockquote

읽기 편한 화면은 감각이 아니라 수치로 만들어집니다. 행간 1.7, 자간 -0.01em, 한 줄 40자 이하. 모든 수치는 연구와 WCAG 기준에 근거합니다. 디자인 시스템 설계 원칙
10 Card Pattern

카드 컴포넌트

공통 규칙: padding 24px, 제목과 본문 간격 8px, 카드 간격 24px — 모두 8pt 배수. 깊이감은 그림자 대신 1px 보더로 표현. 아래는 실무에서 자주 쓰이는 6가지 변형.

1. 기본 카드 (Caption + Title + Body)

Research

4단계 색 체계

Primary / Secondary / Tertiary / Quaternary 4단계로 글자 위계를 구분합니다. 대부분의 현대 디자인 시스템이 이 구조를 따릅니다.

Accessibility

WCAG 대비비 기준

본문은 4.5:1(AA), 이상적으로는 7:1(AAA). Primary #1a1a1a는 17.4:1로 AAA를 크게 초과합니다.

Korean

Noto Sans KR 최적값

획이 두꺼운 편이라 순수 검정은 무겁게 보임. #1a1a1a 정도의 옅은 검정이 균형점입니다.

2. 통계 카드 — 대시보드에서 핵심 지표 표시

월간 활성 사용자

24,580

12.4%

월 매출

₩48.2M

8.1%

이탈률

2.8%

0.3%

평균 세션 시간

4m 12s

변화 없음

3. 미디어 카드 — 썸네일을 강조하는 콘텐츠 목록

Guide

한글 웹 본문의 행간 설정

영문 기준 1.5로는 한글에서 답답함. 1.7을 기준으로 삼고 문단 맥락에 따라 조정합니다.

5분 읽기 2026.03.21

Reference

8pt 그리드 시스템의 근거

왜 8의 배수인가. 해상도 스케일링에서 깨지지 않고 개발자 암산이 쉬운 수학적 편의성.

8분 읽기 2026.03.14

Accessibility

대비비 체크리스트

본문 4.5:1, 제목 3:1. 수치는 눈으로 확인할 수 없으니 자동화된 검사가 필수.

3분 읽기 2026.03.07

4. 액션 카드 — 제목 + 본문 + CTA 버튼

프로 플랜으로 업그레이드

팀원을 무제한으로 초대하고 고급 분석 기능을 사용하세요. 월 ₩29,000부터 시작합니다.

이메일 인증이 필요합니다

계정 보안을 위해 이메일 주소를 확인해주세요. 확인 링크는 15분간 유효합니다.

5. 아이콘 피처 카드 — 기능 소개, 랜딩 페이지 섹션

자동 저장

입력하는 모든 내용이 실시간으로 저장됩니다. 브라우저를 닫아도 다음 방문 시 이어서 작업할 수 있습니다.

팀 협업

실시간으로 동료와 같은 문서를 편집하세요. 누가 어디를 보고 있는지 커서 위치로 확인할 수 있습니다.

데이터 보안

모든 데이터는 AES-256으로 암호화되어 저장됩니다. 서버 접근 로그는 90일간 보관됩니다.

6. 프로필 카드 — 팀 멤버, 연락처 목록

윤다은

프로덕트 디자이너

한소율

프론트엔드 엔지니어

정우진

백엔드 엔지니어

강민호

PM