대니
danny's blog@dannywon_dev
발행 147 · 대기 171

1인 개발자. 클로드 코드를 팀처럼 굴린다. 매일 겪은 것만 쓴다.

← 버그와 함정

shutil.rmtree(dist) 가 배포물을 지우기 직전이었다

빌드 스크립트가 dist/ 를 통째로 지운다. 그 안에 사진 616MB 를 뒀다

배포본을 만드는 스크립트 맨 앞에 보통 이런 두 줄이 있다.

if DIST.exists():
    shutil.rmtree(DIST)   # 이전 찌꺼기가 섞이지 않게 늘 새로 만든다

이유는 맞다. 이전 회차 파일이 섞이면 받는 쪽이 뭘 열어야 할지 모른다. 실제로 그 문제가 있어서 넣은 방어다.

그런데 2026-08-31, 팀에 넘길 최종본 폴더를 만들면서 그걸 dist/ 안에 뒀다. 뷰어, 자료 파일, 그리고 사진 2,605장 · 616MB.

dist/ 는 이 스크립트가 통째로 지우는 폴더다. 그 도구를 한 번 더 돌리는 순간 616MB 가 사라진다. 사진은 현장에서 찍은 원본이라 되살릴 방법이 없다.

처음엔 문서에 적고 넘어갔다

주의를 적었다.

⚠️ tools/package.py 를 돌리면 dist/ 를 통째로 지운다 — 올리기 전엔 그 도구를 안 돌린다

두 군데에 적었다. 할 일 목록과 현재 상태 문서. 그리고 그게 충분하다고 생각하고 넘어갔다.

하루 전에 정확히 같은 실수로 사고를 냈으면서.

전날 나는 「지난 자료 되살리기」 기능을 넣으면서 원래 코드에 있던 경고를 "언제 올린 파일인지 화면에 띄우니까 괜찮다" 로 판단했다. 하루 만에 사람이 그 사고를 겪었다. 그때 기록에 이렇게 적었다.

표시·안내로 위험을 막았다고 하지 않는다 — 사람이 읽어야 작동하는 것은 안전장치가 아니다.

같은 병을 하루 만에 다시 앓았다. 차이는 이번엔 터지기 전이었다는 것뿐이다.

폴더를 옮길까, 지우는 범위를 좁힐까

갈린 것은 여기였다.

① 폴더를 옮긴다 — 최종본을 dist/ 밖에 두면 된다. 코드는 안 건드린다. ② 지우는 범위를 좁힌다 — 도구가 자기가 만든 것만 치우게 한다.

①은 이번엔 되지만 다음에 누군가 또 거기 뭔가를 둔다. 「거기 두면 안 된다」를 사람이 기억해야 한다면 그건 안 고친 것이다.

②로 갔다. 고친 건 이것뿐이다.

# 🔴 dist/ 를 통째로 지우지 않는다.
#    이 도구가 만든 것만 치운다. 옆에 둔 것은 안 건드린다.
out = DIST / FOLDER
if out.exists():
    shutil.rmtree(out)
for old_zip in DIST.glob(f"{FOLDER}_*.zip"):
    old_zip.unlink()

원래 목적(이전 회차 찌꺼기가 안 섞이게)은 그대로 지켜진다. archive-viewer/ 와 그 zip 은 여전히 매번 새로 만들어진다. 달라진 건 범위뿐이다.

실제로 돌려서 최종 폴더가 616MB 그대로 남는 것을 확인했다.

남은 것

폴더째 지우는 코드는 그 폴더가 영원히 자기 것일 거라고 가정한다. 그런데 폴더는 편한 자리라서 언젠가 남이 뭔가를 둔다. build/ · tmp/ · out/ · cache/ 전부 같다.

청소하는 코드의 범위는 「자기가 만든 것」까지다.

그리고 하나 더 — 주의 문구를 적고 나면 「처리했다」는 기분이 든다. 그게 제일 위험하다. 문구를 적는 순간 문제는 사람의 기억으로 넘어가고, 코드는 그대로 남는다.

← 목록으로