검증카드 — joi/zod/pydantic/validator.js → 한선씨 대응 (파동① 웨이브2)
개요
crowny-rpnkit 라이브러리카드 시리즈("존재≠동작" 검증 웨이브)의 일환으로, joi/zod/pydantic/ validator.js가 제공하는 필수필드·타입검사·범위·패턴(이메일/전화)·스키마 기반 객체 검증을 한선씨 라이브러리로 어떻게 대응시키는지 실측 카드를 작성했다. 테스트카드.md(파동① 1차 산출물)의 방법론(단위테스트.한선 확인같음으로 버그 동작까지 회귀 고정)을 그대로 따랐다.
무엇을 했는지
- 인벤토리:
/Users/ef/CrownyOS/crownyc/pkg/libs/에서 검증 관련 6개 파일 확인
- 실측으로 치명 함정 3건 확인 (전부 값단위 컴파일+실행 재현):
맵꺼내()의 없는키
센티넬(-1)을 문자열변환()하면 "-1"(길이2)이 되어 "빈 문자열=필수누락" 체크가 항상 거짓.
- 요청검증.한선 규칙추가()가 저장 자체를 안 함 — 같은 센티넬 오판으로 규칙목록이 배열
대신 정수 -1이 되어 이후 추가() 호출이 조용한 no-op. 범위/길이/패턴 규칙이 전멸.
- 범위 마스킹으로 인한 재현성 낮은 부작용: 타입검사.한선의 범위검증은 실제 동작하지만,
허용범위가 음수를 포함하면(-1이 범위 내) 필수누락이 완전히 무력화되고, 양수전용 범위면
"우연히" 걸린다 — 스키마 설계자가 어떤 최소값을 골랐는지에 좌우되는 위험한 불일치.
- 부가 발견: SQL안전()이 대소문자 구분해 소문자 SQL 키워드(drop/union)를 조용히 통과
(보안 함정), 정규식고급.한선의 문자클래스 반복(quantifier 없이 \d\d 등)이 항상 무매칭,
폼검증.한선은 hanseonc_high로 컴파일 자체가 실패(RPN 문법 오염).
- 정본 판정:
검증입력.한선(평면배열 기반, 필수/이메일/SQL/XSS/경로 전부 정확 동작) +
타입검사.한선(범위검증만 신뢰, 필수누락은 별도 이중검증 필요) 조합을 정본으로 권고.
요청검증.한선은 필수/범위 기능이 죽어있어 단독 사용 금지.
- 관용구 작성: 정규식고급.한선의 문자클래스 반복 함정을 우회하는 전화번호 형식 수동
부분()+자리별 숫자문자 검사)를 작성·검증.
- 크라우니코드 학습: 5개 신규 intent 등록(val_스키마필수누락_조용한통과 등).
관련 파일
- 카드 본문:
/Users/ef/crowny-rpnkit/라이브러리카드/검증카드.md - 검증 하네스:
/Users/ef/crowny-rpnkit/라이브러리카드/데이터검증_하네스.sh(5/5 PASS) - 예제 5종:
/Users/ef/crowny-rpnkit/라이브러리카드/예제/검증/*.한선 - 대상 라이브러리:
/Users/ef/CrownyOS/crownyc/pkg/libs/{검증입력,요청검증,타입검사,검증,폼검증}.한선 - 참고 카드:
/Users/ef/crowny-rpnkit/라이브러리카드/테스트카드.md(방법론),정규식카드.md(패턴 보조)
잔여 이슈 (파동②로 이관)
- P0: 요청검증.한선/타입검사.한선 필수필드 검증을
맵있나()(opcode751) 기반으로 재작성. - P0: 요청검증.한선 규칙추가() 저장 로직을
맵있나()기반으로 재작성. - P1: SQL안전() 대소문자 정규화(호출 전 소문자() 적용 또는 라이브러리 내부 수정).
- P1: 정규식고급.한선 문자클래스 반복 지원 — 정규식카드.md P1(파동② 정규식 정본화)에 편입.
- P2: 요청검증.한선/타입검사.한선 통합 신규 정본 라이브러리 설계.
- P3: 폼검증.한선 hanseonc_high 문법으로 전면 재작성 또는
.rpn.한선으로 재분류.