분산 시스템을 무너뜨리는 것은 대개 화려한 장애가 아닙니다. 저는 그 사실을 새벽 3시의 전화로 배웠습니다. 한 팀이 nginx 설정 파일의 포트 번호를 8080에서 8081로 바꿨습니다. 같은 시각, 다른 팀은 로드밸런서 백엔드 목록을 8081로 갱신했다고 믿고 있었습니다. 그러나 그들이 읽은 스프레드시트는 어제 버전이었습니다. 서로 다른 곳에 적힌 같은 사실 — 한 파일의 포트 번호와 다른 파일의 포트 번호가 어긋나는 순간, 동기화 오류는 소리 없이 번지고, 운영자는 어느 쪽이 진실인지 알 수 없게 됩니다.
앞 장에서 우리는 고수준 한선씨와 표준 라이브러리가 어떻게 한 줄의 의도를 TOAU 위에서 돌게 만드는지를 보았습니다. 함수가 모이고, 라이브러리가 쌓이고, 마침내 프로그램이 됩니다. 그런데 프로그램은 결국 어딘가에서 돌아야 합니다. 서버 위에서, 포트 위에서, 게이트웨이를 거쳐. 크라우니 인프라의 설계는 바로 이 지점에서 출발했습니다. 노드의 좌표, 도메인의 매핑, 서비스의 포트를 단 하나의 원본에 모으고, 그 변경을 검증 가능한 형태로 흐르게 하는 것. 진실이 두 곳에 적히는 순간 그것은 더 이상 진실이 아니기 때문입니다. 이 장에서 여러분과 함께 살펴볼 것은 그 기반 계층 — 노드 토폴로지, 게이트웨이, 레지스트리 — 이 어떻게 한 좌표계 위에서 맞물리는지입니다.
크라우니 시스템은 6,561개 노드를 기본 단위로 설계되었습니다. 6,561 = 3⁸이라는 균형3진 좌표 공간, 그 좌표계가 무엇이며 왜 여덟 자리인지는 이미 3장에서 망원경처럼 펼쳐 보았습니다. 여기서는 그 좌표 위에 실제 서버를 어떻게 얹는가 — 인프라의 관점만 봅니다. 좌표는 verse.crowny.org/6561에서 유일 원본으로 관리되고, 모든 도메인과 서비스가 그 한 좌표계에 매핑됩니다. 노드 토폴로지란, 추상적인 좌표 트리의 각 점에 살아 도는 프로세스를 한 점 한 점 대응시키는 작업입니다.
초기 배포 단계에서는 14개의 제네시스 노드가 크라우니뱅크 P2P 신용 시스템의 초기 신탁을 맡습니다. 각 슬롯에 4,131 크라우니가 할당되어, 14 × 4,131 = 57,834 크라우니의 초기 신탁 공급량을 형성합니다. 크라우니(CRY)는 이 시스템이 제공하는 부의 사다리에서 가장 높은 자리, 웰스(Wealth) 계층의 최상위 자산입니다. 머니(교환 화폐)와 에셋(안정 자산 포네·표현 자산 맘)을 거쳐 오른, 가장 근원적인 신뢰 위에 세워진 부. 다시 말해 인프라가 처음 돌기 위해 깔아둔 이 기초 유동성은, 곧 웰스의 씨앗이기도 합니다. 머니가 흐르기 전에, 자산이 쌓이기 전에, 누군가는 가장 근원적인 부를 제네시스 노드에 먼저 묻어 두어야 했습니다. 14는 초기 파운더 그룹의 크기이고, 4,131은 각 노드가 실질적으로 지탱하는 신뢰도 스코어입니다. 글로벌 배포 관점에서는 153개 국가를 기본 지역 단위로 지정합니다.
노드 확장은 사람이 판단하지 않습니다. 가동 중인 노드의 비율이 8/9(≈88.9%)에 도달하면 — 즉 거의 모든 노드가 바쁜 상태가 되면 — 전체 노드 수가 자동으로 3배 증가합니다. 한 번의 판단 오류, 한 번의 지연이 시스템 전체를 경직시킬 수 있기에, 임계값을 코드에 못박았습니다. 한 줄로 적으면 이렇게 단순합니다. 활성 노드를 전체 노드로 나눈 값이 8/9 이상이면 새 전체 수를 세 배로 선언하고 알린다. 그뿐입니다. 증설은 예측 가능하고, 부하 급증의 순간에도 결정은 흔들리지 않습니다. 이것은 서버를 늘리는 인프라 규칙일 뿐, 4장에서 다룬 부의 군집 — 한선이 크라우니의 10배수로 묶이는 식의 — 개념과는 다른 층위의 이야기임을 일러 둡니다. 하나는 서버를 늘리는 규칙이고, 다른 하나는 부를 쌓는 서사입니다.
크라우니의 화폐 체계는 3계층 구조로 설계되어 있습니다. 이것은 단순한 화폐 다양화가 아니라, 가치를 표현하고 이전하고 축적하는 세 가지 서로 다른 목적을 명확히 한 것입니다. 4장에서 이미 그 사다리를 올라가 보았으니, 여기서는 인프라가 처음 돌 때 어느 층을 먼저 깔아야 하는지만 짚어 둡니다.
머니(Money) — 가장 하층은 크라우니원(Crowny One)입니다. 일상의 교환·결제 화폐로서 USD에 대응하며, 상품과 용역의 거래에 쓰입니다. 빠르고, 분할 가능하고, 즉시 유동합니다. 이 층이 없으면 경제가 자리잡지 못합니다.
에셋(Asset) — 중층은 두 갈래입니다. 포네(FONE)는 2,550원 대응의 안정 자산입니다. 가치가 절하되지 않으며, 자산처럼 행동합니다. 부를 보존하는 저장소입니다. 맘(MOM)은 약 25원(25.5원) 단위의 표현 자산으로, 좋아요·하트·감사처럼 마음을 담는 용도입니다. 팁 수준의 미세한 신뢰 신호이면서도, 누적되면 의미 있는 평판이 됩니다.
웰스(Wealth) — 최상층은 가장 근원적 부입니다. 크라우니(CRY)가 최상위이며, 매년 9월 30일마다 크라우니뱅크가 약 7% 상승 수준으로 거래를 권장하는 기초 신뢰 자산입니다. 팔 때는 그 상승값으로, 살 때는 현재값과 이전 시즌 값 사이에서 매수 구간이 상태 지표 역할을 합니다. 현재 기준 1 크라우니는 약 25,500원입니다. 그리고 한선(Hanseon)·선호(Sunho)는 이 크라우니 위가 아니라, 군집(cluster) 개념과 앞으로의 생산성 향상 기대치를 계산해 배치한 부의 단계입니다. 생태계의 성장 또는 정해진 시점의 도래를 조건으로 점진적으로 열리도록 예정되어 있으나, 그 구체적 개방 수치는 아직 닫혀 있습니다 — 이것은 곧 올 시즌2가 미리 적어 둔 미래의 서사입니다.
이 3계층은 단순한 구분이 아니라 역할의 분리입니다. 그리고 지금 이 장에서 중요한 한 가지. 인프라가 처음 돌 때 제네시스 노드에 묻어 둔 것은 머니가 아니라 웰스 — 가장 근원적인 신뢰였습니다.
3장에서 본 대로, 모든 도메인과 서비스는 8-트릿 균형3진 좌표로 분류되고, L1의 세 대분류에서 L8의 6,561 서비스까지 자릿수가 자연스럽게 펼쳐집니다. 새 서비스를 등록할 때 좌표를 어디까지 결정하고 어떤 절차로 선언하는지 — 그 좌표계의 등록 규약 자체는 3장의 몫입니다. 인프라가 책임지는 것은 그다음입니다. 결정된 좌표가 어디에 단 한 번 적히는가.
답은 gateway.yaml입니다. 모든 서비스 정의가 이 단일 파일에 집중되고, 이것이 단일 진실 원본(Single Source of Truth, SSOT)입니다. 한 파일, 하나의 진실. 포트도, 좌표도, 헬스체크 경로도 여기서만 선언됩니다. 저 새벽 3시의 사고 — 같은 사실이 두 스프레드시트에 따로 적혀 어긋나던 그 사고 — 는, 이 한 파일 안에서는 구조적으로 일어날 수 없습니다. 진실을 적을 곳이 하나뿐이라면, 두 진실이 충돌할 일도 없으니까요.
크라우니 인프라의 중추는 /Users/ef/crowny-gateway/의 게이트웨이 v3.1입니다. HTTP(8080), HTTPS(8443), 관리 인터페이스(9100)를 제공하며, nginx를 완전히 대체하는 것을 목표로 합니다. 차별점은 단순한 리버스 프록시를 넘어섭니다. HTTP/2, TLS 세션 재개, 응답 캐시, 클러스터 모드를 기본으로 갖추면서, 그 위에 크라우니 고유 기술을 얹습니다.
가장 특징적인 것은 Trident 엔진입니다. 속도 조절 버튼 따위가 아닙니다. 세 동작 모드가 마치 세 가지 혼(魂)처럼 시스템 내부에서 독립적으로 호흡하다가, 필요에 따라 서로에게 제어권을 넘깁니다. 저는 이 셋을 처음 설계할 때, 기능 목록이 아니라 세 인격을 그렸습니다.
Flame — 불꽃의 혼. 속도 최적화 모드입니다. 레이턴시 임계값을 기준으로 빠른 응답을 우선합니다. 요청이 들어왔을 때 1초 안에 돌려보낼 수 있으면, 무엇을 하든 그것을 합니다. 캐시 검증은 생략하고, 정밀한 로깅은 나중으로 미룹니다. 지금은 속도가 생명이라고, Flame은 믿습니다. 망설이지 않는 혼입니다.
Wave — 물결의 혼. 적응형 모드입니다. 시스템 부하와 변화하는 트래픽 패턴에 동적으로 대응합니다. Flame이 너무 공격적일 때, Wave는 주변을 살핍니다. CPU, 메모리, 네트워크 포화도를 읽고, 필요하면 Flame의 결정을 부드럽게 다듬습니다. 불꽃을 끄지 않으면서 그 열을 식히는, 분별하는 혼입니다.
Abyss — 심연의 혼. 장애 복구 모드입니다. 서비스가 다운되면 폴백 URL로 리다이렉트합니다. 정상일 때는 존재조차 잊고 지내지만, 단 한 번 필요해질 때 Abyss는 시스템을 절벽에서 건져냅니다. 가장 말이 없다가, 가장 결정적인 순간에 입을 여는 혼입니다.
이 세 혼은 수치가 아니라 상태입니다. 그래서 헬스 체크도 균형3진 논리를 따릅니다. 조사된 서비스는 T(건강, +1), O(경고, 0), A(다운, −1) 세 상태 중 하나로 분류됩니다. 1초 이내의 레이턴시는 T, 1초 초과는 O, 응답 실패는 A입니다. 이진 논리의 "살았다/죽었다"가 놓치는 회색 지대 — 응답은 하지만 느려진 서비스, 간헐적으로 끊기는 연결, "반쯤 산 상태" — 를 O라는 독립 상태로 포착한다는 점이 핵심입니다. O는 티(yes)와 타(no) 사이의 대기·정상값, 판단을 보류하고 더 지켜보는 자리입니다. 사람도 그렇지 않습니까. 쓰러지기 전에 먼저 비틀거립니다. 그 비틀거림을 읽어내는 것이 O입니다.
webroot 무중단 갱신과 SIGHUP rolling restart로 서비스 중단 없이 설정을 갱신합니다. 새 서비스를 추가하거나 포트를 바꿔도, 게이트웨이는 요청을 받으면서 동시에 그 변경을 몸에 스며들게 합니다. /services/register 엔드포인트는 새 서비스의 동적 등록을 지원합니다.
게이트웨이의 모든 서비스 정의는 단일 파일 gateway.yaml에 집중됩니다. 85개 이상의 서비스가 하나의 통일된 스키마로 선언됩니다 — 도메인, 백엔드 포트, 8-트릿 좌표, 헬스체크 경로와 균형3진 메서드, 캐시 정책, 그리고 Trident 세 모드의 파라미터까지. 한 서비스가 알아야 할 모든 것이 한 블록 안에 모입니다.
이 구조 덕에 포트 충돌이 원천 차단됩니다. 서비스를 추가하면 crowny-ports.sh 명령이 PORTS.md를 자동 재생성하고, 변경 사항을 모든 세션에 브로드캐스트합니다. 한 팀이 포트를 바꾸면, 다른 팀은 즉시 그 변경을 봅니다. 파일을 직접 고칠 필요가 없습니다. 명령 한 줄이 전체를 움직입니다 — 포트를 조회하고, 선언하며 SSOT를 갱신하고, 충돌을 확인하고, 빈 포트를 찾고, 85개가 넘는 전체 목록을 펼치는 일까지.
저 새벽 3시의 사고는, 이 한 줄 안에서는 일어날 수 없습니다.
GitHub를 대체하는 크라우니 네이티브 버전 관리 시스템이 /Users/ef/crowny-hub/에 구현되어 있습니다. 로컬 저장소 ~/.crowny-hub/에서 커밋, 레지스트리, 인수인계 문서를 관리하며, 핵심 명령은 상태 조회, 전체 커밋, 다음 세션을 위한 인수인계, 그리고 맥락 복원입니다. git push와 GitHub 사용은 크라우니 헌법에 의해 금지되며, crowny-hub이 이를 완전히 대체합니다. 외부 프로바이더에 의존하지 않는다는 선택. 이것이 크라우니가 진정으로 "자기 것"을 만드는 이유입니다.
내부 npm 레지스트리는 Verdaccio로 구축되어 포트 4873에서 운영됩니다. @crowny/* 스코프 아래 17개 이상의 패키지가 등록되어 있습니다 — crownyc(컴파일러), gateway(v3.1), hub(버전 관리), infra(인프라 관리), browser, agent, 그리고 도메인 패키지들. 각 패키지는 곧바로 설치되고, 업데이트될 때마다 모든 개발자가 같은 버전을 봅니다. 외부 레지스트리에 묻지 않고, 우리가 만든 것을 우리 안에서 흐르게 합니다.
크라우니 인프라의 서비스는 의존성과 역할에 따라 4개 Tier로 나뉩니다. 이것도 일종의 계층 구조지만, 좌표가 아니라 책임의 분리입니다. 한 몸의 기관을 나누듯.
Tier 1 — 기반. crowny-gateway(8080/8443), verdaccio(4873). 다른 모든 서비스의 토대입니다. 이들이 내려앉으면 나머지는 아무도 접근할 수 없습니다. 골격입니다.
Tier 2 — 코어. crowny-main(7730), crowny-core(7731), crowny-code(7730), crowny-agent(9901). 핵심 연산과 로직을 담당합니다. 뇌입니다.
Tier 3 — 도메인. crowny-design(8729), crowny-docs(4100), crowny-fab(8200). 사용자 대면 서비스와 문서를 제공합니다. 사람들이 만나는 얼굴입니다.
Tier 4 — 도구. CLI 도구 crowny-hub와 crowny-infra, 개발 서버 crowny-dev(5173). 손입니다. 손이 없으면 뇌가 생각만 해도 움직일 수 없습니다.
크라우니 인프라의 핵심은 모두 한선씨 소스 코드로 구현되어 있습니다. 컴파일 가능한 7종 서버는 — 웹서버v2(HTTP/HTTPS 기본 서버), 게이트웨이(Trident 엔진 포함 라우터), DNS서버, 블록체인(분산 원장), 컨트랙트(스마트 컨트랙트 실행 환경), 거래소(P2P 매칭 엔진), HTML생성기(동적 템플릿)입니다. 각 서버는 .한선 소스에서 hanseonc_high 컴파일러로 TOAU 바이너리로 변환된 뒤 crownyc VM 위에서 실행됩니다. 이것이 의미하는 바는 깊습니다. 인프라가 외부 런타임이 아니라 자체 언어 위에서 돈다는 뜻입니다. 앞 장에서 본 고수준 한선씨와 표준 라이브러리, 그리고 그보다 앞서 1장에서 본 큐브와 트릿 — 그 단위 위에서 빚어진 명령들이, 여기 인프라의 가장 밑바닥을 받치고 있습니다. 모든 계산이 4상균형3진 벡터 위에서 일어납니다.
새 서비스를 동적으로 등록하는 엔드포인트 /services/register는 POST 요청을 받습니다. 도메인과 포트, 좌표, 선언자, 유효시간을 담아 보내면, 게이트웨이는 서비스 식별자와 등록 시각, 다음 헬스체크 예정 시각을 돌려줍니다. 그리고 하나 더 — 그 등록 항목 전체의 SHA-256 해시를 함께 돌려줍니다.
6장에서 우리는 해시가 어떻게 권리의 증명이 되는지를 보았습니다. 여기 인프라 계층에서 그 같은 해시 연쇄는 다른 일을 합니다 — 서비스 등록의 감사추적입니다. 모든 등록이 저널에 차곡차곡 누적되고, 각 항목은 앞 항목의 해시에 묶입니다. 누군가 과거의 서비스 등록을 지우거나 수정하려 해도, 해시의 연쇄가 그 자리에서 깨집니다. 누가, 언제, 어떤 서비스를 올렸는지 — 그 기록은 거짓으로 덮이지 않습니다. 권리의 증명이 사람의 것이라면, 등록의 감사추적은 인프라의 것입니다. 같은 도구, 다른 책임. 거짓은 어느 층위에서든 흔적을 남깁니다.
verse 좌표계의 한 영역인 tiomta.com은 3² = 9개의 전문 노드를 독립적인 한선씨 서비스로 운영하며, 크라우니 핵심 기능 — P2P 통신, 경제 순환, 진단 — 의 축소 원형을 한자리에서 보여줍니다. 이 인프라 전체를 작게 접으면 어떤 모습인지 궁금하다면, 먼저 티옴타를 보면 됩니다. 9라는 숫자가 우연이 아님을 여러분은 이미 눈치챘을 것입니다. 3²은 곧 다음 장에서 펼쳐질 분류 체계의 한 자릿수이고, 그 아홉 노드가 각각 무엇을 맡아 어떻게 하루를 도는지는 바로 거기서 온전히 드러납니다.
크라우니 인프라는 단순한 대체(replacement)가 아니라 개선된 기반을 목표로 합니다. nginx와 GitHub를 대체하지만, 그 동기는 효율의 미세한 우위가 아닙니다. 균형3진 헬스 체크, 등록 감사추적의 해시 저널, 8/9 임계의 3배수 자동 확장 — 기존 도구로는 표현할 수 없던 고유 기술이 필요했기 때문입니다.
원칙은 단순합니다. 모든 설정은 선언적이고, 단일 원본에 집중되며, 변경은 자동으로 전체에 브로드캐스트되어 동기화 오류를 원천 차단합니다. 그리고 모든 변경은 저널에 해시로 남아 검증 가능합니다. 저는 이것을 신뢰를 만드는 기술이라 부릅니다. 사람을 의심해서가 아닙니다. 사람은 새벽 3시에 지치고, 어제의 스프레드시트를 믿습니다. 저도 그 새벽에 지쳐 있었습니다. 그래서 우리는 진실을 한곳에만 적고, 그 한곳을 누구도 거짓으로 물들일 수 없게 만들었습니다. 사람은 새벽 3시에 잊지만, 코드는 잊지 않습니다.
노드와 게이트웨이와 레지스트리가 이렇게 한 좌표계 위에서 맞물릴 때, 비로소 그 위에 무엇이 사는지를 이야기할 수 있습니다. 우리는 빈 격자를 깔았을 뿐입니다 — 6,561개의 점, 그러나 아직 이름도 시간도 없는 자리. 그 한 점 한 점에 무엇을 앉히고, 그것들을 어떻게 한 호흡으로 돌게 할 것인가. 다음 장에서 여러분과 함께 볼 것은, 바로 그 분류의 규칙 — 6561을 3진 자릿수로 나누어 세계를 정렬하는 방식과, 그 모든 노드가 동시에 깨어나 같은 박자로 일하게 만드는 53분의 스케줄입니다. 우리가 깐 것은 좌표였고, 이제부터 그 좌표는 시간을 얻습니다.
첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.