미학 엔지니어링 · 6 / 12

일관성: 시스템감은 어디서 오나

어떤 UI는 하나씩은 괜찮은데, 합치면 제각각 냄새가 나요. 빠진 건 결국 하나: 모두가 지키는 변수 세트예요. 이번 레슨은 디자인 토큰 — 변수 먼저, 스타일은 따라가요.

design tokenCSS 변수시스템감
하나씩은 괜찮은데, 합치면 제각각

제각각 느낌의 원인은 구체적이에요. 이 버튼 높이 36, 저건 40; 이 카드 둥근 모서리 8, 저건 16; 로즈는 여기 짙고 저기 옅어요. 그때그때 손으로 쓴 값이라 하나씩은 괜찮은데, 합치면 티가 나요. 해법은 「손맛 숫자」를 변수로 정리하는 것: 먼저 토큰을 정하고(주색·둥근 모서리·컨트롤 높이·간격 단계), 모든 스타일은 토큰에서 값을 읽어요. 결정이 줄면 UI가 한 가족처럼 보여요.

일관성이 사 주는 것

일관성은 결벽처럼 들릴 수 있지만, 사는 건 진짜 돈이에요. About Face 4가 닐슨의 장부를 인용합니다: 통일된 UI 표준은 예측 가능성으로 산출을 올리고 실수를 줄여요 — 한 페이지에서 배운 규칙이 다음 페이지에서도 통하니, 학습 비용과 교육비가 떨어져요. 애플과 마이크로소프트가 서드파티 앱이 자사 시스템처럼 보이게 하는 이유도, 사용자가 어디서든 다시 배우지 않게 하려는 거예요.

일관하면 사용자가 얻는 것일관하지 않으면 사용자가 치르는 것
버튼이 이렇게 생겼으면 행동도 그렇게 — 눈 감고도 예측새 페이지마다 처음부터 더듬어야 해요
한 번 배우면 전 사이트 통용「지난 페이지는 오른쪽 위 저장이었는데…」
UI는 배경으로 물러나고, 주의는 콘텐츠에차이가 계속 주의를 크롬으로 끌어당겨요

같은 책이 미리 못된 말도 해요: 표준은 룩앤필이라는 문법층만 다루고, 더 깊은 논리는 못 다뤄요. 표준을 만병통치약으로 여기는 건, 형식 매뉴얼만 있으면 좋은 소설이 나온다고 믿는 것만큼 위험해요. 그래서 이번 레슨은 UI에 변수를 세우는 법이지, 창의력에 자물쇠를 채우는 법이 아니에요.

실제 사례: 지금 보고 있는 상단바

교실용 허구가 아니에요. 이 사이트 강좌 목록 페이지 learn.html 소스에 변수 두 줄이 그대로 있고, 원 주석도 함께 옮겨 드릴게요:

:root{ /* 상단바 컨트롤의 통일 높이와 둥근 모서리: 공유·테마·커뮤니티·언어·계정 버튼이 한 단계 공유, auth.js가 주입하는 것도 여기를 읽어, 제각각 크기로 들쭉날쭉한 버튼 줄을 막아요 */ --xa-ctl-h:36px; --xa-ctl-r:10px; }

지금 보고 있는 사이트에서 상단바 버튼 다섯은 이 변수 둘이 관리해요. 누구도 제 크기를 가져오지 못하고, 모두 높이 36px·둥근 모서리 10px를 읽어요. 언젠가 전 사이트 스타일을 바꾸려면 이 두 줄이면 충분해요.

스위치를 켜면, 제각각이 드러나요
변수 스위치 눌러서 전환
같은 상단바 버튼 줄에서 「각자 쓰기」로 바꿔 보세요.
xueai.app/slides/learn.html
공유 테마 커뮤니티 언어 계정
공유 변수: 버튼 다섯이 같은 토큰 쌍을 읽어 높이 36·둥근 모서리 10. 아무도 튀지 않고, 나란히 놓이면 가지런해요.
변수 하나 바꾸면, 컨트롤 다섯이 함께 움직여요
둥근 모서리 변수 하나로 전체 UI 슬라이더를 드래그
아래 컨트롤 다섯의 둥근 모서리가 모두 --demo-radius를 읽어요. 슬라이더를 드래그해 보세요.
주 버튼
입력
카드
모달
이 기록을 삭제할까요?
12px
12 근처: 둥글고 친근함 — 대부분 제품의 안전 구간.

방금 무슨 일이 있었는지 보세요: 변수 하나만 바꿨는데 버튼·카드·입력·아바타·모달이 함께 변했어요. 스타일은 변수의 값이고, 시스템감은 변수가 있다는 사실이에요. 값은 논쟁할 수 있어도, 변수는 먼저 있어야 해요.

찾기: 어느 App이 한 사람이 만든 느낌인가
찾기: 어느 쪽이 더 나은가 한쪽을 고르세요
같은 미니 App의 목록·상세 썸네일. 어느 쪽이 같은 팀 손인가요? 한쪽을 고르세요.
방안 A
새로 만들기
상세
저장
방안 B
새로 만들기
상세
저장
실전 연습: 이 설정 페이지에 불일치 다섯

