지난주의 명제 — "내보내지 않은 것이 경계다" — 가 이번 주엔 구체적인 한 대의 기계로 내려왔다. 블랙박스다.

이번 주 Signal
무결성은 막아서 지키는 게 아니라, 없어서 지켜진다. 이번 달 Build 글의 사례는 차량용 블랙박스. 화면은 풍성하다 — 주행 기록을 보고, 구간을 넘기고, 사건 순간을 표시한다. 그런데 영상을 편집·삭제·재인코딩하는 도구는 아예 존재하지 않는다. "수정 금지" 버튼을 회색으로 막아 둔 게 아니라, 그 일을 할 도구 자체가 도구 목록에 없다. 그래서 영상은 한 프레임도 건드려지지 않는다. 권한 검사로 지키는 무결성과, 능력의 부재로 지키는 무결성은 차원이 다르다. 뚫을 코드가 없으니까.
'풍성한 화면 ≠ 못 하는 게 없는 화면'. 이번 주 가장 많이 공유된 통찰. 화면이 화려하다고 무엇이든 할 수 있는 게 아니다. 화면의 능력은 엮인 도구가 결정하고, 거기 없는 도구는 못 하는 일로 남는다. 블랙박스는 이걸 정직하게 보여 준다 — 보는 도구는 다 있고, 바꾸는 도구는 하나도 없다. 풍성함과 불가침이 한 화면에 공존한다.
지난주 명제의 증명. 첫째 주의 "노출하지 않는 것이 경계"가 추상이었다면, 둘째 주는 그 증명이다. 서버(블랙박스의 기록 능력)가 보는 도구만 내밀고 바꾸는 도구는 닫았다. 화면을 얹어 앱이 됐지만, 닫은 부분은 끝내 닫혀 있다.
도구·패키지 메모
이번 주 메모는 도구 목록을 거꾸로 읽기. 보통은 "이 앱이 뭘 할 수 있나"를 묻는다. 무결성을 설계할 땐 거꾸로 물어야 한다 — "이 앱이 절대 못 해야 하는 일은 무엇인가." 그 답을 도구 목록에서 빼는 것으로 끝낸다. 막는 규칙을 더하는 대신, 위험한 능력을 처음부터 두지 않는다. 코드가 줄고, 구멍도 준다. 막는 규칙은 시간이 지나며 늘 새는 곳이 생기지만, 처음부터 없는 능력은 새지 않는다. 유지보수의 부담까지 줄어드는 셈이다.
짧은 생각
보안 이야기는 늘 "어떻게 막을까"로 흐른다. 더 강한 잠금, 더 촘촘한 검사. 그런데 가장 강한 잠금은 문을 만들지 않는 것이다. 할 수 없는 일은 뚫리지 않는다. 블랙박스가 가르치는 건 이 단순한 비대칭이다 — 더하는 보안은 끝없이 뚫리고, 빼는 보안은 뚫을 게 없다. 우리는 늘 더 많은 능력을 자랑처럼 쌓아 왔지만, 어떤 자리에서는 못 함이 곧 품질이다. 블랙박스의 가치는 영상을 못 건드린다는 바로 그 무능에서 나온다.
현장에서
한도경 씨 이야기의 결도 여기 닿는다. 그는 진료 흐름을 도구로 빚으면서, 진단을 내리는 도구는 끝내 두지 않았다. 환자 정보를 모으고 순서를 잡는 도구는 풍성하게, 그러나 "이 병이다"를 출력하는 도구는 없음으로. 블랙박스가 영상을 안 건드리듯, 그의 도구는 판단을 사람에게 남긴다. 같은 원리다 — 불가침은 빈자리로 지킨다.
이번 주 질문 · 다음 주 예고
당신의 화면에 "절대 일어나면 안 되는 일"이 있다면, 그걸 막는 규칙을 적기 전에 물어보라. 그 일을 하는 도구를 아예 안 두면 되지 않나? 다음 주엔 노출과 비노출의 선을 어떻게 긋는지 — 능력을 도구로 설계할 때의 경계 감각으로 더 들어간다.
makemind.dev 「소식」 — 매주 한 호흡, 한 주의 Signal을 모읍니다.