处理版本管理与生命周期
한국어 원문으로 표시합니다.
목표
버저닝을 켜고 버전이 쌓이는 과정, 삭제가 delete marker 로 표현되는 방식, 그리고 그것을 정리하는 수명주기 규칙까지 한 번에 다룬다.
왜 중요한가
버저닝은 실수 복구를 위한 안전망이지만 동시에 비용 함정입니다. 매일 같은 키에 로그를 덮어쓰는 코드에 버저닝을 켜면 1년 뒤 그 키 하나에 365개 버전이 쌓입니다. 목록에는 객체 하나로 보이는데 요금은 365배입니다. 그리고 "다 지웠는데 요금이 그대로"라는 문의의 원인이 delete marker 입니다 — 버전 ID 없이 지우면 데이터는 그대로 있고 표시만 하나 올라갑니다. 그래서 실무에서 버저닝을 켜는 결정과 수명주기 규칙을 거는 결정은 항상 함께 내려집니다. 이 실습의 7번 스텝이 그 기본 세트 세 가지를 다룹니다.
단계
- 버킷
lab-vers를 만들고 버저닝을 켠다.mc version info local/lab-vers에Enabled가 보여야 한다. local/lab-vers/doc.txt에 서로 다른 내용을 3번 올린다.mc ls --versions local/lab-vers/doc.txt가 3줄이어야 한다.- 가장 오래된 버전을 버전 ID 로 지정해
/root/vers/v1.txt로 받는다. 내용이 첫 번째로 올린 것이어야 한다. - 버전 지정 없이
doc.txt를 지운다.mc ls --versions local/lab-vers/doc.txt가 4줄이 되고 그중 하나가 delete marker 여야 한다./root/vers/marker.txt에versions=4 has_delete_marker=true를 적는다. - delete marker 를 버전 ID 로 지정해 지운다.
mc cat local/lab-vers/doc.txt가 3번째 내용을 돌려줘야 한다./root/vers/restore.txt에restored=true를 적는다. /root/vers/versions.txt에current_bytes=<n>,noncurrent_bytes=<n>,total_bytes=<n>세 줄을 적는다. total 은 두 값의 합이고 noncurrent 는 0보다 커야 한다./root/vers/lifecycle.json에 수명주기 규칙을 담아mc ilm rule import local/lab-vers로 적용한다. 비현행 버전 30일 만료, 만료된 delete marker 정리, 미완료 멀티파트 7일 중단 — 세 가지 동작이 모두 들어가야 한다. 다만 MinIO 는 만료·전환 동작이 하나도 없는 규칙을 거부하므로, 중단 동작만 담은 규칙을 따로 두면 적용이 실패한다. 그 동작은 만료 규칙과 한 규칙에 합쳐 넣는다.mc ilm rule ls local/lab-vers출력을/root/vers/ilm.txt에 저장한다.
참고
- 버전 목록:
mc ls --versions local/lab-vers/doc.txt - 버전 지정 조회:
mc cat --version-id <id> local/lab-vers/doc.txt - 수명주기 적용:
mc ilm rule import local/lab-vers < /root/vers/lifecycle.json(이 mc 는ilm import가 아니라ilm rule import이다) - 흔한 실수 1: 버전 ID 없이 지우고 "지워졌다"고 믿는 것 — 데이터도 요금도 그대로입니다.
- 흔한 실수 2: 버저닝만 켜고 수명주기를 안 거는 것 — 비용이 조용히 누적됩니다.
버킷 버저닝 켜기
버킷 lab-vers 를 만들고 버저닝을 켠다. mc version info local/lab-vers 에 Enabled 가 보여야 한다.
버킷 단위 설정입니다. 켠 뒤 상태를 조회해 확인하세요.
같은 키에 세 번 써서 버전 쌓기
local/lab-vers/doc.txt 에 서로 다른 내용을 3번 올린다. mc ls --versions local/lab-vers/doc.txt 가 3줄이어야 한다.
내용을 매번 다르게 해야 나중에 구별할 수 있습니다. 버전 목록을 조회해 보세요.
옛 버전 읽어 오기
가장 오래된 버전을 버전 ID 로 지정해 /root/vers/v1.txt 로 받는다. 내용이 첫 번째로 올린 것이어야 한다.
버전 식별자를 지정해 조회합니다. 첫 번째로 올린 내용이 나와야 합니다.
삭제 후 delete marker 확인하기
버전 지정 없이 doc.txt 를 지운다. mc ls --versions local/lab-vers/doc.txt 가 4줄이 되고 그중 하나가 delete marker 여야 한다. /root/vers/marker.txt 에 versions=4 has_delete_marker=true 를 적는다.
버전 지정 없이 지우면 실제로 사라지지 않습니다. 버전 목록에 새 항목이 생깁니다.
delete marker 를 지워 복구하기
delete marker 를 버전 ID 로 지정해 지운다. mc cat local/lab-vers/doc.txt 가 3번째 내용을 돌려줘야 한다. /root/vers/restore.txt 에 restored=true 를 적는다.
표시를 지우면 바로 아래 버전이 다시 현행이 됩니다. 이것이 실수 복구의 메커니즘입니다.
비현행 버전 용량 계산하기
/root/vers/versions.txt 에 current_bytes=<n>, noncurrent_bytes=<n>, total_bytes=<n> 세 줄을 적는다. total 은 두 값의 합이고 noncurrent 는 0보다 커야 한다.
목록에는 객체 하나로 보이지만 요금은 모든 버전에 붙습니다. 합계를 직접 내 보세요.
수명주기 규칙 적용하기
/root/vers/lifecycle.json 에 수명주기 규칙을 담아 mc ilm rule import local/lab-vers 로 적용한다. 비현행 버전 30일 만료, 만료된 delete marker 정리, 미완료 멀티파트 7일 중단 — 세 가지 동작이 모두 들어가야 한다. 다만 MinIO 는 만료·전환 동작이 하나도 없는 규칙을 거부하므로, 중단 동작만 담은 규칙을 따로 두면 적용이 실패한다. 그 동작은 만료 규칙과 한 규칙에 합쳐 넣는다. mc ilm rule ls local/lab-vers 출력을 /root/vers/ilm.txt 에 저장한다.
비현행 버전 만료, 만료된 표시 정리, 미완료 업로드 중단 세 가지가 기본 세트입니다.