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

직렬화 검증카드 — YAML·CSV·바이너리버퍼 (pyyaml/csv/struct 대응)

개요

한선씨(hanseonc_high) 직렬화 라이브러리 3종(YAML.한선, CSV.한선, 바이트버퍼.한선+내장 버퍼)의 실제 지원 경계를 실측하고, /Users/ef/crowny-rpnkit/대응카드/SQL카드.md와 같은 방법론(대응표+검증 예제+함정전표+갭목록)으로 라이브러리카드/직렬화카드.md를 만들었다.

무엇을 했는지

  1. YAML.한선 실측: 평면 key:value는 완전 지원. 1단 중첩은 부모 키가 통째로 소실되고 자식 키가
최상위로 평탄화(구조 왜곡, 값은 맞지만 위치가 틀림). 배열(- item)은 100% 미지원 — 파싱 결과가 조용히 완전 공백(길이=0, 에러도 경고도 없음). 공백 없는 콜론(key:value)도 조용히 그 줄 전체가 소실.
  1. CSV.한선 실측 — 중대 발견: 기존 파일(및 완전 동일한 pkg/libs 사본)이 사실 RPN 저수준 방언으로
작성되어 있어 hanseonc_high로는 컴파일 자체가 실패(100+ 미정의변수 에러). hanseonc_rpn으로는 컴파일되지만 실행하면 @본문 점프 누락 + bare 함수호출 + == 미지원(RPN은 같다)이 겹쳐 무한루프 → 배열힙 OOM으로 죽는다(실측, timeout으로 강제종료). 대체 관용구로 (a) 단순 분리(",") 방식(따옴표 콤마 오분할 함정 실증)과 (b) RFC4180 유사 따옴표 인지 파서(정상/콤마포함/ 이스케이프따옴표 3케이스 검증 통과)를 작성해 카드에 수록.
  1. 버퍼 실증: 내장 핸들 기반 버퍼(opcode 390~399, 850·851·857·874)와 라이브러리 배열 기반
바이트버퍼.한선이 동일 함수명으로 서로 다른 구현(이름 충돌 위험) — 명확히 분리해 문서화. 신규 함정: 버퍼생성(n)은 length가 아니라 capacity(용량) n만 예약하고 논리길이는 0에서 시작, 버퍼바이트()로 쓴 위치까지만 길이가 자동 확장됨(4단계로 정밀 재현). 64KB 초과(100,044B) 파일을 버퍼파일읽기+버퍼파일쓰기로 byte-perfect 왕복 검증(cmp IDENTICAL), 대조로 읽기()가 정확히 65535자에서 절단됨을 재확인(ASCII 픽스처 기준; 임의 바이너리는 더 일찍 가변적으로 절단될 수 있음도 기록).

관련 파일

  • /Users/ef/crowny-rpnkit/라이브러리카드/직렬화카드.md — 카드 본문(대응표·경계매트릭스·함정전표·갭목록)
  • /Users/ef/crowny-rpnkit/라이브러리카드/직렬화검증.sh — 9/9 PASS 검증 게이트(재실행 가능)
  • /Users/ef/crowny-rpnkit/라이브러리카드/예제/직렬화/01~09_*.한선 — 검증된 예제 9개
  • 학습DB 추가: csv_따옴표인지_행파서_고수준검증완료, 버퍼파일읽기_64KB초과_왕복_검증완료

잔여 이슈 (갭 목록, 우선순위순)

  1. P0 CSV.한선이 실행 불가 — 고수준 문법으로 전면 재작성 필요(카드 §2-2 관용구가 초안 역할).
  2. P1 YAML 중첩 미지원 — 들여쓰기 레벨 스택 + 부모.자식 점표기 키 설계 필요.
  3. P1 YAML 배열 미지원 — 값 타입을 배열로 누적하는 구조 확장 필요(현재 반환형이 flat 배열이라
타입 태깅 설계 선행 필요).
  1. P2 버퍼 라이브러리/내장 이름 충돌 — 별칭 가져오기 표준화 또는 라이브러리 함수 개명.
  2. P3 대용량 CSV의 배열 4095 캡 적용 여부 — 미검증(SQL카드 §3-1과 동일 계열로 추정, 후속 검증 필요).
기존 파일(YAML.한선/CSV.한선/바이트버퍼.한선/JSON.한선)은 수정하지 않았다 — 전부 신규 카드/예제/검증 스크립트로만 산출.