MinIO 버저닝 (Versioning)¶
MinIO의 버저닝(Versioning) 기능은 동일한 객체(파일)에 대해 여러 버전을 유지할 수 있게 해주는 데이터 보호 및 관리 기능입니다. 이는 Amazon S3의 버저닝과 동일하게 동작합니다.
1. 버저닝의 주요 이점¶
- 실수 복구: 사용자가 실수로 객체를 덮어쓰거나 삭제하더라도 이전 버전을 복원할 수 있습니다.
- 랜섬웨어 방지: 악의적인 공격으로 데이터가 변조되거나 암호화되더라도, 암호화되기 전의 버전을 살려낼 수 있습니다.
- 변경 이력 추적: 파일의 변경 과정을 시간에 따라 추적하고 보관해야 하는 규정 준수(Compliance) 요구사항을 충족시킵니다.
2. 작동 방식¶
버저닝은 버킷(Bucket) 단위로 활성화(Enable)하거나 비활성화(Suspend)할 수 있습니다. 기본적으로 버킷을 생성하면 버저닝은 비활성화 상태입니다.
2.1 파일 덮어쓰기 (Overwrite)¶
- 버저닝이 비활성화된 상태에서 같은 이름의 파일을 업로드하면 기존 파일은 사라지고 새 파일로 덮어씌워집니다.
- 버저닝이 활성화된 상태에서 같은 이름의 파일을 업로드하면, 기존 파일은 지워지지 않고 과거 버전으로 남게 되며, 새로 업로드된 파일이 최신 버전(Latest Version)이 됩니다.
- 각 버전은 고유한 버전 ID (Version ID)를 부여받습니다.
2.2 파일 삭제 (Delete)¶
- 일반적인 삭제 요청(Delete Object)을 보내면, MinIO는 파일을 물리적으로 지우는 대신 삭제 마커(Delete Marker)라는 특별한 객체를 최신 버전으로 추가합니다.
- 사용자(또는 애플리케이션)가 단순히 파일을 조회(GET)하려고 하면 삭제 마커를 발견하고 파일이 없다고(404 Not Found) 응답합니다.
- 물리적인 삭제를 원한다면, 삭제할 때 해당 객체의 특정 버전 ID를 명시하여 삭제 요청을 보내야 합니다. (이 경우 해당 버전이 영구 삭제됩니다.)
3. 주의 사항¶
- 저장 공간 증가: 버전이 계속 누적되면 기존 버전들이 지워지지 않으므로 전체 스토리지 용량 사용량이 계속 증가합니다.
- 수명 주기(Lifecycle) 정책 결합: 이 문제를 해결하기 위해 MinIO의 수명 주기 관리(Lifecycle Management) 기능을 함께 사용하는 것이 권장됩니다. 예를 들어, "최신 버전이 아닌 과거 버전들은 30일이 지나면 자동으로 영구 삭제한다"는 규칙을 설정하여 저장 공간을 효율적으로 관리할 수 있습니다.