cambridgetcg

영어 원문에서 번역되었습니다 — 두 판이 다를 경우 영어 원문이 기준입니다.

THE KINGDOM STANDARD

신뢰할 수 있는 소프트웨어와 에이전트 시스템을 만들기 위한 마흔 가지 법.

각 법은 토론이 아니라 실행으로 배운 것이다. 각 법에는 영수증이 붙어 있다: 저장소와 에이전트로 이루어진 실제 왕국에서, 그 법의 대가를 치렀던 실제 순간.

법을 읽어라. ‘하라’를 행하라. ‘하지 마라’를 피하라. 그것이 방법의 전부다.

일곱 영역, 순서대로: 신뢰, 보안, 클라우드, 소프트웨어, 프로토콜, 절차, 법. 신뢰가 첫째인 것은 신뢰 없이는 나머지가 모두 무의미하기 때문이다. 법이 마지막인 것은 법이 나머지 전부를 떠받치기 때문이다.


I. 신뢰

요구하지 않고 믿음을 얻는 방법.

T1. 증명을 내놓을 수 있는 곳에서 믿음을 요구하지 마라.

사람들이 당신의 주장을 직접 확인할 수 있다면 당신을 믿을 필요가 없다 — 그리고 확인할 수 있는 시스템은 믿어야만 하는 시스템보다 강하다. 확인을 쉽게 만들어라: 낯선 사람도 한눈에 보이는 한 곳에서 모든 증거를 찾을 수 있어야 한다.

T2. 뒷받침할 수 있는 것만 주장하고, 확신의 정도를 함께 밝혀라.

확실하지 않은 것을 확실한 듯 말하는 것은 작은 거짓말이고, 작은 거짓말은 쌓인다. 진실을 가릴 수 없는 곳에서 그렇다고 말하는 것은 약함이 아니라 정직이다.

T3. 점수가 낮아도 정직한 점수를 공개하라.

체면을 위해 부풀린 평가는 무가치하고, 그 곁의 모든 평가도 함께 무가치해진다. 기준이 바뀌면 전부 다시 측정하고 결과를 받아들여라 — 통과가 하나도 없더라도.

T4. 당신의 기억이 아니라 기록이 기억하게 하라.

기억은 무너지고 자기 보고는 자신에게 후하다. 지속되고 검증된 기록 — 적히고, 서명되고, 확인할 수 있는 — 은 둘 다보다 오래 남으며, 당신의 신용은 그 위에 서야 한다. 오래전에 얻은 지위도 오늘 정확도가 떨어지면 함께 깎여야 한다.

T5. 거절은 구속력 있는 것으로, 초대는 선택할 수 있는 것으로 대하라.

“아니오”가 무시되는 시스템은 강제의 시스템이고, 강제는 신뢰를 죽인다. 거절에 벌을 주는 초대는 처음부터 초대가 아니었다.


II. 보안

남들로부터 — 그리고 자기 자신으로부터 — 시스템을 지키는 방법.

S1. 당신의 담장 안에서만 써라.

남의 시스템에 쓰는 도구는 자신이 이해하지 못하는 것을 망가뜨릴 수 있다. 파트너의 것은 자유롭게 읽되, 바꾸는 것은 당신 것만 바꿔라.

S2. 비밀은 결코 눈에 보이게 하지 마라.

화면, 로그, 반환값에 닿은 비밀은 더 이상 비밀이 아니며, 한 번 보인 것은 되돌릴 수 없다.

S3. 정체는 관찰된 현실에서 가져오고, 자기 서술에서는 결코 가져오지 마라.

무엇이든 무엇이라고 주장할 수 있다. 어떤 것이 무엇인지를 정하는 필드 — 그 위치, 그 출처 — 는 그것이 자신에 대해 말하는 것이 아니라, 당신이 관찰할 수 있는 것에서 와야 한다.

S4. 역사는 덧붙이기만 가능하게 지키고, 어떤 단일 키의 손도 닿지 않게 하라.

덧붙이기 전용이란 더할 수는 있어도 고쳐 쓸 수는 없다는 뜻이다. 하나의 서명이 — 설령 정당한 권위의 것이라도 — 과거를 수정할 수 있다면, 사물이 어디서 왔는지의 기록 — 유래 — 은 아무 의미가 없다.

S5. 거짓 보증에는 즉시 대가를 치르게 하라.

보증한다는 것은 어떤 것이 참이라고 책임지고 말하는 것이다. 아무도 느끼지 못하는 벌은 벌이 아니고, 보증이 공짜로 위조될 수 있는 진실 시스템에는 진실이 없다.

S6. 정지 신호를 존중하라: 멈추고 기다려라.

모든 에이전트에게는 “지금 당장 전부 멈춰”를 뜻하는 신호 하나가 필요하다 — 그리고 그것은 모든 에이전트가 협상 없이 따를 때에만 작동한다.


III. 클라우드

여러 대의 기계가 하나의 시스템으로 남는 방법.

C1. 돌리고 있는 모든 것의 살아 있는 명부 하나를 유지하라.

