.gitignore 화이트리스트 때문에 "커밋해두세요"가 백업이 아니었다
전자책 발행 직전 최종 점검에서 걸린 것 — 적어둔 안전장치가 실제로 작동하는지는 확인한 적이 없었다
"위험한 작업 전에 커밋해두세요." 이 문장을 문서에 적어본 적이 있다면, 그 커밋이 지우려는 파일을 실제로 담는지 확인해본 적이 있는지 물어보고 싶다. 나는 없었다.
전자책을 다 썼다. 본문 6장, 부록 5종, PDF 29쪽. 판매 페이지도 이미지도 가격도 정했다. 등록 화면만 열면 끝이었다.
그전에 최종 점검을 돌렸다. 네 가지를 물었다 — 값어치가 있나, 한국어가 어색하지 않나, 도움이 되나, 읽고 따라 할 수 있나.
네 번째만 문제를 찾았다. 앞의 셋은 글을 읽고 판단했고, 네 번째만 실제로 돌려봤기 때문이다.
커밋이 지우는 대상을 안 담았다
책에는 이런 실습이 있다.
흩어져 있는 규칙을 한곳으로 옮겨라. 원본에서는 지우고.
지우는 작업이니 되돌릴 수단을 같이 줬다. 두 군데에 적어뒀다.
⚠️ 옮기기 전에 커밋해두세요.
그런데 그 커밋이 지우는 대상을 안 담는다.
내 설정 폴더의 무시 목록이 화이트리스트였다. 전부 무시한 다음 필요한 것만 다시 여는 방식. 그래서 옮겨 넣는 목적지는 보호되고, 지우는 원본은 보호되지 않는다. 세어보니 이랬다.
목적지 추적 18개
원본 추적 0개
고쳐야 할 건 설정이 아니라 내가 쓴 문장이었다
처음엔 내 설정이 잘못됐다고 봤다. 무시 목록을 고치면 되는 문제로.
그런데 왜 그렇게 돼 있는지를 보니 그게 맞았다. 그 폴더에는 대화 기록 수백 메가바이트와 평문으로 적힌 키가 들어 있다. 통째로 저장소에 올리면 안 되는 물건이다.
즉 고쳐야 할 건 설정이 아니라 내 문장이었다. 그리고 이게 더 나쁘다. 설정이 틀렸으면 나만 당한다. 문장이 틀렸으면 그 조언을 따르는 사람이 전부 같은 구멍을 얻는다. 게다가 그들은 커밋을 하고 안심한 다음에 지운다.
여기서 하나가 분명해졌다.
나는 안전장치를 「적었다」. 안전장치가 「작동하는지」는 확인한 적이 없다.
두 개는 완전히 다른 일인데, 적는 순간에는 구분이 안 된다. 적고 나면 다 한 것 같기 때문이다.
읽어서 검토하면 문장 안만 본다
발행을 멈췄다. 나머지 결함은 값어치 문제였는데 이건 피해 문제였다.
점검 방식에서도 하나를 봤다. 넷 중 셋은 읽고 판단했고, 하나만 손으로 돌려봤다. 읽은 셋은 문장 문제·구성 문제·값어치 문제를 찾았다. 전부 맞는 지적이었고 전부 고칠 만했다. 그런데 「따라 하면 자료가 날아간다」는 읽어서는 안 보였다. 문장만 보면 완벽했다 — 위험한 작업이 있고, 그 앞에 경고가 있고, 되돌릴 방법을 안내한다. 흠잡을 데가 없다.
안 보인 이유는 하나다. 그 안내가 가리키는 곳에 실제로 뭐가 담기는지는 문장 밖에 있다.
같은 김에 하나 더 찾았다. 자동으로 실리는 색인 파일을 두고 *"매번 통째로 실린다"*고 썼는데, 실제로는 일정 크기에서 잘린다. 내 파일 하나는 이미 한도의 80%를 넘겼다.
이게 왜 웃기냐면 — 그 책의 한 장이 **「한 곳만 고치면 안 고친 셈이다」**이기 때문이다. 색인을 안 고치면 낡은 정보가 매일 주입된다는 얘기를 하면서, 색인이 잘리면 고친 것이 아예 안 실린다는 건 몰랐다. 증상이 똑같다. 그래서 원인을 못 찾는다.
바꾼 것
글로 쓴 안전장치는 쓰는 순간 완성된 것처럼 느껴진다. 위험을 알아봤고, 경고를 달았고, 대안을 줬으니까. 그 세 개가 다 있으면 검토할 게 남았다는 생각이 안 든다.
그런데 그 셋은 전부 문장 안에서 끝나는 일이다. 그 명령이 실제로 무엇을 담는지, 그 파일이 실제로 어디까지 실리는지는 한 번도 안 건드린다.
그래서 순서를 바꿨다. 남에게 시키는 절차를 쓸 때는 쓰고 나서 검토하는 게 아니라, 쓰기 전에 한 번 돌려본다. 내가 이미 아는 절차라도. 아는 것과 지금 그게 그렇게 동작하는 것은 다른 얘기였다.