문구 — 하우스 말투
이 문서는 CoUI 로 만드는 서비스 화면의 기본 말투를 정합니다. 교육 · 병원 · 커머스 · 사내 도구 어느 도메인이든 이 말투가 바닥선입니다. 서비스의 말투 문서(`voice.md` 등)가 있으면 그 문서의 말투가 먼저이고, 이 문서에서는 높임 수준 한 가지 · 실패 문구 세 칸 · 동사 버튼 · 숫자 단위 같은 구조 규칙만 그대로 남습니다(`S...
이 문서는 CoUI 로 만드는 서비스 화면의 기본 말투를 정합니다. 교육 · 병원 · 커머스 · 사내 도구 어느 도메인이든 이 말투가 바닥선입니다. 서비스의 말투 문서(voice.md
등)가 있으면 그 문서의 말투가 먼저이고, 이 문서에서는 높임 수준 한 가지 · 실패 문구 세 칸 · 동사 버튼 · 숫자 단위 같은 구조 규칙만 그대로 남습니다(SKILL.md
「적용 범위와 정본」). 여기에는 말투 · 길이 · 버튼 · 실패 문구 · 숫자 · 나열 · 용어 규칙만 있습니다. 문자열 추적표 · 번역 키 · 서버 오류를 사용자 문구로 바꾸는 구현 흐름은
cc-writing:product-writing 과 cc-i18n:failure-message-i18n 이 맡습니다. product-writing 이 찾는
voice.md 가 프로젝트에 없으면 이 문서를 그 자리에 씁니다. 글자의 색 · 크기 · 글꼴은 이 문서가 정하지 않습니다. 모두 CoUI 토큰을 따르고, 어느 자리에 어느 토큰을 쓰는지는
token-usage.md 에 있습니다.
1. 한눈에#
- 해요체. 한 화면에 높임 수준은 하나입니다.
- 한 문장 25자 안팎. 제목은 한 문장, 본문은 두 문장까지입니다.
- 느낌표 · 이모지 · 과장 · 문장 끝 물결표를 쓰지 않습니다.
- 버튼과 행동 메뉴는 동사로 끝냅니다. 「확인」 은 쓰지 않습니다.
- 실패 문구는 「무엇이 안 됐는지 · 그대로인 것 · 할 일」 세 칸입니다.
- 숫자에는 단위를 붙입니다.
- 화면 글자의 낱말 나열은 「결제·환불」 처럼 붙여 씁니다. 띄어 쓴 「 · 」 는 캡션 · 이름 · 문서에서만 씁니다.
- 캡션 · 문서에서 화면 글자를 가리킬 때는 「」 로 감쌉니다.
- 도메인 용어는 그 업계 사용자의 말을 씁니다. 개발 용어는 화면에 드러내지 않습니다.
2. 말투 — 해요체#
-
고객 화면도, 관리자 · 사내 도구 화면도 해요체입니다. 참고 구현(한 사내 도구의 v2 시안)에서는 관리자 화면에만 합니다체가 섞여 있었습니다. 같은 서비스 안에서 말투가 갈리면 여러 곳에서 모아 붙인 화면으로 읽힙니다. 이 혼용은 검사기가 잡지 않습니다.
cc-blueprint/rules/figma-slop-tells.md§S9 는 해요체 · 합쇼체를 같은 높임으로 묶어 해라체 · 반말과 섞일 때만 셉니다. 해요체 통일은 이 문서의 규칙이고 11절 검사 목록에서 봅니다. - 사실은 「~해요」 「~했어요」, 안내는 「~해 주세요」, 가능은 「~할 수 있어요」, 물음은 「~할까요?」 로 씁니다.
- 수동태를 쓰지 않습니다. 「저장되었습니다」 가 아니라 「저장했어요」 입니다. 서비스가 한 일은 서비스가 주어입니다.
- 라벨 · 칩 · 탭 · 이동 메뉴는 명사로 끝나도 됩니다(「접수 대기」 「수강생」 「설정」). 높임 수준은 문장으로 끝나는 글자에만 적용됩니다.
- 화면 글자에서는 외국어 · 숫자 뒤 조사를 붙여 씁니다(「Pro로 바꾸기」 「3명이 기다려요」). 문서에서는 이 저장소 관례대로 띄어 씁니다.
- 변수 뒤에 조사를 병기하지 않습니다(「{이름}(을)를」 금지, §S8). 조사가 바뀌면 문장을 바꿉니다. 「이 상품을 삭제할까요?」 로 묻고 이름은 본문에 따로 둡니다.
| 쓰지 않음 | 씀 |
|---|---|
| 「저장되었습니다」 | 「저장했어요」 |
| 「입력해 주시기 바랍니다」 | 「입력해 주세요」 |
| 「삭제하시겠습니까?」 | 「삭제할까요?」 |
| 「이용하실 수 있습니다」 | 「쓸 수 있어요」 |
| 「처리 중입니다」 | 「보내는 중이에요」 (무엇을 하는지 적습니다) |
3. 길이 — 한 문장 25자 안팎#
- 글자 수는 공백을 포함해 셉니다. 제목 · 토스트 메시지 · 알림 제목은 25자 안에서 한 문장입니다.
- 본문은 두 문장까지입니다. 문장마다 25자 안팎입니다. 세 문장이 필요하면 본문이 아니라 화면 구조(목록 · 단계 · 표)로 풉니다.
- 버튼은 2~8자입니다. 버튼 글자는 줄을 바꾸지 않습니다. 길어지면 대상을 빼고 동사만 남깁니다(「배송지 바꾸기」 → 「바꾸기」 는 패널 제목이 「배송지」 일 때만).
- 마침표: 문장 하나로 끝나는 글자(제목 · 토스트 메시지 · 버튼 · 라벨)에는 찍지 않습니다. 두 문장 이상인 본문에는 찍습니다.
- 한글은 어절 경계에서만 줄을 바꿉니다(§S11). 글자 노드 폭을 줄여 낱말이 쪼개지면 문장을 줄입니다.
4. 느낌표 · 이모지 · 과장 금지#
- 느낌표는 성공 문구에서도 쓰지 않습니다. 「저장했어요!」 가 아니라 「저장했어요」 입니다.
- 이모지 · 그림 문자 · 장식 기호(★ ✓ →)를 글자에 넣지 않습니다(§S5). 상태는 CoUI 아이콘과 Status 점이 보여 줍니다.
- 문장 끝 물결표(「환영해요~」)는 과장으로 봅니다. 범위를 나타내는 물결표(「월~금」, 7절)는 씁니다.
- 과장 · 재촉 · 감탄은 사실로 바꿉니다.
| 쓰지 않음 | 씀 |
|---|---|
| 「완벽하게 저장했어요」 | 「저장했어요」 |
| 「지금 바로 시작하세요」 | 「시작하기」 (버튼) |
| 「놀라운 속도로 처리해요」 | 「보통 1분 안에 끝나요」 |
| 「무제한으로 쓸 수 있어요」 | 「횟수 제한이 없어요」 (사실일 때만) |
| 「환영해요~ 반가워요!」 | 「김지원님, 오늘 접수 3건이 기다려요」 |
| 「최고의 선택이에요」 | (삭제) |
5. 버튼 · 메뉴는 동사로 끝#
- 버튼 · 링크 · 행동 메뉴(드롭다운 · 컨텍스트 메뉴 · 「⋯」 안 항목) · 아이콘 버튼의 툴팁은 동사로 끝냅니다. 「~하기」 「~보기」 「~보내기」 꼴입니다.
- 이동 메뉴(사이드바 · 탭 · 하단 탭 · 설정 하위 메뉴)는 자리 이름이므로 명사입니다(「대시보드」 「멤버」 「수강생」).
- 「확인」 은 쓰지 않습니다. 무슨 일이 일어나는지 모르는 버튼이기 때문입니다. 대화상자의 실행 버튼은 행동을 그대로 적고(「수강 취소하기」), 알림만 하는 대화상자는 「닫기」 입니다.
- 고정 역할 두 글자 컨트롤은 예외입니다: 「취소」 「닫기」 (대화상자 · 시트 닫기), 「다음」 「이전」 (단계 이동). 그 자리 밖에서는 쓰지 않습니다.
- 주 행동 버튼의 글자는 페이지 제목이나 빈 상태의 문장과 같은 동사를 씁니다. 빈 상태 「아직 등록한 수강생이 없어요」 아래 버튼은 「수강생 등록하기」 입니다.
-
되돌리기 어려운 행동의 버튼에는 대상을 넣습니다(「삭제하기」 보다 「기록 삭제하기」). 무엇이 사라지는지 본문에 적는 규칙은
patterns.md에 있습니다.
| 도메인 · 자리 | 전 | 후 |
|---|---|---|
| 사내 도구 · 페이지 머리 | 「새 요청」 | 「요청 올리기」 |
| 사내 도구 · 상세 머리 | 「배포」 | 「운영에 배포하기」 |
| 사내 도구 · 결재 상세 | 「승인」 | 「승인하기」 |
| 병원 · 접수 화면 | 「접수」 | 「접수하기」 |
| 병원 · 예약 상세 | 「변경」 | 「시간 바꾸기」 |
| 학원 · 확인 대화상자 | 「확인」 | 「수강 취소하기」 |
| 학원 · 출석 화면 | 「출석」 | 「출석 확인하기」 |
| 커머스 · 주문 상세 | 「영수증」 | 「영수증 보기」 |
| 커머스 · 실패 알림 | 「재시도」 | 「다시 시도하기」 |
| 커머스 · 요금제 안내 | 「요금제 비교」 | 「요금제 보기」 |
6. 실패 문구 — 세 칸#
실패 문구는 세 칸으로 씁니다. 순서도 같습니다.
| 칸 | 내용 | CoUI 자리 |
|---|---|---|
| 무엇이 안 됐는지 | 사용자가 하려던 일을 주어로, 「~하지 못했어요」 | Alert title · EmptyState title · Toast message |
| 그대로인 것 | 사라지지 않은 것, 영향이 없는 것. 왜 안 됐는지는 그것이 할 일을 바꿀 때만 한 문장 더 | description 첫 문장 |
| 할 일 | 사용자가 다음에 할 수 있는 행동. 버튼이 있으면 버튼이 할 일입니다 | description 둘째 문장 또는 action |
-
내용이 남아 있는 영역의 실패는 CoUI Alert, 보여 줄 것이 없는 영역은 CoUI EmptyState(tone: failure), 행동 직후의 실패는 Toast(기록이 필요하면 Alert 도), 대화상자 안에서 난 실패는 그 대화상자
content의 Alert 입니다. 어느 알림을 어디에 두는지는patterns.md4절을 따릅니다. -
「오류가 발생했습니다」 「요청을 처리할 수 없습니다」 는 세 칸 어디에도 들어가지 않습니다. 오류 코드 · 예외 이름 · 서버 메시지는 화면에 보이지 않습니다. 사용자 행동 기준 문구로 바꾸는 방법은
cc-i18n:failure-message-i18n입니다. - 사용자를 탓하지 않습니다. 「잘못 입력했어요」 가 아니라 「이메일 형식이 맞지 않아요」 입니다.
| 도메인 · 자리 | 무엇이 안 됐는지 | 그대로인 것 | 할 일 |
|---|---|---|---|
| 병원 · 접수 Alert | 「접수를 보내지 못했어요」 | 「입력한 환자 정보는 그대로 있어요.」 | 「잠시 뒤 다시 보내 주세요.」 + 버튼 「다시 보내기」 |
| 커머스 · 결제 대화상자 안 Alert | 「결제하지 못했어요」 | 「주문은 아직 넣지 않았어요. 카드사가 결제를 거절했어요.」 | 대화상자 버튼 「카드 바꾸기」 |
| 사내 도구 · 배포 Alert | 「운영에 배포하지 못했어요」 | 「지금 운영 중인 버전은 그대로예요.」 | 「배포 기록을 확인하고 다시 배포해 주세요.」 + 버튼 「기록 보기」 |
같은 실패를 이렇게 쓰면 안 됩니다: 「오류가 발생했습니다 (REJECT_CARD_COMPANY)」 / 「요청을 처리할 수 없습니다. 다시 시도하세요.」 — 무엇이 안 됐는지도, 그대로인 것도, 할 일도 없습니다.
성공 문구는 한 문장입니다. 일어난 일을 그대로 적습니다(「초대 메일을 보냈어요」 「접수를 취소했어요」 「문서를 게시했어요」). 결과가 화면에 바로 보이면 성공 문구를 띄우지 않습니다(cc-designer:critique-restraint). 「되돌리기」 행동이 있는 Toast 는 예외입니다(patterns.md
1절).
7. 숫자는 단위와 함께#
- 단위 없는 숫자를 두지 않습니다. 「1,284」 가 아니라 「1,284명」 입니다. 무엇의 수인지 라벨이 있어도 단위는 붙입니다.
- 숫자와 단위는 붙여 씁니다: 「12일 남음」 「3,000원」 「62%」 「2.4GB」 「86건」.
- 천 단위에 쉼표를 찍습니다. 소수는 필요한 자리까지만 씁니다.
- 개수 비율은 「5개 중 3개」 로 씁니다. 「3 / 5」 는 숫자만 보이는 좁은 자리에서만 씁니다.
-
범위는 물결표입니다: 「월
금」 「9:0018:00」 「3~5일」. §S10 은 숫자끼리 맞닿은 범위 대시는 세지 않지만, 요일 · 단위가 끼면(「월–금」 「9시 – 18시」)판단으로 겁니다. 그래서 하우스 규칙으로 모두 물결표에 맞춥니다. - 0 은 「0건」 으로 씁니다. 값이 아직 없을 때만 「—」 를 둡니다(§S7). 「—」 는 「없음」 과 다릅니다.
- 시간은 하루 안이면 「12분 전」 「3시간 뒤」, 하루를 넘으면 날짜 「10월 16일」 로 씁니다. 다른 해면 연도를 붙입니다.
-
핵심 수치(KPI)는 큰 숫자 + 단위 + 설명 한 줄입니다. 설명은 비교나 기준입니다(「지난주보다 12명 많아요」 「오늘 09:00 기준」). 구성은
layout.md에 있습니다. -
CoUI Stat 은 숫자(
value)와 단위(unit)를 따로 받습니다 — 「1,284」 + 「명」. 단위는 숫자보다 작은 글자로 숫자 뒤에 붙어 그려집니다(부품 기본값). 숫자가 없을 때(「—」)는 단위를 그리지 않습니다.
8. 나열과 인용 — 「·」 와 「」#
화면 글자 안에서
-
낱말 나열은 맞춤법대로 가운뎃점을 붙여 씁니다: 「결제·환불」 「초·중·고」 「진료·수납」. 셋을 넘으면 줄을 바꾸거나 행을 나눕니다. 붙여 쓴 가운뎃점 나열도 §S10 이
판단으로 거르므로,cc-blueprint:design-self-check11번 L1 사유에 「맞춤법상 붙여 쓴 열거」 한 줄을 적습니다. -
값과 값은 한 글자 노드에 이어 붙이지 않습니다. 「3분 전 · 조회 120」 「제목 — 부제」 는 §S10 위반입니다. 값마다 자리를 나누고 간격(
space/*)으로 띄웁니다. Divider 는 간격으로 안 될 때만 둡니다(token-usage.md3절). 목록 행의 「제목 · 메타 · 상태 칩」 은 글자 하나가 아니라 자리 셋입니다. |/로 바꾸는 것은 고친 것이 아닙니다. 같은 지문입니다.
캡션 · 프레임 이름 · 섹션 이름 · 문서 · DDR 에서
-
띄어 쓴 「 · 」 로 잇습니다: 섹션 이름 「접수 · R-02 오늘 예약」, 캡션 「R-02 · 오늘 예약」, 요점 「접수 실패 · 입력한 환자 정보는 그대로 · 다시 보내기」. §S10 은 화면 프레임 밖 글자와 레이어 · 섹션 · 프레임 이름을 세지 않습니다. 캡션 규칙은
figma-file.md4절에 있습니다. - 이 문서처럼 설명 글에서도 띄어 쓴 「 · 」 를 씁니다.
「」
- 캡션 · 문서 · 스펙 · DDR · 커밋 메시지에서 화면에 보이는 글자를 가리킬 때 「」 로 감쌉니다: 「다시 보내기」 버튼을 누르면 접수를 다시 보냅니다.
- 화면 안에서 사용자가 지은 이름을 인용해야 하면 「」 하나만 씁니다. ‘ ’ · " " 를 섞지 않습니다. 가능하면 인용을 피하고 이름을 제목 아래 자기 자리에 둡니다. 조사 문제도 함께 사라집니다.
9. 도메인 용어#
그 업계 사용자가 하루에 쓰는 말을 씁니다. 서비스의 용어집이 있으면 그것이 먼저입니다. 사용자의 말을 근거 없이 업계 전문 용어나 일반 단어(「등록」 「처리」 「항목」)로 바꾸지 않습니다.
| 뜻 | 병원 | 학원 | 커머스 | 사내 도구 |
|---|---|---|---|---|
| 서비스를 받는 사람 | 환자 (보호자) | 수강생 (학부모) | 고객 | 구성원 |
| 시작하는 행동 | 접수 | 수강 신청 | 주문 | 요청 · 결재 올리기 |
| 기다리는 상태 | 대기 (「대기 3번」) | 대기자 | 배송 준비 중 | 승인 대기 |
| 끝난 상태 | 진료 완료 | 수강 완료 · 수료 | 배송 완료 | 승인됨 · 반려됨 |
| 되돌리는 행동 | 접수 취소 | 수강 취소 | 주문 취소 · 환불 | 반려 · 회수 |
| 돈 | 수납 · 진료비 | 수강료 · 납부 | 결제 · 환불 | 정산 · 예산 |
| 바꾸는 행동 | 예약 변경 | 반 이동 · 시간 변경 | 배송지 변경 · 옵션 변경 | 다시 요청 |
| 담당 | 의료진 · 진료과 | 강사 · 반 | 판매자 · 배송 | 결재자 · 승인자 |
- 같은 글자가 도메인마다 다른 뜻입니다. 병원의 「예약」 은 진료 예약, 커머스의 「예약」 은 예약 구매입니다. 한 서비스 안에서 한 뜻으로만 씁니다.
- 「등록」 「처리」 가 그 업계의 말이 아닐 때는 구체 단어로 바꿉니다. 「환자 등록」 → 「접수」, 「주문 처리 완료」 → 「배송 완료」. 학원의 「수강생 등록」처럼 그 업계가 실제로 쓰는 말이면 그대로 둡니다.
-
같은 대상의 이름은 앱 · 콘솔 · 이메일 · 알림에서 같아야 합니다. 이름을 모으고 추적하는 방법은
cc-writing:product-writing입니다.
10. 개발 용어를 화면에 드러내지 않기#
| 화면에 쓰지 않는 말 | 대신 쓰는 말 |
|---|---|
| 「에러」 「오류가 발생했습니다」 | 무엇이 안 됐는지 그대로: 「저장하지 못했어요」 |
| 오류 코드 (「REJECT_CARD_COMPANY」) | 「카드사가 결제를 거절했어요」. 코드는 로그와 문의 번호에만 |
| 「서버」 「API」 「요청 실패」 | 「연결이 끊겼어요」 「불러오지 못했어요」 |
| 「타임아웃」 | 「응답이 늦어요. 잠시 뒤 다시 시도해 주세요.」 |
| 「세션이 만료되었습니다」 「토큰」 | 「로그인이 풀렸어요. 다시 로그인해 주세요.」 |
| 「인증 실패」 | 「이메일이나 비밀번호가 맞지 않아요」 |
| 「유효하지 않은 값」 「입력값」 「필드」 | 「형식이 맞지 않아요」 「쓸 수 없는 글자가 있어요」, 「칸」 |
| 「데이터」 | 「정보」 「내용」 또는 구체 이름(「수강생 명단」) |
| 「동기화」 | 「최신으로 맞추기」 「다시 불러오기」 |
| 「로딩」 | 「불러오는 중」 |
| 「캐시」 「쿠키」 「스토리지」 | 보통 보이지 않습니다. 필요하면 「저장 공간」 |
| 「배포」 「빌드」 「스테이징」 | 고객 화면은 「게시」 「반영」. 개발팀이 쓰는 사내 도구는 그 팀의 말이면 됩니다 |
| 「활성화」 「비활성화」 「true」 「false」 | 행동은 「켜기」 「끄기」, 상태는 「켜짐」 「꺼짐」 |
| 「null」 「N/A」 「undefined」 | 값 없음은 「—」, 설명이 필요하면 「아직 없어요」 |
| 「권한이 없습니다」 「403」 「404」 | 「이 기능은 관리자만 쓸 수 있어요」 「페이지를 찾을 수 없어요」 |
| 「~되었습니다」 (수동태) | 「~했어요」 |
| CoUI 부품 이름 (Alert · Toast · destructive · ghost · Badge) | 화면 글자와 캡션에 쓰지 않습니다. 문서 · DDR 에서만 씁니다 |
- 사용자가 이미 쓰는 말은 그대로 씁니다: 이메일 · 비밀번호 · 링크 · 앱 · 로그인 · 알림 · 업로드 · 다운로드.
-
주문번호 · 접수번호 같은 식별자는 사용자가 다른 사람에게 말해야 할 때만 보이고, 라벨과 함께 둡니다(「주문번호 ORD-2041」). 고정폭 글자 자리는
layout.md에 있습니다.
11. 검사 목록#
화면을 넘기기 전에 글자만 따로 봅니다.
- 한 화면에 높임 수준이 하나이고 해요체입니다.
- 제목 · 토스트 메시지는 25자 안의 한 문장, 본문은 두 문장 안입니다.
- 느낌표 · 이모지 · 과장 · 문장 끝 물결표가 없습니다.
- 버튼 · 행동 메뉴가 동사로 끝나고 「확인」 이 없습니다.
- 실패 문구에 세 칸이 모두 있고 오류 코드가 없습니다.
- 모든 숫자에 단위가 있습니다.
- 화면 글자 안에 띄어 쓴 「 · 」 와 대시 구분이 없습니다.
- 변수 뒤 조사 병기가 없습니다.
- 개발 용어가 없고, 도메인 용어가 서비스 용어집과 같습니다.
-
복제한 화면의 글자가 복제 원본의 값(「수강생 48명」 「정산 내역」)이나 부품 기본 문구로 남아 있지 않습니다. 부품 기본 문구는
cc-blueprint:design-self-check10번이 잡지만, 화면마다 다른 글자는 비교하지 않으므로 복제 원본의 값은 스크린샷으로 봅니다(figma-file.md6절).
관련 문서#
-
cc-writing:product-writing— 문자열 추적표 · 번역 키 · 상태 전이 대조. 이 문서를voice.md로 읽습니다. cc-i18n:failure-message-i18n— 서버 · 도메인 실패를 사용자 행동 기준 문구로 바꾸는 구조.-
cc-blueprint/rules/figma-slop-tells.md§S5 · §S8 · §S9 · §S10 · §S11 — 그림 문자 · 조사 병기 · 높임 혼용 · 구분 기호 · 어절 줄바꿈 검사. cc-designer:critique-restraint— 결과가 보이는데 띄우는 성공 알림, 되돌릴 수 있는 동작의 확인 창.cc-designer:ix-error-handling— 실패 처리 일반론.-
patterns.md— Alert · Toast · EmptyState · Dialog 를 어디에 두는지.layout.md— KPI · 목록 행 · 고정폭 자리.token-usage.md— 글자 토큰.