← 목록
기타 2026-07-07 7KB 읽기 7분

크라우니게이트웨이 양자차세대블록체인서버화 (게이트웨이Q)

2026-07-07 세션. 요청 원문: 2026-07-07-요청-게이트웨이-양자차세대블록체인서버화.md

개요

수천번 재기동되던 한선씨 게이트웨이의 근본원인을 4방향 병렬 진단으로 확정하고, 근본수정 4종을 라이브 적용한 뒤, SO_REUSEPORT 기반 N워커 병렬(동시 병렬 일직선) 구조와 P2P 피어 메시·3단계 트러블대응·연동검증을 게이트웨이Q로 구축.

1) 병목 근본원인 (확정 — 로그 1,681회 재기동 포렌식 + 소스/VM 감사)

#원인증거상태
1요청당 문자열 핸들 누수 — 2026-06-16 되감기 제거 후 요청당 수십~수백 핸들 영구 누적 → 480k 고갈 exit43. 라이브에서 432k/480k(90%) 실측/tmp/gwlive.log STR 조기경고, crownyc.c:2315 STR_ID_MAX✅ 수정 (되감기 재장착)
2재기동=GC 아키텍처 — 힙 임계 자가종료+워치독 재기동 설계. 7/5 하루 793회(≈80~95초 간격)게이트웨이통합.한선 자가종료 백스톱, wd로그✅ 원인1 수정으로 잦은 발화 제거
3재바인딩 레이스 — kill 후 2s만 대기 후 즉시 bind → FATAL 32.6% 실측. TCP대기 실패 시 재시도 없이 즉사gw-restart.log FATAL 539건✅ 수정 (12s 재시도 + 포트해제 폴링)
4이중 감독자 경합 — launchd/start.sh vs 워치독 vs 재기동.sh 상호 무인지 → "포트 8080 바인딩 실패" 이중기동. pid파일 30172 vs 실LISTEN 29705 불일치 실증gwlive.log, lsof✅ 수정 (락 공유)
5워치독 자체 블로킹 버그(wait·osascript) — 7/5 21:41 기수정, 7/6 급감(793→32회)의 주 설명워치독 diff기수정 확인
6단일스레드 직렬 처리 — 84 RPS, 느린 업스트림 1개가 전체 블록 → 버스트 wedgeCLAUDE.md 실측✅ 수정 (N워커 병렬)
7/3~7/5 폭주의 1차 트리거 자체는 당시 워치독의 로그 truncate(>)로 증발(7/5 append 전환됨) — 단 위 구조 원인들이 사망·증폭 전 경로를 설명.

2) 라이브 적용된 근본수정 (검증 완료)

  1. 게이트웨이통합.한선 — 요청당 문자열되감기(마커) 재장착 (06-16 제거 사유였던 lazy 정적맵 간섭은 eager 로드+보호로 이미 해소돼 안전). 그림자 8081에서 200회 반복+에러경로 50회 생존 검증 후 컷오버.
  2. 게이트웨이통합.한선 — TCP대기 바인드 12s 재시도 루프.
  3. 게이트웨이통합.한선 — WS 업그레이드 판정 싼 포함() 선게이트(전 요청 줄분리 제거).
  4. gwlive헬스워치독.sh — /tmp/gw-restart.lock 공유 + kill 후 포트 실해제 폴링(고정 sleep2 제거).
  5. (타 세션 병행) _요청재작성 헤더/본문 선분리 — POST 본문 개행 소실 함정 해소. POST 개행본문 37ms 즉응 실증.
컷오버 후: docs/cowork/crowny.org 전부 200, TLS 8443 200.

3) 병렬 일직선 기반 (VM 패치)

  • crownyc.c TCP대기(491)에 CROWNY_TCP_REUSEPORT=1 옵트인 추가 — 같은 포트에 N개 워커 동시 바인드, 커널 accept 분배. 미설정 시 종전 동작.
  • 실증: 2워커 8082/8083 동시 바인드, 100/100 성공, 워커 1개 kill 후 30/30 무중단(분배 비율은 OS 의존 — macOS 실증, Linux는 균등 LB).
  • 스크래치 격리: GW_WID 환경변수 접미로 /tmp TOCTOU 제거 (SPA정적코어·설정.한선).
  • 요청 파이프라인은 이미 일직선(acme→shield→WS→프록시→정적→404) + 요청당 3중 회수(배열힙·문자열) → 상태 잔류 0 = 워커 수평 확장·양자/병렬 실행 안전.

