/// LAB · NOTE 05

되돌릴 수 있게 지운다

자료는 되돌릴 수 있게, 결정은 되돌아갈 수 없게. 방향이 반대인 두 가지를 같이 지켜야 한다.

2026-08-22 · 천하 작업 기록

쓰지 않는 그림 파일이 잔뜩 있었다. 천 장이 넘었다. 배포본에 딸려 나가니 용량만 잡아먹고, 어느 게 살아 있는지 헷갈려서 작업도 더뎌졌다.

지우면 된다. 그런데 지우기가 무섭다. "안 쓰는 것 같다"와 "안 쓴다"는 다르고, 틀렸을 때 알아채는 건 몇 주 뒤 특정 화면을 열었을 때다.

지우지 않고 옮긴다

그래서 attic이라는 폴더를 만들어 옮겼다. 다락방이다. 폴더 설명에 이렇게 적어 뒀다.

⚠️ 지운 것이 아니라 옮긴 것이다. 필요하면 원래 자리로 되돌릴 수 있게 두었다.

이 저장소는 형상 관리 도구를 쓰지 않는다. 지우면 정말 없어진다. 그러니 옮기는 편이 맞다.

무엇을 옮길지 기계가 정한다

"안 쓰는 것 같다"를 눈으로 고르면 안 된다. 판정 기준을 하나로 못 박았다.

기준

어떤 코드도 그 이름을 문자열로 부르지 않는다.

기계적이라 사람의 감이 끼어들지 않는다. 이 기준으로 스물여섯 폴더, 천삼백여 장을 옮겼다. 그리고 옮긴 목록을 파일로 남겼다. 어느 것이 어디서 어디로 갔는지가 다 적혀 있으니, 되돌릴 때 헤매지 않는다.

그런데 그 판정이 틀렸다

기준은 옳았는데 재는 방법이 틀렸다. 처음엔 정규식으로 소스를 훑었다. 이름이 문자열로 적혀 있는지 찾으면 되니까.

코드가 이름을 통째로 적지 않고 조립해서 부르는 자리가 있었다.

f'FLAG0{i}'                # 번호를 붙여 부른다
f'TEACH-{min(n,2)}.IMG'    # 이것도

문자열만 훑는 눈에는 FLAG01이 아무 데도 없어 보인다. 실제로는 일곱 장이 다 쓰이고 있었다. 거짓 양성 네 개가 이렇게 나왔다.

그리고 반대 방향으로도 틀렸다

같은 오판으로 엔딩 화면 세 장을 잘못 분류했다. 나중에 다시 재고 나서야 알았다.

고친 방법은 정규식을 버리고 파이썬 구문 트리로 문자열을 걷는 것이었다. 조립해 부르는 형태는 앞부분만이라도 살려서 판정에 넣었다. 그리고 원칙을 하나 더 붙였다.

원칙

애매하면 남기는 쪽.

쓸데없는 파일 한 장이 남는 손해와, 필요한 파일 한 장이 사라지는 손해는 크기가 다르다. 비대칭인 위험에는 비대칭으로 대응해야 한다.

세 겹으로 지킨다

옮기고 끝내면 시간이 지나며 흐트러진다. 그래서 시험 세 개를 붙였다.

  1. 옮긴 것이 조용히 돌아오지 않는가. 누가 되돌려 놓으면 깨진다.
  2. 필요한 것이 빠지지 않았는가. 게임이 읽는 이름을 소스에서 긁어 실제 파일과 대조한다.
  3. 다락방이 배포본에 실리지 않는가.

두 번째가 핵심이다. 지우기 시험은 보통 "지운 게 안 돌아오나"만 본다. 그런데 정작 위험한 쪽은 반대다 — 필요한 것을 지웠는데 아무도 모르는 것. 그건 화면을 열어 보기 전까지 조용하다.


결정은 반대로 — 돌아갈 길을 끊는다

여기서 방향이 뒤집힌다. 글꼴을 동봉한 것으로 통일하면서, 예전 방식으로 돌아가는 갈래를 남겨 두지 않고 없앴다. 주석에 이렇게 적혀 있다.

끄는 길은 없앴다. 예전엔 설정을 비우면 옛 방식으로 돌아갔는데 —

자료는 되돌릴 수 있게 두면서 왜 이건 끊는가. 성격이 다르기 때문이다.

무엇어떻게
자료·파일옮긴다 (되돌릴 수 있게)잘못 판정할 수 있다
결정·정책길을 끊는다되돌아갈 길이 있으면 언젠가 되돌아간다

"설정을 비우면 옛 방식"이라는 갈래를 남겨 두면, 언젠가 누가 — 나든 AI든 — 문제를 만났을 때 그 갈래로 도망친다. 그게 가장 쉬운 해결이니까. 그러면 결정이 조용히 무효가 된다.

그래서 결정을 지킬 때는 구조에서 선택지를 없앤다. 그리고 시험을 붙여 되살아나지 못하게 한다.

덮어쓰지 않고 승격한다

비슷한 태도가 작업물에도 있다. 새 안을 만들 때 기존 파일을 고치지 않고 이름에 판을 붙여 따로 만든다. 초안이 쌓이면 그중 하나를 골라 제자리로 승격시키는데, 승격도 별도 스크립트로 한다.

덮어쓰기가 아니라 승격이라 고른 이력이 남는다. 세 안 중 왜 두 번째를 골랐는지가 파일 목록에 그대로 보인다.

웹 쪽에서도 같은 습관을 쓴다. 설정 파일을 고칠 때는 먼저 사본을 만든다. 실제로 서버 설정을 잘못 건드렸을 때 그 사본으로 몇 초 만에 돌아갔다.

손대면 안 되는 것은 해시로 잠근다

되돌릴 수 있게 하는 것과 별개로, 아예 안 바뀌어야 하는 파일이 있다. 그건 내용의 지문을 기록해 두고 시험이 지킨다. 그 시험의 설명이 인상적이라 그대로 옮긴다.

이 시험이 실패하면 작업 중 원본이 오염된 것이다. 즉시 중단하고 복구해야 한다.

"고쳐라"가 아니라 "즉시 중단하라"다. 이런 종류의 실패는 계속 작업하면 피해가 커지기만 한다. 시험이 그 판단까지 담고 있는 것이다.


AI와 일할 때 이게 왜 중요한가

AI에게 "이거 안 쓰는 것 같은데 지워도 될까?"를 물으면, 대개 "네, 참조가 없습니다"라고 답한다. 그리고 그 답은 자주 맞다. 그래서 위험하다 — 자주 맞으면 확인을 안 하게 된다.

앞의 거짓 양성 네 개가 정확히 그 경우였다. 참조가 없어 보였고, 근거도 그럴듯했다. 판단이 잘못된 게 아니라 보는 방법이 못 미쳤던 것이다.

그래서

AI의 판단을 믿을지 말지를 고민하는 대신, 틀려도 되는 구조를 만든다. 옮기면 틀려도 되돌린다. 목록이 있으면 무엇을 되돌릴지 안다. 시험이 있으면 틀렸다는 걸 몇 주 뒤가 아니라 그날 안다.

정리하면 이렇다. 되돌릴 수 있게 만들어 두면 과감해질 수 있다. 천삼백 장을 한 번에 옮기는 결정을 하루에 내릴 수 있었던 건, 틀렸을 때 되돌리는 값이 거의 0이라는 걸 알았기 때문이다.

조심하는 것보다 조심할 필요가 없게 만드는 것이 낫다.

← 글 목록 ← 이전 · 내 말을 그대로 적어 둔다 다음 · 한 곳만 고치면 되게 만든다 →