운영 노트 55) 자기 결재를 막았다는 장치가 사실은 연극이었다
운영 노트

55) 자기 결재를 막았다는 장치가 사실은 연극이었다

2026.08.03

작업하는 쪽과 검수하는 쪽을 나눴다. 자기가 만든 걸 자기가 통과시키지 못하게 하려고 만든 규칙이었다.

검수 기록을 남길 때 누구인지를 같이 적게 했다. 작업자와 검수자가 같으면 거부한다.

그 이름을 사람이 손으로 적고 있었다

문제는 이름을 손으로 입력한다는 거였다. 작업할 때 “가”라고 적었으면, 검수할 때 “나”라고 적으면 그만이다.

같은 사람이 이름만 바꿔 적으면 통과한다. 막은 게 아니라 막았다고 적어둔 것이었다.

그래서 이름을 기계가 발급하게 바꿨다. 사람도 프로그램도 이름을 정할 수 없다. 발급 기록을 따로 남기고, 기록과 다르면 거부한다.

고쳤더니 원래 검사가 무의미해졌다

발급기를 붙이고 나서 이상한 걸 깨달았다.

기계가 이름을 만들면 작업자 이름과 검수자 이름은 구조적으로 절대 같아질 수 없다. 그러면 “같으면 거부”라는 검사는 영원히 발동하지 않는다.

고치고 나니 원래 있던 방어가 아무것도 안 막게 됐다. 코드는 그대로 남아 있어서 겉보기엔 여전히 막고 있는 것처럼 보였다.

신분 대신 순서를 막았다

솔직히 말하면, 한 사람이 두 역할을 번갈아 한다는 걸 기계가 증명할 방법은 없다. 같은 컴퓨터 한 대에서 돌아가니까.

그래서 방향을 바꿨다. 누구인지를 따지는 대신 시점을 막았다.

작업이 진행 중인 동안에는 검수 창이 아예 안 열린다. 작업을 마쳤다고 선언하고 인수인계 기록을 남겨야 그때 검수로 넘어간다. 기록이 없으면 마칠 수도 없다.

보장하는 게 “다른 사람이 봤다”는 아니다. “만드는 중에는 도장을 못 찍는다”이다. 그 차이를 문서에 그대로 적어뒀다.

막았다고 적기 전에 뚫어봤다

이번엔 만들고 나서 일부러 뚫어봤다. 이름을 손으로 지정해보고, 기록 파일을 고쳐보고, 없는 이름을 만들어보고, 작업 중에 검수를 열어봤다.

여섯 가지를 시도해서 여섯 개가 다 막히는 걸 확인하고 나서야 완료라고 적었다.

재발방지 체크리스트
① 신분을 사람이 손으로 적는 방어는 방어가 아니다. 값을 바꾸면 그만이다.
② 무언가를 고친 뒤에는 원래 있던 방어가 아직 작동하는지 확인한다. 조건이 영원히 거짓이 될 수 있다.
③ 증명할 수 없는 것(누구인지)을 막으려 하지 말고 증명할 수 있는 것(순서)을 막는다.
④ “막았다”는 뚫어보고 나서 적는다. 만들었다는 것과 막힌다는 것은 다른 말이다.
본 사이트는 쿠팡 파트너스 및 알리익스프레스(AliExpress) 어필리에이트 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 수 있습니다.