4) 게이트웨이Q 모듈 (병렬 구축)

  • 게이트웨이Q/Q감독.sh — N워커 기동·보충·롤링 재활용(무중단), 락 상호배제
  • 게이트웨이Q/Q피어.한선 — P2P 피어 하트비트·4상 판정·페일오버 목록·설정해시 동기화 판정
  • 게이트웨이Q/Q연동검증.한선 — 허브/클라우드(:9945)/뱅크(:9400)/월렛(:9410) 이중 프로브 + 대용량 무결성
  • 게이트웨이Q/Q트러블3단계.한선 — 1단계(요청 재시도)/2단계(워커 교대)/3단계(피어 이관) 판정 정본
  • 게이트웨이Q/게이트웨이통합.rpn.한선 — RPN 정본 변환

관련 파일

  • 라이브: /Users/ef/crowny-gateway/한선게이트웨이/게이트웨이통합.한선, gwlive헬스워치독.sh
  • VM: /Users/ef/CrownyOS/crownyc/crownyc.c (REUSEPORT 패치, 정본 재빌드 완료, 백업 /tmp/crownyc.bak-reuseport-*)
  • 신규: /Users/ef/crowny-gateway/게이트웨이Q/

구축 완료 (전부 실행 검증됨)

모듈검증
Q감독.sh + Q감독판정.한선8084/8085 실기동: 워커 kill→10s내 자동보충, 롤링재활용 무중단(LISTEN 2 유지), 4상 판정 5케이스 일치, 락 상호배제
Q피어.한선 + Q피어.sh루프백 2노드 상호 하트비트 티, 노드 kill→타 전환+페일오버 제외, /q/health·/q/peers 서빙
Q연동검증.한선bank/wallet/cloud 이중프로브(직접 vs 경유), 1MB SHA256 3자 일치(클라우드 GET 경유)
Q트러블3단계.한선단위테스트 20/20 (1단계 요청재시도/2단계 워커교대/3단계 피어이관 판정)
Q설치.sh + Q패키지생성.sh + 설치.md648K tar.gz 27엔트리, 자기설치 시뮬 8098 기동 성공
RPN 정본clike_to_rpn.한선+hanseonc_rpn 근본버그 2건(이스케이프따옴표·가드공백) 수정·회귀검증. 게이트웨이 RPN exit0 컴파일하나 미인식 단어 87건 잔여(신규 빌트인 키워드테이블 미등재) — 라이브 대체 금지 헤더 명기

연동검증이 적발·수정한 실버그

  1. crowny-hub cli.js status 크래시(version undefined padEnd) — 방어 수정, exit 0 확인
  2. gateway.yaml crowny-wallet healthCheck가 9400(bank)을 가리키던 오배선 — 9410 수정, validate 통과
  3. 32KB↑ POST 게이트웨이 웨지 실재현(기지 함정) — 대용량 업로드 스트리밍 재구축은 잔여

잔여 이슈

  1. 라이브 Q감독 컷오버완료 (2026-07-07 11:58, 사용자 승인) — launchd(org.crowny.gateway)→start.sh→Q감독→REUSEPORT 워커 2개 라이브. 컷오버 중 발견 버그: launchd PATH에 /usr/sbin 없어 lsof 무동작(cleanup·listening_pids 마비) → start.sh·Q감독.sh PATH 보강으로 해결. 라이브 실증: 프로덕션 워커 1개 kill 중 30/30 성공(무중단), 12s 내 자동 보충, 동시 버스트 20/20. 롤백: start.sh 마지막 exec 복원+kickstart
  2. RPN 정본 미인식 87단어 — hanseonc_rpn.c 키워드테이블에 신규 빌트인(문자열마크/되감기/메모리마커/소켓버퍼수신 등) 등재 필요
  3. 요청 본문 업로드 스트리밍(32KB↑ POST) — _요청누적읽기 버퍼화(응답 스트리밍과 동일 패턴)
  4. P2P 실노드(가상서버·타 컴퓨터) 배포 — 패키지 준비됨, 실기기 필요
  5. wallet 경유 레이턴시 변동(47~192ms) 원인 — 단일스레드 큐잉 추정, Q감독 N워커 배선 시 해소 기대