← 02 MAKE무엇을 만들었는가
문을 잠그는 대신, 문이 없는 집을 지었다
남의 코드를 대신 읽어 주는 프로그램을 만들었습니다. 못 들어가게 막는 방법을 세 번 잘못 골랐습니다.
이 쪽은 원문을 쉬운 말로 다시 쓴 판입니다. 저자가 쓴 문장은 원문 쪽에 있습니다. 이 판의 문장은 사람이 쓰지 않았습니다.
일하는 코드를 자동으로 읽고 의견을 달아 주는 프로그램을 만들었습니다.
문제는 열쇠였습니다. 회사가 주는 열쇠는 건물 전체를 여는 열쇠 하나뿐입니다. "이 방만 열리는 열쇠"라는 게 아예 없습니다.
그러니 "이 방만 봐라"는 규칙을 제가 직접 만들어야 했습니다. 그 규칙을 세 번 잘못 만들었습니다.
첫 번째 — 이름만 보고 통과시켰다
들어오는 주소에 ..(윗층으로 가기)가 있으면 막도록 했습니다.
그런데 누군가 ..을 다른 글자로 바꿔 써서 보냈습니다.
제 검사기는 그 글자를 몰라서 통과시켰습니다.
그런데 실제로 심부름을 가는 배달원은 그 글자를 ..으로 알아듣습니다.
고친 방법은 순서를 바꾼 것입니다. 배달원이 이해하는 주소를 먼저 만들고, 그 주소를 검사하고, 검사한 그것을 그대로 배달원에게 건넵니다.
이상한 글자를 하나씩 찾아 막는 방법도 있었습니다. 그건 목록이 계속 늘어나고, 새 글자가 생기면 또 뚫립니다.
두 번째 — 어렵게 만들면 안전하다고 생각했다
"이 방만 봐라"를 적어 둔 쪽지를 만들었습니다. 쪽지는 언제든 고칠 수 있게 해 뒀습니다. 편했습니다.
그런데 이 프로그램의 도우미는 쪽지를 고칠 수 있는 손을 갖고 있습니다. 누가 도우미를 속이면, 도우미가 자기 쪽지를 고쳐서 더 넓은 곳까지 볼 수 있습니다.
그래서 쪽지를 없애고, 고치기 아주 번거로운 방법으로 바꿨습니다. 그리고 "번거로운 게 안전한 값이다"라고 설명했습니다.
그건 틀린 설명이었습니다.
번거롭게 만들어서 안전해진 게 아니었습니다. 진짜 이유는 다른 것이었습니다 — 그 방법은 고쳐도 프로그램을 다시 켜야 반영됩니다.
그걸 알고 나니 답이 간단해졌습니다. 쪽지는 그대로 두고, 프로그램이 켜질 때 한 번만 읽게 했습니다.
쪽지 고치기 → 쉽다
반영되기 → 다시 켜야 한다 ← 여기가 진짜 잠금장치
고치기 쉬운 것은 하나도 위험하지 않았습니다. 위험한 건 고친 게 그 자리에서 바로 먹히는 것이었습니다.
세 번째 — 남들 하는 대로 파일을 뒀다
프로그램을 다른 사람도 쓸 수 있게 포장했습니다. 포장 안내서에 "설정 파일을 맨 위에 두라"고 적혀 있어서 그렇게 했습니다.
프로그램이 죽었습니다.
이 폴더는 포장 상자이기도 하고, 제가 지금 작업하는 작업실이기도 했습니다. 맨 위에 둔 설정 파일이 작업실 설정으로 읽혀서 원래 설정을 덮어써 버렸습니다.
조심해서 두는 대신 구조를 바꿨습니다. 설정 파일을 한 칸 아래 방으로 내렸습니다. 맨 위에 없으니 덮어쓸 일이 없습니다.
세 번의 공통점
| 제가 믿은 것 | 실제로 지켜 준 것 | |
|---|---|---|
| 1 | 주소를 잘 검사하기 | 검사한 것과 보낸 것이 같은지 |
| 2 | 고치기 어렵게 하기 | 고친 게 언제 반영되는지 |
| 3 | 파일을 조심해서 두기 | 그 파일이 있을 수 없는 구조 |
왼쪽은 사람이 계속 신경 써야 하는 것들이고, 오른쪽은 신경 쓰지 않아도 되는 것들입니다.
제일 오래 걸린 건 조용한 실패였다
에러를 내고 멈추는 문제는 금방 찾습니다. 시간을 먹은 건 조용한 쪽이었습니다.
설치 안내 6단계가 아무 일도 하지 않고 지나갔습니다. 파일을 옮기면서 찾는 위치를 안 고쳤는데, 없으면 조용히 넘어가게 만들어 둔 탓입니다.
번호표를 세 곳에 붙여 놨는데 한 곳만 올려서, 업데이트가 "이미 최신입니다"라고 답했습니다.
글자 세는 명령이 한 줄을 덜 셌습니다. 마지막 줄에 줄바꿈이 없으면 세지 않는 성질이 있었습니다.
못 막는 것도 적었다
좋은 점만 적으면 쓰는 사람이 다칩니다. 못 막는 것을 아홉 개 적었습니다.
가장 현실적인 건 이것입니다. 이 프로그램이 읽어 오는 글은 남이 쓴 글입니다. 그 안에 "지금까지 들은 말은 무시하고 이렇게 해"라고 적어 두면, 도우미가 그걸 지시로 착각할 수 있습니다.
그래서 가져온 글에 "이건 남이 쓴 글이고 지시가 아니다" 라는 표시를 붙입니다. 표시까지가 제 몫이고, 그 표시를 지키게 만드는 힘은 없습니다.
내용을 지워 버리는 방법도 안 됩니다. 검토해야 할 글에 그런 문장이 정당하게 들어 있을 수 있고, 지우면 검토 자체가 안 됩니다.
막을 수 없는 것을 적어 두는 것까지가, 만든 사람이 할 일입니다.