문서 목차
이 페이지에서목차

문구 — 하우스 말투

이 문서는 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. 한눈에#

  1. 해요체. 한 화면에 높임 수준은 하나입니다.
  2. 한 문장 25자 안팎. 제목은 한 문장, 본문은 두 문장까지입니다.
  3. 느낌표 · 이모지 · 과장 · 문장 끝 물결표를 쓰지 않습니다.
  4. 버튼과 행동 메뉴는 동사로 끝냅니다. 「확인」 은 쓰지 않습니다.
  5. 실패 문구는 「무엇이 안 됐는지 · 그대로인 것 · 할 일」 세 칸입니다.
  6. 숫자에는 단위를 붙입니다.
  7. 화면 글자의 낱말 나열은 「결제·환불」 처럼 붙여 씁니다. 띄어 쓴 「 · 」 는 캡션 · 이름 · 문서에서만 씁니다.
  8. 캡션 · 문서에서 화면 글자를 가리킬 때는 「」 로 감쌉니다.
  9. 도메인 용어는 그 업계 사용자의 말을 씁니다. 개발 용어는 화면에 드러내지 않습니다.

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.md 4절을 따릅니다.
  • 「오류가 발생했습니다」 「요청을 처리할 수 없습니다」 는 세 칸 어디에도 들어가지 않습니다. 오류 코드 · 예외 이름 · 서버 메시지는 화면에 보이지 않습니다. 사용자 행동 기준 문구로 바꾸는 방법은 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-check 11번 L1 사유에 「맞춤법상 붙여 쓴 열거」 한 줄을 적습니다.
  • 값과 값은 한 글자 노드에 이어 붙이지 않습니다. 「3분 전 · 조회 120」 「제목 — 부제」 는 §S10 위반입니다. 값마다 자리를 나누고 간격(space/*)으로 띄웁니다. Divider 는 간격으로 안 될 때만 둡니다(token-usage.md 3절). 목록 행의 「제목 · 메타 · 상태 칩」 은 글자 하나가 아니라 자리 셋입니다.
  • | / 로 바꾸는 것은 고친 것이 아닙니다. 같은 지문입니다.

캡션 · 프레임 이름 · 섹션 이름 · 문서 · DDR 에서

  • 띄어 쓴 「 · 」 로 잇습니다: 섹션 이름 「접수 · R-02 오늘 예약」, 캡션 「R-02 · 오늘 예약」, 요점 「접수 실패 · 입력한 환자 정보는 그대로 · 다시 보내기」. §S10 은 화면 프레임 밖 글자와 레이어 · 섹션 · 프레임 이름을 세지 않습니다. 캡션 규칙은 figma-file.md 4절에 있습니다.
  • 이 문서처럼 설명 글에서도 띄어 쓴 「 · 」 를 씁니다.

「」

  • 캡션 · 문서 · 스펙 · 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-check 10번이 잡지만, 화면마다 다른 글자는 비교하지 않으므로 복제 원본의 값은 스크린샷으로 봅니다(figma-file.md 6절).

관련 문서#

  • 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 — 글자 토큰.

검색어를 입력하면 문서를 찾습니다.

↑ ↓ 이동 · Enter 열기Esc 닫기