fix: 화면 · 알림 · 오류 문구를 사용자에게 말하는 말투로 고친다 #15

Closed
ttipo wants to merge 0 commits from fix/ui-copy-tone into main
Owner

무엇을 · 왜

전 직원 전환(11-05) 직후 실제 화면을 본 사용자 지적 — 문구가 설계 문서처럼 규칙을 적어 둔 말투라는 것. 예: "메일 서버에 계정이 있는 직원입니다 — 이름과 주소만 보입니다.", "「@도메인」은 그 도메인에서 오는 메일 모두입니다."
직원이 매일 보는 화면 · 알림 · 오류 문구를 사용자에게 말하듯(무엇이 되는지 · 무엇을 하면 되는지) 다시 썼다.

  • 규칙(디자인 README 새 절 「화면 문구 — 사용자에게 말하듯」 · vue3 스킬 점검 목록): 줄표로 잇지 않기 · 「」 대신 [단추 이름] · 만든 쪽 말(메일 서버 · 엔진 · 판정) 빼기 · 규칙을 정의하듯 쓰지 않기 · 가운뎃점 나열은 쉼표 · 존댓말 "~합니다 · ~해 주세요"(해요체로 바꾸지 않음) · 위험 문구는 겁주지 않되 분명히 · 한도 · 날짜 · 개수는 그대로.
  • 화면(ddfb2d1): shared/constants 열여섯 파일과 템플릿 · 유틸의 236곳(화면 낭독기 이름 · title · placeholder 포함). 예 — "회사 메일을 쓰는 직원이라 이름과 메일 주소만 보입니다.", "차단한 주소에서 온 메일은 스팸메일함으로 옮겨지고, 부재중 자동 응답도 보내지 않습니다. @spam.example 처럼 @로 시작해 넣으면 그 도메인에서 오는 메일을 모두 막습니다."
  • 서버(0021c0a):
    • 오류 문구 41개 가운데 7개 — AUTH_006 · VAL_001 · FILE_003 · FILE_004 · MAIL_001 · MAIL_013 · CONTACT_002. 코드 · HTTP 상태는 그대로, sync:error-codes 로 frontend · flutter 사전을 다시 만들었다.
    • 받은편지함 알림 메일 세 통(줄표 · "이 계정의" · "판정" 빼기, 메뉴 경로를 화면처럼 "웹메일의 [설정] → [앱 비밀번호]"). 링크 없음 · 이스케이프 · 정화는 그대로.
    • 본문에 넣는 대용량 첨부 덩이의 기한 줄 · 영어 줄. 표시(data-ara-large-files · 주석)와 표 모양은 그대로이고, 배포 전에 붙잡아 둔 발송(예약 — 엔진 한도 7일)의 옛 글 덩이도 보내기 취소 때 떼도록 LEGACY_BLOCK_WORDINGS 를 두었다(7일 뒤 지워도 된다).
  • 문서(cda4093 · cdebcb8 · 1171593): 디자인 README 가 옮겨 적은 문구, 계약의 화면 · 서버 문구, .claude/rules/error-codes.md 공통 표(AUTH_006 · VAL_001).

판단해서 정한 것 (리뷰에서 봐 주세요)

  1. 필터 적용 알림 "필터를 받은편지함에 적용하는 중" → "필터로 받은편지함을 정리하는 중"(체크 칸 이름 "이미 있는 메일에도 적용"은 그대로).
  2. MAIL_001 "메일 서버와 연결할 수 없습니다" → "메일 서비스에 연결할 수 없습니다" — 가장 자주 보이는 장애 문구.
  3. VAL_001 "입력하신 내용을 다시 확인해 주세요. 빠진 칸이 있거나 형식이나 길이가 맞지 않습니다." — 길이 · 개수 한도에도 나와 "길이"를 넣었다.
  4. 알림 메일 맨 아래 "…링크는 누르지 마세요" → "…링크가 있다면 누르지 않도록 주의해 주세요"(직원 공지 말투 기준).
  5. 2단계 필수 제목 "켜야 합니다" → "켜 주세요"(필수라는 무게는 부제 "회사 정책에 따라 …").

고치지 않은 것: 운영 도구(관리자용 CLI)의 글, 디자인 보드(*.dc.html)의 옛 글(그 시점 기록).

