flex.crowny.org — 순수 한선씨 xlsx 읽기 + 게이트웨이 연결
개요
사용자 우선순위 = "기존 엑셀파일을 보고 그 엑셀 기준으로 수정/신규 생성". 실제 (주)포네사운드 LED 견적(.xlsx)을
순수 한선씨로 직접 읽어 라인아이템을 추출하고, 견적엔진으로 재생성하는 파이프라인을 구축했다. 이어서 flex.crowny.org를 라이브 배포하고 게이트웨이/HTTPS를 연결했다.
무엇을 했는지
1. 새 VM 빌트인 버퍼파일읽기 (opcode 874)
- crownyc.c + hanseonc_high.c.
버퍼파일쓰기(857)의 대칭. 바이너리 파일 전체를 64KB STR캡 우회해 버퍼로 읽음(0x00 안전).
- 근본 공백:
읽기()는 char buf[65536] 스택버퍼라 89KB xlsx를 64KB에서 잘랐다.
- 빌드:
cc -O2 -o crownyc crownyc.c -lm -framework Security -framework CoreFoundation. 백업 crownyc.c.bak.bufread_*.
2. 순수 한선씨 xlsx 읽기 스택 (/Users/ef/crowny-flex/libs/)
- 인플레이트.한선 — DEFLATE(RFC1951) 디코더(비트리더+canonical Huffman puff.c 이식+stored/fixed/dynamic+LZ77). unzip과 byte-identical(sha256 일치).
- 집읽기.한선 — ZIP 로컬헤더 순차워크, STORE/DEFLATE 분기 → 엔트리 압축해제.
- 엑셀읽기.한선 — 공유문자열 로드 +
셀값(sh,"G18") 버퍼 바이트스캔.
- 엑셀견적.한선 — xlsx→라인아이템 추출→견적엔진 재생성. 엑셀날짜시리얼 변환, 수량소수 ×1000 정수스케일.
3. 검증
- sharedStrings.xml(5921B)/sheet1.xml(15567B) inflate sha256 unzip과 완전일치.
- LED견적 xlsx 4종(주왕교회/안디옥/예수비전/화광) 왕복 byte-identical.
- 주왕교회 재현: 공급가 45,360,000 / 부가세 4,536,000 / 총액 49,896,000 / 일금 사천구백팔십구만육천원정 / 날짜 2018-10-12 — 원본 완전일치.
4. flex.crowny.org 라이브 배포
- 크라우니 통합 서비스 프레임워크 등록(registry.psv, 포트 9787, 자가치유 데몬).
- 게이트웨이: crowny-ports.sh set + gateway.yaml flex 블록 +
gw restart(라우트는 런타임 설정로드라 재기동 필요).
- HTTPS: 전용 LE cert(certbot --cert-name flex.crowny.org) + stunnel SNI 블록 2개(8443/443) 수동추가 + SIGHUP. 공개 HTTPS 200 verify=0 확인, 브라우저 cert 에러(ERR_CERT_COMMON_NAME_INVALID) 해소. 기존 도메인 무회귀.
발견한 함정 (메모리 기록)
- STR풀 realloc: 리터럴좌변 + 버퍼/문자열 할당함수를 한 식에 연결 시 좌변 핸들 무효화 → 변수 대입 후 연결.
- 대형 ZIP 엔트리 CRC 손상: docx→hwpx 순차생성 시 40KB header.xml CRC 오염(누적 큐브아레나). 수정=HWPX→DOCX 순(클린 상태서 대형엔트리 먼저). 검증 통과.
관련 파일
- VM: /Users/ef/CrownyOS/crownyc/crownyc.c(opcode874), hanseonc_high.c
- libs: /Users/ef/crowny-flex/libs/{인플레이트,집읽기,엑셀읽기,엑셀견적,견적엔진,문서엔진}.한선
- 서비스: /Users/ef/crowny-services/registry.psv (flex 라인)
- 게이트웨이: gateway.yaml, 한선게이트웨이/stunnel-live{,-443}.conf, /Users/ef/crowny-data/certs/certbot/live/flex.crowny.org/
잔여 이슈
- 웹폼→견적생성 API(xlsx 업로드 역파서 + 폼 재생성) 미구현 — 현재 랜딩만
- 한선씨→.xlsx 출력기(역방향 쓰기) 미구현 (현 docx/hwpx/txt)
- flex 서비스 한선씨 마이그레이션(현 node 랜딩) — manage.sh is_migrated 경로 활용 가능