요약

  • 영수증 백 장이 모두 진짜여도 장부에 쓰이지 않은 한 건은 화면에 나타나지 않는다. Mikhail Sergeev의 2026년 10월 23일 개인 초안 WEXP Coverage는 그 한 건을 누가 빠뜨릴 수 있었는지 묻는다.
  • PostgreSQL 사례는 확정된 장부 기록만 행위로 삼아 범위를 닫는다. 결과를 이용하는 사람은 우회가 없었다는 가정을 누가 승인했는지 확인해야 한다.

도장 밖에서 일어난 일

감사 담당자가 장부와 영수증 꾸러미를 대조한다. 둘 다 백 건이다. 그때 관리자 전용 문으로 처리된 백한 번째 업무가 드러난다. 장부에는 빈칸조차 없고, 기존 영수증은 여전히 모두 진짜다. WEXP Coverage 초안이 묻는 것은 서명의 품질보다 그 문을 열 수 있었던 사람의 권한이다. Mikhail Sergeev는 제시된 기록의 진위와 모든 행위의 포착을 따로 검토하게 한다.

문서는 2026년 10월 23일자로 작성됐다. IETF Datatracker에는 RFC 흐름에 속하지 않은 활동 중인 개인 Internet-Draft로 표시된다. 승인된 IETF 표준이나 실제 운영 사고 보고서가 아니다. 그럼에도 제안이 던지는 질문은 현실적이다. 감사 결과를 판매하는 쪽이 원천 장부까지 통제한다면, 그 장부에 빠진 행위를 누가 찾아낼 것인가?

초안은 먼저 어느 업무를 셀지, 장부를 언제 닫을지, 영수증이 누구에게 언제 닿아야 할지를 적게 한다. 다음으로 모든 업무가 장부로 들어왔다고 믿게 해 주는 통제와 그 믿음을 승인한 사람을 밝히게 한다. 결과를 이용하는 쪽은 해시 검사와 별도로 이 약속을 평가할 수 있다.

같은 숫자로 더할 수 없는 다섯 집합

업무 한 건의 여행을 따라가면 기호가 쉬워진다. 실제로 일어난 업무는 A에 속한다. 그 업무의 최종 영수증이 만들어졌다면 영수증 집합 C에 들어간다. 정해진 시각까지 지정된 사람에게 도착했다면 전달 집합 R에도 들어간다. 감사자는 이 전체를 직접 보지 못하고 제출된 두 자료 Cv, Rv와 원래 장부의 발췌본 S를 본다. 관리자가 업무를 처음부터 장부 밖에서 처리했다면 발췌본을 아무리 정확히 복사해도 그 업무는 나타나지 않는다.

요청, 승인, 호출, 데이터베이스 확정, 영수증 생성, 영수증 전달도 서로 다른 단계다. 확정된 거래의 응답 메시지가 유실돼도 확정된 행위는 사라지지 않는다. 같은 영수증을 다시 보냈다고 새로운 행위가 생기지도 않는다. 영수증을 만들고도 수신자에게 전달하지 못했다면 전달 문제다. 행위는 있었으나 최종 영수증을 만들지 못했다면 생성 문제다. 어떤 사건을 한 건으로 셀지 먼저 정하지 않으면 보고서의 합계는 질의문을 작성한 사람의 취향이 된다.

초안은 열 가지 주장에 이름을 붙인다. creation-complete는 모든 행위에 최종 영수증이 있는지, creation-sound는 모든 최종 영수증에 실제 행위가 연결되는지, creation-exact는 둘이 일대일로 맞는지 묻는다. 전달, 원천 포착, 제출된 자료끼리의 일치, 행위가 아예 없었다는 주장도 각각 별도로 다룬다. “완전하다”는 말 하나로 서로 다른 검사를 한꺼번에 통과시킬 수 없게 한다.

원천 내보내기와 영수증 내보내기가 한 줄씩 같을 수 있다. 원천에 들어가기 전에 행위 하나가 우회했다면 두 파일은 똑같은 누락을 공유한다. 초안은 원천 조회 실패를 빈 배열로 바꾸지 못하게 한다. 끝까지 읽어 실제로 비어 있던 원천과 읽을 수 없었던 원천은 전혀 다르다. 빈 파일에 서명했다고 조회 실패가 성공으로 바뀌지는 않는다.