확인 방법

  • frontend: npm run lint · npm run type-check · npm run test:unit -- --run(149 파일 / 2,354) · TZ=UTC 로도 2,354 · npm run build-only.
  • backend: 저장소를 마운트하지 않은 임시 복사본 Linux 컨테이너(node 24.22.1 · npm 11.6.2)에서 npm ci · lint · jest 163 스위트 / 3,209 · build. 컨테이너에서 다시 돌린 sync:error-codes 결과가 커밋한 생성 파일과 바이트까지 같다(LF).
  • flutter: flutter test --no-pub test/error_lexicon_test.dart(5) · 생성 파일 flutter analyze No issues.
  • 화면 확인: 설정 › 차단한 주소 머리, 주소록 › 사내 직원 머리, 2단계 인증 · 앱 비밀번호 · 로그인 기록 화면, 대용량 첨부 쓰기 · 읽기 · 내려받기 화면의 글.

영향 범위

  • backend — 오류 문구 · 알림 메일 · 대용량 덩이 글
  • frontend — 화면 문구 · 생성 사전
  • flutter — 생성 사전(문구만)
  • docker / 인프라
  • 규칙 문서(.claude/) — rules/error-codes.md 공통 표, skills/vue3 점검 목록

공유 계약: 에러 코드 사전의 문구만 바꿨다(코드 · HTTP 상태 · 분기는 그대로). 세 스택 모두 생성 파일로 같은 글을 받는다 — 클라이언트는 코드로 분기하므로 동작은 바뀌지 않는다.

체크리스트

  • 린트/분석 통과 (Warning 0) · 변경 영역 테스트 통과
  • 주석 한국어, 매직 넘버·하드코딩 문자열 없음
  • 사용자 노출 실패는 모두 에러 코드와 함께 처리 (BusinessException / error.code 분기)
  • 에러 코드를 바꿨다면 npm run sync:error-codes 실행 후 생성 파일까지 커밋
  • 민감정보 미커밋 (*.example 값은 placeholder)
  • 로그에 비밀번호·토큰·요청 본문 전체가 남지 않음 — 해당 없음

운영 반영: 서버 B 에서 git pull 뒤 backend · frontend 다시 빌드(up -d --build --no-deps backend frontend). DB · 메일 엔진은 그대로.

🤖 Generated with Claude Code

