버튼 하나 제대로 디자인하기: 우선순위·상태·크기로 클릭을 유도하는 법
Primary·Secondary·Ghost 버튼의 위계부터 hover·focus·loading·disabled 상태, 터치 영역까지 1인 개발자가 바로 적용할 버튼 설계 원칙을 정리합니다.
목차
이 글의 목차
버튼은 작아 보여도 사용자의 다음 행동을 결정하는 핵심 인터페이스입니다. 색상만 예쁘게 입히는 것보다 “지금 가장 중요한 행동이 무엇인가”를 먼저 정하고, 모든 상태와 크기를 일관되게 설계해야 합니다.
1. 버튼의 우선순위부터 정하라

한 화면에 버튼이 많다면 사용자는 무엇을 눌러야 할지 다시 생각합니다. 화면의 목표 행동을 하나 정하고, 버튼의 위계를 시각적으로 나누세요.
Primary는 화면의 대표 행동 하나만
Primary는 가입, 저장, 제출처럼 해당 화면에서 가장 중요한 행동에 씁니다. 한 화면에 Primary가 여러 개 필요하다면 서로 다른 목적의 화면이 섞였는지 먼저 확인해 보세요. 강한 배경색과 높은 대비를 쓰되, 색상만으로 의미를 전달하지 않는 것이 좋습니다.
Secondary와 Ghost는 방해하지 않게
Secondary는 대표 행동을 보조하고, Ghost는 취소·더보기·대안 선택처럼 부담이 낮은 행동에 적합합니다. 세 가지 스타일을 모두 강조하면 위계가 사라지므로, 배경·테두리·텍스트 강도를 단계적으로 낮추세요. 버튼 체계가 화면 전체에서 흔들린다면 바이브코딩으로 만든 UI 품질 올리는 체크리스트 20: 출시 전 화면 점검표도 함께 점검해 볼 만합니다.
2. 상태를 ‘장식’이 아니라 정보로 설계하기

사용자는 버튼의 모양 변화로 시스템이 자신의 행동을 인식했는지 판단합니다. 기본 상태만 만든 뒤 출시하면 클릭 중복, 키보드 탐색, 오류 상황에서 품질이 급격히 떨어집니다.
꼭 정의할 다섯 가지 상태
- Default: 아직 상호작용하지 않은 기본 상태
- Hover: 마우스가 올라간 상태. 색상이나 밝기를 조금만 변화
- Focus: 키보드나 보조기기가 현재 위치를 알아볼 수 있는 상태
- Loading: 요청이 진행 중이며 중복 클릭을 막는 상태
- Disabled: 현재 조건에서 행동할 수 없는 상태
Focus는 마우스 사용자에게 보이지 않는다고 없애면 안 됩니다. 외곽선이나 링처럼 배경과 충분히 구분되는 표시를 남기세요. Loading에서는 문구를 무작정 지우기보다 “저장 중”처럼 진행 중인 의미를 보여 주고, 요청이 끝날 때까지 중복 제출이 일어나지 않게 처리합니다.
Disabled와 오류를 혼동하지 않기
Disabled는 애초에 실행 조건이 충족되지 않았다는 뜻이고, 오류는 실행을 시도했지만 문제가 발생했다는 뜻입니다. 버튼을 비활성화하기만 하면 사용자는 무엇을 고쳐야 하는지 알기 어렵습니다. 필요한 입력이 부족하다면 버튼 주변에 조건을 안내하거나, 제출 후 오류를 구체적으로 알려 주세요.
3. 크기는 손가락과 시선 기준으로 잡기
버튼의 실제 클릭 가능 영역은 글자와 아이콘보다 넓어야 합니다. 모바일에서는 손가락으로 누르기 쉬운 여유를 두고, 데스크톱에서도 버튼 사이 간격이 너무 좁아 오작동하지 않게 하세요. 정확한 수치는 제품의 디자인 시스템과 대상 기기에 맞춰 정하되, “보이는 박스”와 “실제로 누를 수 있는 영역”이 같은지 확인하는 것이 핵심입니다.
텍스트 버튼에는 좌우 여백을 충분히 주고, 아이콘만 있는 버튼에는 접근 가능한 이름을 별도로 제공하세요. 아이콘만 보고 의미를 추측하게 만들면 처음 방문한 사용자에게 불리합니다. 간격 체계를 함께 정리하고 싶다면 여백이 디자인의 8할: 1인 메이커가 바로 쓰는 간격(spacing) 시스템 만들기를 참고해 버튼 안팎의 리듬을 맞춰 보세요.
4. 클릭을 유도하되 속이지 않는 문구

버튼 문구는 “확인”보다 사용자가 실제로 하게 될 행동을 말하는 편이 명확합니다. “무료로 시작하기”, “초안 저장하기”, “결과 확인하기”처럼 목적과 결과를 함께 보여 주세요.
랜딩페이지에서는 다음 행동을 좁혀라
조코헌트에 출시된 프로덕트 272개를 보면, 출시 직후 사용자의 반응을 얻는 제품과 그렇지 않은 제품이 함께 존재합니다. 이 수치는 특정 버튼 하나가 반응을 만든다는 뜻은 아니지만, 첫 화면에서 방문자가 무엇을 해야 하는지 빠르게 이해하도록 돕는 설계가 중요하다는 점을 생각하게 합니다. CTA가 여러 개라면 Primary는 하나로 두고 나머지는 보조 링크로 낮춰 보세요.
행동 뒤의 피드백까지 연결하기
조코헌트의 집계에서 출시 첫 24시간 안에 업보트나 댓글을 하나라도 받은 프로덕트는 57%였습니다. 출시 페이지라면 버튼 클릭 뒤에 결과가 나타났는지, 다음 행동이 무엇인지 즉시 알려야 합니다. 제출 완료 메시지, 링크 복사 확인, 오류 안내처럼 클릭 이후의 피드백까지 버튼 경험의 일부로 설계하세요. 랜딩페이지의 전체 흐름은 전환되는 랜딩페이지 구조: 1인 메이커를 위한 7섹션 설득 흐름과 함께 비교하면 좋습니다.
5. 출시 전 10분 버튼 점검표
마지막으로 실제 화면에서 다음을 확인해 보세요.
- 이 화면의 Primary 버튼은 하나로 읽히는가?
- 버튼 문구만 보고 결과를 예상할 수 있는가?
- Hover·Focus·Loading·Disabled 상태가 모두 정의되어 있는가?
- 키보드만으로 버튼에 도달하고 실행할 수 있는가?
- 모바일에서 손가락으로 누르기 충분한 영역인가?
- 연속 클릭했을 때 요청이 중복되지 않는가?
- 오류가 났을 때 사용자가 고칠 방법을 알 수 있는가?
버튼은 컴포넌트 하나지만, 우선순위·상태·문구·피드백을 모두 담는 작은 제품 설계입니다. 이 일곱 가지를 체크리스트로 고정해 두면 기능을 추가할 때마다 UI 품질이 흔들리는 일을 줄일 수 있습니다.
관련 글
같은 주제를 다룬 다른 글도 살펴보세요.