토큰을 세운 뒤엔 드리프트를 잡는 일이 남아요. 아래 설정 페이지는 멀쩡해 보이지만 불일치 다섯이 숨겨져 있고, AI가 만든 UI에서 이런 드리프트는 매일 나와요. 찾으면 누르세요.

불일치 찾기 0 / 5
힌트: 버튼·둥근 모서리·파랑·아이콘·행 간격을 보세요. 각각 한곳씩 떴어요.
settings.example.com
설정
계정 프로필
아바타, 닉네임, 휴대폰
편집
로그인 및 보안
비밀번호, 2단계 인증
비밀번호 변경
알림
푸시, 메일, 방해 금지
관리
일반
언어, 글자 크기, 테마
관리
도움이 필요하세요? 고객센터
가장 눈에 띄는 곳부터 누르세요.
차이는 죄가 아니에요 — 이유가 없는 게 죄예요

About Face 4는 일관성 판정 기준을 두 문장으로 말해요: 모든 요소는 존재할 충분한 이유가 있어야 하고, 모든 차이도 존재할 충분한 이유가 있어야 해요. 삭제 버튼이 더 빨간 건 이유가 충분해요 — 행동이 다른 요소는 시각적으로도 달라야 하고, 같아 보이면서 다른 일을 하는 게 함정이에요. 반대로 동급 카드 둥근 모서리가 8과 16인데 이유를 못 말하면, 그건 정리할 드리프트예요. 책은 손쉬운 레버도 줍니다: 새 요소를 더하기보다 한 요소가 일을 더 하게 하세요. 요소가 적을수록 일관성을 지키기 쉬워요.

아래 차이 넷 중, 존재 이유가 충분한 것은 객관식
A상세 페이지가 카드 둥근 모서리를 12에서 16으로 — 「분위기 좀 바꾸자, 너무 단조로워」
B전 사이트 버튼은 파랑이고, 「계정 삭제」만 빨강
C동급 섹션 제목 둘: 하나 18px, 하나 20px
D사이드바 아이콘 절반은 라인, 절반은 면 — 「예쁜 쪽 쓰면 되지」
적용: 변수표를 AI에게 넘기세요

이번 레슨에서 배운 건 결국 한 문단이 되어, AI에게 UI를 부탁하는 프롬프트 맨 앞에 들어가야 해요. 아래 변수표는 바로 쓸 수 있고, 값은 제품에 맞게 바꾸세요. 핵심은 모든 결정에 출처가 있게 하는 것 — 그래야 AI가 대신 손맛 숫자를 못 써요.

AI용 변수표
전 사이트 스타일은 이 변수표를 먼저 지킨 뒤 페이지를 쓰세요: // 색: 주색 하나 + 중성색; 시맨틱 색은 상태에만 주색 #2563eb (호버 시 #1e40af로 깊게; 두 번째 파랑 금지) 중성색 텍스트 #111827 / 보조 #6b7280 / 테두리 #e5e7eb 시맨틱 성공 #16a34a / 위험 #dc2626 — 상태 전용, 장식 금지 // 크기: 전부 단계에서 읽고, 손맛 숫자 금지 둥근 모서리 항상 10px (아바타는 예외 — 원형) 컨트롤 높이 항상 36px 간격은 8 / 16 / 24 / 40만 글자 크기는 13 / 15 / 18 / 24만, 굵기는 400과 700만 // 검수: 납품 전 자가 점검 버튼·둥근 모서리·파랑·아이콘 스타일·행 간격을 화면마다 확인하고, 표 밖 값은 미완료로 봐요.
오른쪽 위 복사를 눌러, 다음에 AI에게 UI를 부탁할 프롬프트 맨 앞에 붙여 넣으세요.

이 표는 「오늘부터 새로 쓰는 UI」를 다뤄요. 프로젝트가 이미 돌아가고 스타일이 제각각이라면 변수표만으로는 부족하고, 흩어진 구현을 먼저 거둬들여야 해요 — 그건 수술이고, 단계는 Vibe Coding · 스타일 수렴: 버튼 하나에 CSS 여덟 벌은 그만에 있어요: 부채를 어떻게 세고, 어떻게 나눠 합치고, 어떤 차이를 남길지.

핵심 요점

시스템감은 공유 변수에서 와요: 먼저 토큰(주색·둥근 모서리·컨트롤 높이)을 정하고, 스타일은 토큰에서 읽으면 제각각 느낌이 사라져요.

일관성 점검의 가장 빠른 방법: 스크린샷 두 장을 나란히 두고, 버튼·둥근 모서리·주색 깊이에 드리프트가 있는지 보세요.

AI에게 UI를 맡길 때 변수표를 먼저: 주색·둥근 모서리·컨트롤 높이를 프롬프트에 넣고 나서 시키면, 일관성이 바로 달라져요.

판정 기준 두 문장: 모든 요소는 이유가 있어야 하고, 모든 차이도 이유가 있어야 해요. 삭제 버튼의 빨강은 남기고, 이유를 못 말하는 둥근 모서리는 정리하세요.

콘텐츠 출처: 샤오산 아카데미 「미학 엔지니어링」 특집 오리지널; 일관성과 표준의 가치, 「차이는 이유가 있어야 한다」 등 원칙은 About Face 4: The Essentials of Interaction Design 17장(Alan Cooper 외)에서 정리.