작업 폴더에 비슷한 프로젝트가 여럿 있었다.
collector/
collector-new/
collector_v2/
collector-backup/
어느 것이 쓰이는지 몰라서 아무것도 못 지우고 있었다.
Table of contents
Open Table of contents
무엇이 도는지부터 확인했다
지우기 전에 무엇이 실제로 실행되는지 봤다.
$ ps -ef | grep collector
deploy 2841 ... python /home/deploy/collector/main.py
main.py 가 도는 것을 보니 collector/ 는 살아 있다. 그다음에 예약 실행을 봤다.
$ crontab -l | grep collector
*/5 * * * * /home/deploy/collector/sync.sh
0 4 * * * /home/deploy/collector_v2/report.sh
collector_v2/ 의 report.sh 도 매일 새벽에 돈다. 하나만 도는 줄 알았는데 둘이 돌고 있었다.
평소에는 안 보이다가 특정 시각에만 도는 것이 있다. 실행 중인 것만 보고 지웠으면 새벽에 그 보고가 멈췄을 것이다.
판단 기준 — 남길 것을 가르는 네 줄
무엇을 남기고 무엇을 지울지 기준을 먼저 적었다.
1. 실행 중이거나 예약된 것 → 남긴다
2. 원격 저장소와 연결된 것 → 남긴다
3. 최근에 고친 것 → 확인 대상
4. 나머지 → 지운다 (보관 후)
기준이 있으니 폴더마다 판정이 나왔다.
collector/ 실행 중 + 저장소 연결 → 남김
collector_v2/ 예약 실행 중 → 남김 (이름 확인 필요)
collector-new/ 아무것도 아님, 3개월 전 → 지움
collector-backup/ 아무것도 아님, 8개월 전 → 지움
기준이 없으면 폴더 하나를 볼 때마다 같은 고민을 다시 한다. 그렇게 매번 미루다 보니 넉 달째 아무것도 못 지우고 있었던 것이다.
기준을 정한 뒤로는 판단이 아니라 실행이 됐다. 각 폴더가 네 줄 중 어디에 걸리는지만 보면 된다.
지우기 전에 차이를 봤다
지우기로 한 것에 살릴 것이 남았는지를 대 봤다.
$ diff -rq collector/ collector-new/
Only in collector-new/: experimental.py
Files collector/main.py and collector-new/main.py differ
experimental.py 는 남는 쪽에 없는 파일이었다. 열어 보니 시도하다 만 것이라 옮길 것은 아니었다.
그래도 바로 지우지 않고 압축해 뒀다.
$ tar czf /backup/archive/collector-new-20161107.tar.gz collector-new/
tar 로 묶어 보관 자리에 두고 폴더를 지웠다. 판단이 틀렸더라도 꺼낼 자리가 있으면 지우는 결정이 가벼워진다.
변경 내용 — 이름을 내용에 맞추기
남기기로 한 collector_v2/ 는 이름이 내용과 안 맞았다. 안을 열어 보니 통계 보고 스크립트라 수집과 무관했다.
collector/ 수집
collector-report/ 보고 (구 collector_v2)
판을 뜻하는 _v2 가 실은 다른 일을 하는 것이었다. 이름이 그 폴더가 무엇인지를 안 알려 주니 지울지 말지를 매번 열어 봐야 했다.
이름을 바꾸면서 그것을 가리키는 자리도 같이 고쳤다.
$ grep -rn "collector_v2" /home/deploy /etc/cron.d 2>/dev/null
예약 설정과 스크립트 안의 경로 두 곳이 나왔다. 이름만 바꾸고 가리키는 쪽을 안 고치면 새벽 보고가 조용히 멈춘다.
왜 늘어났는지 봤다
같은 일이 또 생기지 않게 늘어난 경로를 짚어 봤다. 고칠 때 전체를 복사해 두고 작업하거나 시도해 보려고 사본을 만들거나 백업이라고 만들어 두고 안 지운 것이었다.
셋 다 일단 복사해 두는 데서 시작한다. 복사한 뒤 원본이 그대로 도니 사본은 지워도 되는지 확신이 안 서고 그대로 남는다.
확인해 보니 collector/ 만 저장소에 있고 나머지는 아니어서 전부 저장소에 넣었다.
저장소에 있으면 복사할 이유가 줄어든다. 시도해 볼 것은 분기를 따고 지난 판은 이력에서 꺼내면 된다.
사전 준비 — 새 이름 규칙
앞으로 만들 것의 이름 규칙을 먼저 정했다.
{용도}-{기능} collector-report
_v2 나 -new 나 -backup 같은 접미사는 안 쓴다. 판 구분은 저장소가 하므로 폴더 이름이 그 일을 대신할 필요가 없다.
임시로 만들어야 하면 접두사와 날짜를 붙였다.
_tmp-20161107-collector-test/
_tmp 로 시작하는 것은 처음부터 정리 대상이라는 뜻이다. 날짜가 이름에 있으니 오래된 것을 찾기도 쉽다.
$ find . -maxdepth 1 -name "_tmp-*" -mtime +30
find 한 줄로 한 달 지난 것이 나온다. 지울지 말지를 사람이 기억하지 않아도 되게 만든 것이다.
정리 결과를 남겼다
마지막으로 이번에 무엇을 했는지 적어 뒀다.
2016-11-07 작업 폴더 정리
삭제: collector-new (3개월 미사용, 보관 후)
collector-backup (8개월 미사용, 보관 후)
이름: collector_v2 → collector-report
보관: /backup/archive/collector-*-20161107.tar.gz
남은 폴더: 2개
무엇을 지웠고 어디에 보관했고 무엇을 어떤 이름으로 바꿨는지가 다섯 줄에 있다. 몇 달 뒤에 그것이 어디 갔느냐는 물음이 오면 여기를 보면 된다.
기록이 없으면 그 물음에 답할 방법이 없고 지운 사람도 그때쯤이면 기억하지 못한다.
정리
- 지우기 전에 무엇이 실제로 도는지 확인한다
ps로 실행 중인 것과crontab -l로 예약된 것을 둘 다 본다- 기준 네 줄을 먼저 적으면 정리가 판단이 아니라 실행이 된다
- 지울 것을
diff -rq로 대 보고tar로 보관한 뒤 지운다 - 이름이 내용과 안 맞으면 고치고
grep으로 가리키는 자리도 같이 고친다 - 늘어난 경로는 대개 일단 복사해 두는 데서 시작한다
- 저장소에 넣으면 사본 대신 분기를 쓰게 된다
- 이름에 판 구분 접미사를 안 쓰고 임시는
_tmp와 날짜로 표시한다 - 무엇을 지우고 어디에 보관했는지를 기록으로 남긴다