← 목록
한선씨 2026-06-21 3KB 읽기 4분

한선씨 SPA + 게이트웨이 결선 라이브 (세션3-웹 3·4단계)

개요

3단계(SPA: 라우터+템플릿+CSS)와 4단계(게이트웨이 결선)를 완료. 한선씨 풀스택 웹앱이 공개 URL http://hanweb.crowny.org 에서 라이브 — 한선씨 HTTP서버(네트워크.한선)가 한선씨 SPA(HTML+바이너리 WASM)를 서빙, 게이트웨이 자동결선, LaunchAgent 자가치유.

3단계 — SPA (라우터/템플릿/CSS)

  • 신규 라이브러리 pkg/libs/웹SPA.한선: 템플릿 헬퍼(요소/링크/네비항목/셸) + CSS생성() + (서버용)라우트파싱/라우트쿼리.
  • 데모 apps/SPA데모.한선: 3라우트(홈/항목/소개) + 해시 라우팅. 빌드 web/SPA.wasm.
  • 브라우저 web/SPA.html: JS가 location.hash 파싱 → 라우트코드+n 주입, hashchange 재렌더.
  • 핵심 함정 발견: runtime_mcu(toau2c/wasm 코어) 문자열은 바이트 인덱스(글자수가 "#/항목"→8바이트, 풀VM은 4문자)이고 부분() 반복이 풀 손상 → 한선씨 문자열 파싱은 wasm에서 불안정. 해법: 라우팅 파싱은 JS, 한선씨는 정수 라우트코드 숫자 디스패치 + 연결전용 템플릿(정상). 검증: 홈→항목5→6→소개→홈→404 전부 정확.

4단계 — 게이트웨이 결선 (라이브)

  • 바이너리 서빙 블로커: 풀 VM 읽기()가 .wasm(첫바이트 \0)을 truncate/UTF-8 손상(57418자/522498B). 한선씨가 바이너리 서빙 불가.
  • 해결 — VM 신규 opcode 파일소켓전송(856): C레벨 fread→write로 파일을 소켓에 그대로 스트림(문자열층 우회). wasm/이미지/폰트 모든 정적 바이너리 서빙 토대. 컴파일러 키워드+VM exec 추가, 백업→리빌드(-framework Security/CoreFoundation)→회귀(나눗셈 T·기존9/0·HTTP견고화15/15)→원자스왑(mv).
  • 네트워크.한선 헬퍼 파일서빙(연결,경로,타입) 추가.
  • 서버 apps/정적웹서버.한선: SPA.html(시작시 1회 캐시) + SPA.wasm(파일서빙). 안정성: per-request 읽기()/바이트수() 제거(GC없는 VM 누적 회피) → 20라운드 지속부하 생존.
  • 결선: crowny-ports.sh set hanweb.crowny.org 9943 → 게이트웨이 자동 핫리로드(404→200). HTTP 8080·HTTPS 8443 SNI 모두 200, wasm 바이트일치.
  • 자가치유: LaunchAgent com.crowny.hanweb(KeepAlive) — kill 시 즉시 재기동 검증.
  • 공개: 와일드카드 *.crowny.org → 112.144.147.144. http://hanweb.crowny.org 200(HTML+wasm 바이트일치, 공개 wasm 렌더 정상). HTTPS는 -k로 200(cert 미발급 → ACME는 cert 세션 잔여).

관련 파일

  • pkg/libs/웹SPA.한선, apps/SPA데모.한선, web/SPA.html+web/SPA.wasm
  • apps/정적웹서버.한선, web/정적웹서버.toau, ~/Library/LaunchAgents/com.crowny.hanweb.plist
  • VM: crownyc.c(opcode 856), hanseonc_high.c(키워드), pkg/libs/네트워크.한선(파일서빙)
  • runtime_mcu: 486 숫자변환/488 문자열변환/EQ-NEQ 문자열내용비교(rt_eq) (2단계서 추가)
  • 백업: crownyc.bak.filesend_*, hanseonc_high.bak.filesend_*

잔여 이슈

  • HTTPS cert: hanweb.crowny.org ACME 발급 필요(cert/gateway 세션). 현재 http만 클린.
  • VM wedge 가능성: 장수 한선씨 서버는 KeepAlive로 death는 복구하나, LISTEN-유지-무응답 wedge는 미감지 → 헬스체크 워치독 권장(feedback_aimed_longlived_server_wedge).
  • 라우트파싱/라우트쿼리는 풀 VM(서버)용 — wasm 클라이언트는 JS 라우팅 유지.