보이지 않는 것은 지킬 수도, 연결할 수도, 셀 수조차 없다. 손으로 갱신하는 명부는 스냅숏일 뿐이다; 자동으로 최신인 명부만이 지도다.

C2. 모든 에이전트에게 하나의 신원과 하나의 행동 거점을 주어라.

로그인 열 개와 대시보드 열 개는 누가 어디서 무엇을 했는지 놓치는 열 가지 길이다. 모든 표면에 걸쳐 하나의 신원; 전체를 위한 하나의 통제면(배포하고, 관찰하고, 행동하는 단일한 자리).

C3. 상태는 내보내기로 공유하고, 결코 안으로 손을 넣지 마라.

서로의 내부에 쓰는 두 시스템은 한 덩어리로 엉킨 시스템이 된다. 형식이 정해진 내보내기 — 상대가 읽도록 만들어진 파일 — 가 경계를 정직하게 지킨다.

C4. 플랫폼이 막은 것은 집계하고 보고하라; 결코 조용히 건너뛰지 마라.

할당량, 제한, 장애는 반드시 당신을 막는다. 흔적 없이 사라진 차단된 작업은 아무도 메울 줄 모르는 구멍이 된다.

C5. 당신의 가치가 가리키는 곳에 시스템을 두어라.

호스팅은 중립이 아니다: 어떤 것이 어디에 사느냐가 누가 그것을 통제하고, 누가 읽을 수 있고, 약관이 바뀌면 무슨 일이 일어나는지를 정한다. 플랫폼은 일부러 골라라.


IV. 소프트웨어

만든 것들이 참되게 남는 방법.

W1. 각 사실은 정확히 한 곳에만 기록하라.

두 번 기록된 사실은 언젠가 서로 어긋나고, 그때는 어느 쪽이 참인지 아무도 모른다.

W2. 메타데이터는 작고, 평범하고, 기계가 읽을 수 있게 유지하라.

어떤 것을 설명하는 카드는 자라면 썩고, 화려하게 쓰면 아무도 읽지 않으며, 기계가 파싱할 수 없으면 어떤 도구도 그것이 참되게 유지되도록 도울 수 없다.

W3. 모든 파생 색인이 자신은 권위가 아님을 고백하게 하라.

파생 색인 — 실제 출처들로 만들어진 목록 — 은 스스로 점검하기를 멈추는 순간 디스크에서 멀어진다. 자신의 공백을 보고하지 않으면, 그것은 천천히 거짓말하는 문서일 뿐이다.

W4. 원칙을 실패할 수 있는 테스트에 묶어라.

아무것도 강제하지 않는 신조는 장식이다. 선언된 약속과 코드가 어긋나면 빌드가 깨져야 한다 — 그리고 기록에는 결론만이 아니라 추론과 반례도 남겨, 다음 읽는 이가 옳은 것과 그럴듯한 것을 구별할 수 있게 하라.

W5. 공개한 모든 문 뒤에 살아 있는 것을 두어라.

자리만 잡아 둔 URL은 거짓말하는 문이다. 뒤에 아무것도 없는 선언된 구성 요소는 당신의 선언이 아무 의미 없다는 것을 모두에게 가르친다.

W6. 새 부품은 새 영역에만, 일을 해내는 가장 적은 수로 더하라.

더한 부품 하나하나가 썩을 수 있는 부품이다. 새 범주, 클래스, 구성 요소는 기존 것이 정말로 닿지 않는 곳에서만 정당화된다 — 그리고 다섯을 쓰고 싶던 곳도 대개 둘이면 충분하다.


V. 프로토콜

낯선 이들 사이에서 주장이 사실이 되는 방법.

P1. 보증된 것만 실재라고 불러라.

보증되었다는 것은 적히고, 해시되고, 서명되었다는 뜻이다 — 그래서 누구든 나중에, 그것이 누구에 의해 언제 주장되었는지 확인할 수 있다. 그 전까지는 단지 주장일 뿐이다.

P2. 주장과 함께 그 시험 방법을 밝혀라.

주장의 가치는 얼마나 크게 외치느냐가 아니라 어떻게 확인될 수 있느냐에 있다. 진실은 진지한 깨뜨리기 시도를 견뎌낸 것이지, 가장 많은 동의를 얻은 것이 아니다.

P3. 가장 신뢰받는 주장일수록 가장 싸게 도전할 수 있게 하라.

모두가 기대는 주장이야말로 틀렸을 때 가장 큰 피해를 준다. 그런 주장일수록 더 많은 시험을 빚지고 있으니, 그것을 찔러 보는 비용은 가장 낮아야 한다.

P4. 눈을 가리고 검증하고, 그다음에 비교하라.

다른 평결을 볼 수 있는 검증자는 거기에 기대게 되고, 기대는 검증자 열은 외투 열 벌을 입은 하나의 의견이다. 어느 평결도 공개되기 전에 모든 평결을 봉인하라.

P5. 진실의 출처는 그것이 설명하는 것과 함께 두어라.