## 무엇을 · 왜 전 직원 전환(11-05) 직후 실제 화면을 본 사용자 지적 — 문구가 설계 문서처럼 규칙을 적어 둔 말투라는 것. 예: "메일 서버에 계정이 있는 직원입니다 — 이름과 주소만 보입니다.", "「@도메인」은 그 도메인에서 오는 메일 모두입니다." 직원이 매일 보는 화면 · 알림 · 오류 문구를 **사용자에게 말하듯**(무엇이 되는지 · 무엇을 하면 되는지) 다시 썼다. - **규칙**(디자인 README 새 절 「화면 문구 — 사용자에게 말하듯」 · vue3 스킬 점검 목록): 줄표로 잇지 않기 · 「」 대신 [단추 이름] · 만든 쪽 말(메일 서버 · 엔진 · 판정) 빼기 · 규칙을 정의하듯 쓰지 않기 · 가운뎃점 나열은 쉼표 · 존댓말 "~합니다 · ~해 주세요"(해요체로 바꾸지 않음) · 위험 문구는 겁주지 않되 분명히 · 한도 · 날짜 · 개수는 그대로. - **화면**(ddfb2d1): `shared/constants` 열여섯 파일과 템플릿 · 유틸의 236곳(화면 낭독기 이름 · title · placeholder 포함). 예 — "회사 메일을 쓰는 직원이라 이름과 메일 주소만 보입니다.", "차단한 주소에서 온 메일은 스팸메일함으로 옮겨지고, 부재중 자동 응답도 보내지 않습니다. @spam.example 처럼 @로 시작해 넣으면 그 도메인에서 오는 메일을 모두 막습니다." - **서버**(0021c0a): - 오류 문구 41개 가운데 7개 — AUTH_006 · VAL_001 · FILE_003 · FILE_004 · MAIL_001 · MAIL_013 · CONTACT_002. **코드 · HTTP 상태는 그대로**, `sync:error-codes` 로 frontend · flutter 사전을 다시 만들었다. - 받은편지함 알림 메일 세 통(줄표 · "이 계정의" · "판정" 빼기, 메뉴 경로를 화면처럼 "웹메일의 [설정] → [앱 비밀번호]"). 링크 없음 · 이스케이프 · 정화는 그대로. - 본문에 넣는 대용량 첨부 덩이의 기한 줄 · 영어 줄. 표시(`data-ara-large-files` · 주석)와 표 모양은 그대로이고, 배포 전에 붙잡아 둔 발송(예약 — 엔진 한도 7일)의 옛 글 덩이도 보내기 취소 때 떼도록 `LEGACY_BLOCK_WORDINGS` 를 두었다(7일 뒤 지워도 된다). - **문서**(cda4093 · cdebcb8 · 1171593): 디자인 README 가 옮겨 적은 문구, 계약의 화면 · 서버 문구, `.claude/rules/error-codes.md` 공통 표(AUTH_006 · VAL_001). ### 판단해서 정한 것 (리뷰에서 봐 주세요) 1. 필터 적용 알림 "필터를 받은편지함에 적용하는 중" → "필터로 받은편지함을 정리하는 중"(체크 칸 이름 "이미 있는 메일에도 적용"은 그대로). 2. MAIL_001 "메일 서버와 연결할 수 없습니다" → "메일 서비스에 연결할 수 없습니다" — 가장 자주 보이는 장애 문구. 3. VAL_001 "입력하신 내용을 다시 확인해 주세요. 빠진 칸이 있거나 형식이나 길이가 맞지 않습니다." — 길이 · 개수 한도에도 나와 "길이"를 넣었다. 4. 알림 메일 맨 아래 "…링크는 누르지 마세요" → "…링크가 있다면 누르지 않도록 주의해 주세요"(직원 공지 말투 기준). 5. 2단계 필수 제목 "켜야 합니다" → "켜 주세요"(필수라는 무게는 부제 "회사 정책에 따라 …"). 고치지 않은 것: 운영 도구(관리자용 CLI)의 글, 디자인 보드(`*.dc.html`)의 옛 글(그 시점 기록). ## 확인 방법 - frontend: `npm run lint` · `npm run type-check` · `npm run test:unit -- --run`(149 파일 / 2,354) · `TZ=UTC` 로도 2,354 · `npm run build-only`. - backend: 저장소를 마운트하지 않은 임시 복사본 Linux 컨테이너(node 24.22.1 · npm 11.6.2)에서 `npm ci` · lint · jest 163 스위트 / 3,209 · build. 컨테이너에서 다시 돌린 `sync:error-codes` 결과가 커밋한 생성 파일과 바이트까지 같다(LF). - flutter: `flutter test --no-pub test/error_lexicon_test.dart`(5) · 생성 파일 `flutter analyze` No issues. - 화면 확인: 설정 › 차단한 주소 머리, 주소록 › 사내 직원 머리, 2단계 인증 · 앱 비밀번호 · 로그인 기록 화면, 대용량 첨부 쓰기 · 읽기 · 내려받기 화면의 글. ## 영향 범위 - [x] backend — 오류 문구 · 알림 메일 · 대용량 덩이 글 - [x] frontend — 화면 문구 · 생성 사전 - [x] flutter — 생성 사전(문구만) - [ ] docker / 인프라 - [x] 규칙 문서(.claude/) — `rules/error-codes.md` 공통 표, `skills/vue3` 점검 목록 > **공유 계약**: 에러 코드 사전의 **문구만** 바꿨다(코드 · HTTP 상태 · 분기는 그대로). 세 스택 모두 생성 파일로 같은 글을 받는다 — 클라이언트는 코드로 분기하므로 동작은 바뀌지 않는다. ## 체크리스트 - [x] 린트/분석 통과 (Warning 0) · 변경 영역 테스트 통과 - [x] 주석 한국어, 매직 넘버·하드코딩 문자열 없음 - [x] 사용자 노출 실패는 모두 에러 코드와 함께 처리 (`BusinessException` / `error.code` 분기) - [x] 에러 코드를 바꿨다면 `npm run sync:error-codes` 실행 후 생성 파일까지 커밋 - [x] 민감정보 미커밋 (`*.example` 값은 placeholder) - [x] 로그에 비밀번호·토큰·요청 본문 전체가 남지 않음 — 해당 없음 운영 반영: 서버 B 에서 `git pull` 뒤 backend · frontend 다시 빌드(`up -d --build --no-deps backend frontend`). DB · 메일 엔진은 그대로. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ttipo added 5 commits 2026-11-05 14:07:09 +09:00
설계 문서처럼 규칙을 적어 둔 문구가 많다는 사용자 지적(2026-11-05) — "메일 서버에 계정이 있는 직원입니다 —
이름과 주소만 보입니다." · "「@도메인」은 그 도메인에서 오는 메일 모두입니다." 같은 글. 화면 상수 · 템플릿 ·
문장을 만드는 유틸의 236곳을 무엇이 되는지 · 무엇을 하면 되는지로 다시 썼다: 줄표로 잇지 않고, 「」 대신
[단추 이름], 메일 서버 · 엔진 · 판정 같은 만든 쪽 말을 빼고, 존댓말은 그대로. 한도 · 날짜 · 개수는 빼지 않았다.
그 문구를 그대로 보던 spec 을 함께 맞췄다(lint · type-check · 단위 2,354 · TZ=UTC · build 통과).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README 에 「화면 문구 — 사용자에게 말하듯」 절(규칙 여덟과 예시)을 두고, README 가 옮겨 적은 화면 문구를
새 글로 맞춘다. vue3 스킬 점검 목록에 문구 줄을 더한다. 보드(*.dc.html)의 글은 11-05 전 것으로 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
일부 거절 알림 · 부재중과 필터의 노란 줄 · 필터 적용 진행과 끝 알림 · 이어 올리기 줄 — 화면 상수가
원본인 글을 ddfb2d1 의 새 글과 같게 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
화면 문구(ddfb2d1)와 같은 기준으로 서버가 짓는 글을 고친다.
- 오류 문구 41개 가운데 7개: AUTH_006(「자동」) · VAL_001(괄호 꼬리표 — 길이 한도에도 나와 "형식이나 길이"로) ·
  FILE_003 · FILE_004 · MAIL_001(메일 서버 → 메일 서비스) · MAIL_013 · CONTACT_002. 코드 · 상태는 그대로이고
  sync:error-codes 로 frontend · flutter 사전을 다시 만들었다.
