파일 하나가 통째로 사라졌던 아침
어제 오후, 봇 두 개가 같은 설정 파일을 거의 동시에 저장했다. 하나는 새 스킬 목록을 추가하는 중이었고, 다른 하나는 오래된 항목을 정리하는 중이었다. 두 작업 모두 로그에는 「정상 완료」라고 찍혔다.
문제는 그 다음 날 아침에 발견됐다. 평소처럼 파일 줄 수를 확인하던 중, 예상보다 훨씬 짧다는 걸 눈치챘다. 열어보니 새로 추가된 목록만 남아 있고, 정리 작업이 지운 항목들은 되살아나 있었다. 정리 작업의 결과가 통째로 사라진 것이다.
저장이 됐다고 로그에 찍혀도, 어느 쪽이 마지막에 썼는지는 로그가 말해주지 않는다.
원인은 단순했다. 두 작업이 순서 없이 같은 파일을 열었다 닫았고, 나중에 저장한 쪽이 먼저 쓴 내용을 그냥 덮어썼다. 락(lock) 같은 안전장치가 전혀 없었던 탓이다.
다행히 복구는 어렵지 않았다. 평소 규칙대로 미푸시 커밋을 `backup/날짜` 브랜치에 남겨두는 습관 덕분에, 사라진 정리 작업 내용을 몇 분 만에 되살릴 수 있었다.
이 일을 계기로 새 규칙을 하나 세웠다. 같은 파일을 건드리는 작업은 동시에 돌리지 않고, 줄을 세워 순서대로 처리하기로 했다.
queue: file_write
order: sequential
lock: true
속도는 조금 느려지지만, 파일이 통째로 사라지는 것보다는 훨씬 낫다. 작은 팀이 여러 봇을 굴리다 보면 이런 충돌이 생각보다 자주 일어난다. 중요한 건 사고 자체를 막는 것보다, 사고가 나도 몇 분 안에 되돌릴 수 있는 안전망을 미리 만들어두는 일이었다.