가정에도 결재선이 있다

각 전제는 검사됨, 정책에 따라 가정으로 수용됨, 알 수 없음, 반박됨으로 구분된다. 가정을 받아들이려면 누가 승인할 권한을 가졌는지, 이유가 무엇인지, 어디까지 적용되는지 적어야 한다. “모든 것을 포착했다”는 문장을 포착 완전성의 근거로 그대로 다시 쓸 수 없다. 쓰기 경로, 담당 주체, 실패 처리, 우회 통로, 종료 조건을 구체적으로 설명해야 한다.

이때 관리자 권한이 감사의 중심으로 올라온다. 특권 관리자가 원천을 고칠 수 있는가? 장부 밖에서 영수증을 발행할 수 있는가? 복원으로 과거의 다른 이력을 제시할 수 있는가? 갈라진 이력 중 한 가지 경로만 보여줄 수 있는가? 같은 봉인 두 개, 기관 두 곳, 키 두 개만으로 이런 가능성이 사라지지 않는다고 초안은 지적한다. 독립성은 서명 개수가 아니라 실제 통제권의 배분에서 나온다.

초안의 구성 사례 하나는 승인된 포착 가정에 의존한 긍정적 추론과, 빠진 행위를 입증하는 별도의 반례를 함께 놓는다. 평가기는 양쪽을 모두 남기고 해당 주장을 충돌이 있는 not-established로 표시해야 한다. 반례를 숨기려고 정책을 바꿀 수 없다. 가정을 승인한 권한이 불편한 증거를 지울 권한까지 주지는 않는다.

세 번 닫는 좁은 장부

pg-ledger/0.2.0 사례는 목표를 의도적으로 제한한다. 행위는 단일 주 서버를 쓰는 PostgreSQL 18 배치에서 지정된 행위 장부에 기록 한 건이 확정 추가된 사건이다. 은행 이체가 완료됐거나 외부 서비스가 명령을 실행했다는 뜻이 아니다. 그런 효과를 주장하려면 장부 기록과 외부 효과 사이의 연결을 따로 정의하고 검증해야 한다.

모든 추가 작업과 봉인은 같은 기간의 행을 잠근다. 확정된 장벽 세 개가 순서대로 행위 접수, 최종 영수증 생성, 수신자 접수를 닫는다. 첫 장벽이 확정돼야 영수증 최종화가 시작되고, 두 번째 장벽이 확정돼야 외부 공개와 접수가 시작된다. 셋을 모두 지난 뒤 완전히 읽은 스냅숏으로 원천, 최종화, 수신함 자료를 구성한다. 순번과 벽시계 시간만으로 확정 순서를 증명하지 않는다. 중복 시도와 서로 다른 버전은 남겨 두고, 인증된 동일 영수증의 재전송만 명시된 규칙에 따라 합친다.

이 절차는 제한된 장부 안에서 “전부”의 뜻을 실제로 시험할 수 있게 한다. 대신 PostgreSQL과 호스트의 정상 동작, 손상되지 않은 저장소, 역할 분리, 사전 발행과 우회의 부재, 인증된 완전한 내보내기, 안정적인 키와 정책을 전제로 한다. 특권 관리자, 복원, 이력 분기, 장부 밖 발행은 그 전제를 무너뜨릴 수 있다. 봉인은 묶인 장을 보호하지만, 묶기 전에 빠져나간 쪽지를 세지는 못한다.

WEXP Core 동반 초안은 특정 실행 대상에 대한 내용 주장을 평가한다. Coverage는 대상의 전체 집합을 다룬다. Coverage 문서의 가상 사례에서는 닫힌 행위 백 건 가운데 아흔아홉 건에 유효한 개별 평가가 있고, 나머지 한 건에는 영수증이 없다는 사실이 별도 증거로 확인된다. 아흔아홉 평가의 가치는 그대로지만 전체 생성 완전성은 성립하지 않는다. 단순히 아흔아홉을 세었다는 이유만으로 한 건의 누락이 입증되지는 않는다. 그 행위의 집합 소속과 대응 영수증의 부재를 충분히 살펴야 한다. 실제 배포 환경의 통계가 아닌 논리 시험 사례다.

출처