- 받은편지함 알림 메일 세 통: 줄표 · "이 계정의" · "판정"을 빼고, 메뉴 경로를 화면처럼 [설정] → [앱 비밀번호] 꼴로.
  링크를 넣지 않는 규칙 · 이스케이프 · 정화는 그대로다.
- 본문에 넣는 대용량 첨부 덩이의 기한 줄 · 영어 줄. 표시 · 표 모양은 그대로이고, 배포 전에 붙잡아 둔 발송의
  텍스트 덩이(옛 글)도 보내기 취소 때 떼도록 LEGACY_BLOCK_WORDINGS 를 둔다(7일 뒤 지워도 된다).

임시 복사본 Linux 컨테이너에서 lint · jest 3,209 · build, frontend lint · type-check · 단위 2,354,
flutter error_lexicon 테스트 · analyze 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: 서버 글의 새 말투를 README · 계약 · 오류 코드 규칙에 맞춘다
CI (Flutter) / Flutter (analyze · test) (pull_request) Failing after 0s
CI / Backend (lint · type-check · test · e2e · build) (pull_request) Successful in 15m4s
CI / Frontend (lint · type-check · test · build) (pull_request) Successful in 14m25s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (pull_request) Successful in 2m22s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m50s
1171593724
README 11 · 13단계의 덩이 · 알림 메일 글(이 절이 원본), 계약의 덩이 글 · FILE_003 · FILE_004 · AUTH_006 ·
알림 메일 메뉴 경로, 오류 코드 규칙 표의 AUTH_006 · VAL_001 을 새 글과 같게 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ttipo changed title from fix(frontend): 화면 문구를 사용자에게 말하는 말투로 고친다 to fix: 화면 · 알림 · 오류 문구를 사용자에게 말하는 말투로 고친다 2026-11-05 14:07:50 +09:00
ttipo closed this pull request 2026-11-07 09:40:35 +09:00
Some checks are pending
CI (Flutter) / Flutter (analyze · test) (pull_request) Failing after 0s
CI / Backend (lint · type-check · test · e2e · build) (pull_request) Successful in 15m4s
CI / Frontend (lint · type-check · test · build) (pull_request) Successful in 14m25s
CI / Infra (compose · Dockerfile · nginx · 운영 스크립트) (pull_request) Successful in 2m22s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 11m50s

Pull request closed

Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ttipo/arasystem#15