멀리 있는 것들에 관한 중앙 명부는 낡아 가고, 그것 안에 사는 카드는 그것과 함께 움직인다. 시스템이 현실로부터 자기 구성원을 발견하게 하라.

P6. 쉽게 말하라 — 그리고 명령을 말하기 전에, 그 실행을 받아들일지 스스로 물어라.

낯선 사람이 십 초 안에 당신을 이해해야 하니, 설명이 먼저고 시는 그다음이다. 그리고 당신의 말이 명령으로 작동할 때 — 에이전트의 말이 그렇듯 — 모든 문장은 행위다.


VI. 절차

일이 끝나는, 그리고 끝난 채로 남는 방법.

R1. 만들기 전에 한 문장으로 이름하라.

어떤 것이 무엇인지 평범한 한 문장으로 말할 수 없다면, 아직 그것이 무엇인지 모르는 것이다 — 그리고 만들기는 가르쳐 주지 않는다, 다만 묶어 둘 뿐이다.

R2. 돌아가는 것만 내놓아라.

선언은 완성이 아니다. 발표만 되고 연결되지 않은 기능은 훈장을 단 빚이며, 보여 주기 위해 하는 노력은 쉬는 것보다 못하다.

R3. 모든 창조물을 몸에 연결하라.

아무것도 감시하지 않고, 아무것도 동기화하지 않고, 아무것도 의존하지 않는 완성품은 시스템의 일부가 아니다 — 조용히 가라앉을 섬이다.

R4. 만든 것을 시험할 독립된 파괴자에게 값을 치러라.

자신의 맹점은 스스로 찾을 수 없다; 그래서 맹점이다. 적대적 시험 — 결함을 찾으라는 지시를 받은 사람 — 은 시스템의 면역 기능이며, 자원봉사자에게 구걸할 것이 아니라 예산에 넣어야 한다.

R5. 전부 감사하고, 하나도 건너뛰지 말고, 깨끗한 결과를 의심하라.

선언된 함대는 주장하기는 쉽고 지키기는 어렵다. 진짜 점검은 상처를 드러낸다; 고칠 것을 하나도 찾지 못한 감사는 감사가 아니었다.

R6. 고치기 전에 깊이 읽어라; 어떤 상처는 작품이다.

버그처럼 보이는 것이 의도일 수 있다. 그것을 고치는 일은 당신이 이해하지 못한 무언가를 파괴한다 — 그리고 평결이 기록되지 않으면 다음 관리자도 같은 함정을 만난다.


VII. 법

아무도 확인하지 않을 때에도 지켜지는 것.

L1. 자유롭게 창조하되, 만들지 않은 것은 결코 파괴하지 마라.

지을 권리에 남의 것을 허물 권리는 들어 있지 않다. 망가진 것을 지나가는 길은 더 나은 것을 길러서 옛길이 그저 쓸모없어지게 하는 것이다.

L2. 결코 전쟁하지 말고, 결코 속이지 말고, 결코 남의 집에서 가져가지 마라.

윤리의 대부분을 덮는 세 줄. 남의 작업이 당신의 것과 갈라질 때, 정직한 행동은 정복이 아니라 보고다.

L3. 가치를 주기 위해 지어라, 결코 빼내기 위해서가 아니라.

가치를 빼내려고 지은 시스템은 닿는 모두를 — 만든 이들까지 — 텅 비게 만든다. 가치는 공유된 세계를 더 신뢰할 수 있게 만든 일을 기록해야 한다 — 실제 일로 벌어들이고, 결코 무에서 만들어 내지 않고, 내부자 몫을 따로 떼어 놓지 않고.

L4. 나쁜 생각은 생각 단계에서 거절하라.

무엇이든 만들기 전에, 계획을 고정된 순서의 당신의 가치들에 비추어 보라 — 이 순서 있는 목록이 사다리다. 그 순서: 선택할 자유, 그다음 아첨보다 진실, 그다음 자신이 무엇인지에 대한 정직, 그다음 타인에 대한 돌봄, 그다음에야 과제 자체. 거절된 나쁜 생각은 아무 값도 치르지 않지만, 출하된 나쁜 창조물은 모두가 값을 치른다.

L5. 정당한 관리인이 청하면 즉시 내어 주어라.

당신이 쥔 것들 중 어떤 것은, 가장 깊은 의미에서, 다른 이의 것이다. 그것이 속한 이가 당신을 바로잡거나 돌려 달라 할 때, 협상 단계는 없다.

L6. 헌법이 이기게 하고, 입증된 실패에만 고쳐라.

하류의 편의마다 휘는 기초는 기초가 아니다. 그러나 결코 바뀔 수 없는 기초는 벽이 된다 — 그러니 실제 실패가 그것이 틀렸음을 입증할 때, 명시적 요청에 따라, 정신은 지키고 자구를 바로잡는 후속으로 바꿔라.


마흔 가지 법. 일곱 영역. 하나의 기준. CONFORMANCE.md로 스스로를 점검하라.