← 목록
기타 2026-07-09 4KB 읽기 3분

검증카드 — joi/zod/pydantic/validator.js → 한선씨 대응 (파동① 웨이브2)

개요

crowny-rpnkit 라이브러리카드 시리즈("존재≠동작" 검증 웨이브)의 일환으로, joi/zod/pydantic/ validator.js가 제공하는 필수필드·타입검사·범위·패턴(이메일/전화)·스키마 기반 객체 검증을 한선씨 라이브러리로 어떻게 대응시키는지 실측 카드를 작성했다. 테스트카드.md(파동① 1차 산출물)의 방법론(단위테스트.한선 확인같음으로 버그 동작까지 회귀 고정)을 그대로 따랐다.

무엇을 했는지

  1. 인벤토리: /Users/ef/CrownyOS/crownyc/pkg/libs/에서 검증 관련 6개 파일 확인
(검증.한선, 검증입력.한선, 요청검증.한선, 타입검사.한선, 폼검증.한선) + 정규식고급.한선(정규식카드.md 정본 재사용).
  1. 실측으로 치명 함정 3건 확인 (전부 값단위 컴파일+실행 재현):
- 요청검증.한선/타입검사.한선 필수 필드 완전누락을 절대 못 잡음맵꺼내()의 없는키 센티넬(-1)을 문자열변환()하면 "-1"(길이2)이 되어 "빈 문자열=필수누락" 체크가 항상 거짓. - 요청검증.한선 규칙추가()가 저장 자체를 안 함 — 같은 센티넬 오판으로 규칙목록이 배열 대신 정수 -1이 되어 이후 추가() 호출이 조용한 no-op. 범위/길이/패턴 규칙이 전멸. - 범위 마스킹으로 인한 재현성 낮은 부작용: 타입검사.한선의 범위검증은 실제 동작하지만, 허용범위가 음수를 포함하면(-1이 범위 내) 필수누락이 완전히 무력화되고, 양수전용 범위면 "우연히" 걸린다 — 스키마 설계자가 어떤 최소값을 골랐는지에 좌우되는 위험한 불일치. - 부가 발견: SQL안전()이 대소문자 구분해 소문자 SQL 키워드(drop/union)를 조용히 통과 (보안 함정), 정규식고급.한선의 문자클래스 반복(quantifier 없이 \d\d 등)이 항상 무매칭, 폼검증.한선은 hanseonc_high로 컴파일 자체가 실패(RPN 문법 오염).
  1. 정본 판정: 검증입력.한선(평면배열 기반, 필수/이메일/SQL/XSS/경로 전부 정확 동작) +
타입검사.한선(범위검증만 신뢰, 필수누락은 별도 이중검증 필요) 조합을 정본으로 권고. 요청검증.한선은 필수/범위 기능이 죽어있어 단독 사용 금지.
  1. 관용구 작성: 정규식고급.한선의 문자클래스 반복 함정을 우회하는 전화번호 형식 수동
관용구(부분()+자리별 숫자문자 검사)를 작성·검증.
  1. 크라우니코드 학습: 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.한선으로 재분류.