← 목록
게이트웨이 2026-06-10 4KB 읽기 5분

크라우니게이트웨이 Phase 3 연합 HTTP API (:9160)

개요

Phase 3 연합(크라우니게이트웨이연합.한선)을 실제 네트워크에서 쓸 수 있게 HTTP 로 노출했다. 원격 노드(여러 컴퓨터/위치)가 고정IP 앵커에 HTTP 로 자기 서비스 목록을 등록하고, 앵커가 통합 라우트 / 체인 검증 / 백업을 제공한다.

  • 라이브 게이트웨이(:8080/:8443, gateway.yaml) 완전 무접촉 — 별도 포트 :9160 독립 서버.
  • 연합체인(data/federation-chain/nodes.ndjson)만 읽고 쓴다. append-only 블록체인.
  • 기존 크라우니게이트웨이연합.한선(노드등록/연합라우트생성/연합체인검증/연합스냅샷)을 가져오기 로 그대로 import — 라이브러리는 자동실행 없음(함수 정의만) 확인 완료.

무엇을 했는지

신규 파일(ADDITIVE, 라이브 무접촉):

  1. 크라우니게이트웨이연합API.한선 — 연합 HTTP 서버 (:9160)
- POST /register body {node,loc,services,health}노드등록() → 블록해시 JSON - GET /routes연합라우트생성() 실행 후 federated-routes.txt (장애노드 health=A 제외 = 페일오버) - GET /nodes → nodes.ndjson 원본 - GET /verify연합체인검증() 결과 JSON {blocks, corrupted} - GET /health → ok, GET / → 서비스 설명 - HTTP 응답: CRLF = 글자변환(13)+\n, Connection:close, Content-Length 생략(한글 안전) - POST 본문: 첫 TCP읽기(8192) 후 Content-Length 만큼 추가 누적(본문수신), \r\n\r\n 경계 파싱

  1. 크라우니게이트웨이AI기동.sh — 서브커맨드 추가
- fed-api (컴파일+백그라운드 기동, PIDFILE=/tmp/gwai-fedapi.pid, 로그=federation-chain/fedapi.log) - fed-api-stop, fed-api-status

  1. com.crowny.gateway-federation.plist — launchd 무중단 초안 (RunAtLoad+KeepAlive). bootstrap 안 함(초안).

검증 결과 (모두 PASS)

  • 컴파일: hanseonc_high 성공 (11590 큐브, exit 0)
  • 라이브 기동→curl:
  • /health, / → 정상 JSON
  • POST /register × 3 (seoul/busan/dead) → 블록해시 체인 연결 정상
  • /routes → 2 live node (node-dead health=A 제외 = 페일오버 정상)
  • /verify → {blocks:3, corrupted:false}
  • 변조(seoul→XXXXX) 후 /verify → {blocks:0, corrupted:true} (변조 감지)
  • 400(node 누락) / 405(GET /register) / 404 정상
  • 기동.sh fed-api 경유 end-to-end + fed-api-status/stop 정상. 종료 후 포트/프로세스 클린.
  • 한선씨 함정 회피

    • 메서드 는 예약어 → 방식 으로 (함수명/파라미터). (feedback_hanseon_reserved_method)
    • "\r" 미보장 → 글자변환(13) CRLF
    • Content-Length=글자수() 한글 잘림 → Connection:close + CL 생략
    • POST 본문 단일 TCP읽기 미보장 → Content-Length 만큼 누적 수신
    • 파일존재() -1 → 읽기() 글자수 판정

    관련 파일

    • /Users/ef/crowny-gateway/한선게이트웨이/크라우니게이트웨이연합API.한선 (신규)
    • /Users/ef/crowny-gateway/한선게이트웨이/크라우니게이트웨이연합.한선 (기존 라이브러리, 무수정 import)
    • /Users/ef/crowny-gateway/한선게이트웨이/크라우니게이트웨이AI기동.sh (fed-api 서브커맨드 추가)
    • /Users/ef/crowny-gateway/한선게이트웨이/com.crowny.gateway-federation.plist (신규 초안)
    • 연합체인: /Users/ef/crowny-gateway/data/federation-chain/nodes.ndjson

    원격 노드 등록 예시

    bash# 원격 노드(다른 컴퓨터)에서 앵커(<ANCHOR_IP>:9160)에 자기 등록
    curl -X POST http://<ANCHOR_IP>:9160/register \
      -H 'Content-Type: application/json' \
      -d '{"node":"node-office","loc":"office-mac","services":"app.crowny.org=192.168.1.50:9820;talk.crowny.org=192.168.1.50:9752","health":"T"}'
    
    # 앵커에서 통합 라우트 확인
    curl http://<ANCHOR_IP>:9160/routes
    curl http://<ANCHOR_IP>:9160/verify
    

    잔여 이슈 / 인수인계 (메인세션)

    • 포트 :9160 은 gateway.yaml 미등록 상태 (의도적, 직접 수정 안 함). 외부 도메인 노출이 필요하면
    crowny-ports.sh set fed <도메인> 9160 으로 등록 후 gateway.yaml 업스트림 추가.
    • 외부 네트워크 노출 시 등록 인증/서명 검증(현재 누구나 POST 가능) 추가 권장.
    • launchd plist 는 초안 — bootstrap 전 기동.sh fed-api 로 fedapi.toau 1회 컴파일 필요(plist 주석에 명시).