From 48e2dfaf38e84a146c04339dcc629ead8e902955 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sat, 4 Jul 2026 02:48:15 +0900 Subject: [PATCH] docs: add development standards and guidelines (2026-07) - Input validation pattern: client + server dual validation - Korean phone number handling: supported formats and regex - Message content length limits: 10-5000 characters - DTO and DataAnnotations rules - Telegram notification integration pattern - On-site validation checklist for new forms Establishes development standards for all future features. Co-Authored-By: Claude Haiku 4.5 --- CLAUDE.md | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index e855224..5face9f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,6 +10,141 @@ 이 파일은 실행 절차, 서버 메모, 과거 이력만 둔다. 아키텍처/UX/콤보 기준은 위 문서를 따른다. +## 🎯 **개발 핵심 지침 (Development Standards 2026-07)** + +### 입력 검증 패턴 (Validation Pattern) + +**원칙: 클라이언트 + 서버 이중 검증** + +#### 1. 클라이언트 (프론트엔드) +- ✅ 실시간 마스킹 (사용자 입력하면서 자동 포맷팅) +- ✅ 실시간 피드백 (에러 메시지 즉시 표시) +- ✅ 유효성 검사 후 제출 차단 +- ✅ 문자 카운터 (예: "현재: 50/5000") + +**예시: 전화번호** +```javascript +// 입력: 01012345678 → 표시: 010-1234-5678 +// 정규식: ^(0(2|3[1-3]|4[1-4]|...|70|50[5-9])\d{7,8}|0\d{9,10})$ +``` + +#### 2. 서버 (백엔드) +- ✅ DTO 어노테이션 (DataAnnotations) +- ✅ 서비스 로직 검증 (명확한 에러 메시지) +- ✅ 데이터베이스 제약 조건 + +**패턴: InquiryService.cs** +```csharp +// 1. DTO 레벨 +public class SubmitInquiryDto +{ + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [RegularExpression(@"^(0(2|3[1-3]|...")] + public string Phone { get; set; } + + [StringLength(5000, MinimumLength = 10)] + public string Message { get; set; } +} + +// 2. 서비스 로직 +public async Task SubmitAsync(...) +{ + if (string.IsNullOrWhiteSpace(message)) + throw new ValidationException("문의 내용을 입력하세요."); + + var trimmedMessage = message.Trim(); + if (trimmedMessage.Length < 10) + throw new ValidationException("문의 내용은 최소 10자 이상이어야 합니다."); +} +``` + +### 한국 전화번호 처리 표준 + +**지원 형식:** +- 고정전화: `02-123-4567`, `031-1234-5678` +- 휴대폰: `010-1234-5678`, `011-1234-5678` +- VoIP: `070-1234-5678`, `0505-1234-5678` + +**포맷팅 규칙:** +- 2-3자리 국번 + 3-4자리 국번 뒤 + 4자리 번호 +- 고정전화(10자): `XXXX-XXX-XXXX` (4-3-3) +- 휴대폰(11자): `XXX-XXXX-XXXX` (3-4-4) + +**정규식:** +```csharp +private static readonly Regex PhoneRegex = new( + @"^(0(?:2|3[1-3]|4[1-4]|5[1-5]|6[1-4]|70|50[5-9]|[7-9](?:\d{1,2})?)\d{7,8}|0\d{9,10})$"); +``` + +### 메시지 내용 길이 제한 표준 + +**규칙:** +- 최소: 10자 (너무 짧은 내용 방지) +- 최대: 5000자 (DB 및 성능) + +**적용:** +- 프론트엔드: `