← 목록
기타 2026-06-11 2KB 읽기 2분

노드 P2P 확장 — 다른 컴퓨터를 체인 노드로

개요

검증된 체인원장(WAL 리플레이) 위에 P2P 노드 레이어를 올려, 다른 컴퓨터를 노드로 붙여 op-log 교환만으로 최종일관성 수렴(이중계상 없음)하도록 구현. chain-node.crowny.org:9412 등록.

설계 — CRDT grow-only op-log

  • 각 op에 고유 opID = 노드ID-seq. 종류 M(발행)/T(이체).
  • 노드는 적용됨(seen) 집합 유지 → 같은 opID 재적용 시 멱등 skip(이중계상 0).
  • op-log(WAL) 교환 = 수렴. 순서 무관, 중복 안전.

산출 (한선씨, 검증)

  • 노드.한선 — 노드생성/적용(멱등)/발행/이체/부팅리플레이/동기화적용/oplog/잔액/피어.
  • 노드서버.한선 — HTTP 노드(상단 상수 sed로 인스턴스 분리). 엔드포인트:
  • /api/status /api/oplog /api/balance?id= /api/mint?id=&amt= /api/transfer?from=&to=&amt=
  • /api/sync?host=&port= (피어 /api/oplog 풀 → 멱등 적용)
  • 피어 GET = 검증된 소켓 클라이언트(소켓생성(2,1)/소켓연결/소켓보내기/소켓받기). HTTP클라이언트.한선 GET은 TCP대기(서버) 오용이라 미사용.
  • 검증 (실측 — 2노드 네트워크)

    • A(9412): 재단100 발행 → 재단→은행30 이체 (재단70/은행30). B(9413): 채굴27 발행.
    • B sync←A: applied 2. A sync←B: applied 1. → 양 노드 재단70/은행30/채굴27 수렴.
    • 멱등 재동기: applied 0 (이중계상 없음).
    • 재시작 복원: A KILL→재기동 → opcount3·재단70·채굴27(피어에서 받은 op 포함) WAL 리플레이 복원.
    • HTTP 헤더는 동기화 파서(5필드 미만)가 자동 무시 → 본문 추출 불필요.

    관련 파일

    • /Users/ef/crowny-data/services/노드.한선, 노드서버.한선
    • 검증: /tmp/노드수렴.한선(오프라인 CRDT), 2인스턴스 9412/9413
    • 포트: chain-node.crowny.org:9412 (gateway.yaml SSOT)

    잔여

    • 푸시 게시(gossip): 현재 풀(/api/sync). 자동 주기 동기화/푸시 추가 가능.
    • 소켓받기 65536 단일 read → 대용량 op-log는 청크 루프 필요(현재 데모 규모 OK).
    • 실 원격 노드(다른 물리 컴퓨터) 주소 등록 + 인증/서명.