왜 당신의 백업 전략이 $100 million 도박일 수 있는가
Source: Dev.to

나는 픽사 재난을 모든 리드 개발자에게 주는 경고로 본다. 복구를 주간으로 테스트하고 분산 버전 관리를 활용하지 않으면, rm -rf 한 번으로 비즈니스를 끝낼 수 있는 재앙에 직면한다. 백업 시스템은 새 머신에서 성공적으로 복구하기 전까지는 아무것도 아닌 부채에 불과하다.
토이 스토리 2는 어떻게 거의 사라질 뻔했나요?
일상적인 서버 정리 작업이 엔지니어가 프로덕션 디렉터리에서 재귀 삭제 명령을 실행하면서, 백업이 한 달 동안 조용히 실패한 상태였기 때문에 엉뚱하게 진행되었습니다. 이로 인해 수년간의 작업이 몇 분 만에 사라졌고, 팀은 빈 폴더와 기적 없이는 맞출 수 없는 촉박한 마감일에 직면했습니다.
rm -rf가 고위험 환경에서 왜 그렇게 위험한가?
재귀적이고 강제적인 삭제를 실행하여 파일 트리를 순회하면서 확인 프롬프트 하나도 없이 모든 노드를 언링크합니다. 고속 서버 환경에서는 이 과정이 사용자가 프로세스를 중단할 수 있는 속도를 앞서서, 사람이 반응하기 전에 데이터를 순식간에 사라지게 합니다.
# The command that nearly killed Buzz Lightyear
rm -rf /pixar/projects/toy_story_2/
# -r: recursively walks every subdirectory
# -f: forces deletion and ignores all prompts
이 명령을 디지털 목재 파쇄기로 생각해 보세요. 루트 디렉터리를 넣으면 특정 파일이 블록버스터 영화와 관련이 있는지 묻는 일도 없이 바로 디스크상의 포인터를 언링크하고 진행합니다. 공유 볼륨에서 실행하는 것은 불장난과 마찬가지입니다.
“무음” 백업 실패 함정을 어떻게 피할 수 있을까?
무음 실패는 백업 스크립트가 데이터를 쓰지 않았음에도 성공 코드로 종료되거나 로그가 모니터링되지 않을 때 발생합니다. 복구 과정을 매주 통과해야 하는 테스트 스위트로 간주하여 데이터가 실제로 사용 가능한지 확인합니다.
픽사에서는 백업이 4주 동안 실패하고 있었습니다. 테이프는 회전하고 있었을 가능성이 높지만, 기록된 데이터의 무결성을 확인하는 사람은 없었습니다. 디스크 용량이 부족하거나 네트워크 권한이 변동될 때도 유사한 문제가 발생합니다. 데이터 무결성을 위한 다계층 접근이 필수적입니다.
| 실패 지점 | 재해 시나리오 | 안전망 |
|---|---|---|
| 중앙 서버 | 루트에서 rm -rf 실행 | 개발 머신에 분산된 로컬 복사본 |
| 클라우드 제공자 | 지역 장애 | 지역 간 S3 복제 |
| 인간 오류 | 무음 백업 실패 | 자동화된 주간 복구 훈련 |
왜 탈중앙화가 궁극적인 장애 방지인가?
탈중앙화는 서버, 스크립트, 혹은 사람과 같은 단일 실패 지점이 전체 프로젝트의 히스토리를 삭제할 수 없도록 보장합니다. 여러 대의 머신에 로컬에서 동기화된 저장소 복사본을 유지함으로써, 기본 인프라가 실패했을 때 수동 페일오버 역할을 하는 분산된 안전망을 만들 수 있습니다.
픽사 사례에서는, 기술 감독이 재택근무 중 노트북에 로컬 복사본을 가지고 있었기 때문에 영화가 구출되었습니다. 이는 버전 관리와 탈중앙화된 데이터의 힘을 보여줍니다: 만약 10명의 개발자가 각각 저장소 전체를 복제해 두었다면, rm -rf 재해로부터 복구할 수 있는 기회가 10번이나 되는 것입니다.
FAQ
데이터베이스 복구 테스트는 얼마나 자주 해야 하나요?
전체 복구 테스트를 최소 한 달에 한 번 수행하되, 배포할 때마다 최신 백업을 스테이징 환경에 복원하는 프로세스를 자동화하는 것이 이상적입니다. 백업에서 새로운 인스턴스를 올릴 수 없다면, 백업이 없는 것입니다.
Git이 백업 전략을 대체할 수 있나요?
Git은 코드의 분산된 히스토리를 제공하지만, 프로덕션 데이터베이스나 대용량 바이너리 자산에 대한 백업은 아닙니다. 로직은 Git으로 관리하고, 상태 데이터를 위한 자동 스냅샷을 별도의 지리적 영역에 저장하십시오.
“제로 바이트” 백업이란 무엇인가요?
제로 바이트 백업은 스토리지 버킷에 파일이 존재하지만 실제 데이터가 없는 경우를 말합니다. 보통 덤프 스크립트가 중간에 실패했지만 대상 파일을 생성했을 때 발생합니다. 작업을 성공으로 표시하기 전에 백업 파일 크기가 예상 범위 내에 있는지 확인하는 검사를 추가하십시오.