LabHub
배우기 러닝패스 코스

オブジェクトストレージとS3

バージョニングとライフサイクルを扱う

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

버저닝을 켜고 버전이 쌓이는 과정, 삭제가 delete marker 로 표현되는 방식, 그리고 그것을 정리하는 수명주기 규칙까지 한 번에 다룬다.

왜 중요한가

버저닝은 실수 복구를 위한 안전망이지만 동시에 비용 함정입니다. 매일 같은 키에 로그를 덮어쓰는 코드에 버저닝을 켜면 1년 뒤 그 키 하나에 365개 버전이 쌓입니다. 목록에는 객체 하나로 보이는데 요금은 365배입니다. 그리고 "다 지웠는데 요금이 그대로"라는 문의의 원인이 delete marker 입니다 — 버전 ID 없이 지우면 데이터는 그대로 있고 표시만 하나 올라갑니다. 그래서 실무에서 버저닝을 켜는 결정과 수명주기 규칙을 거는 결정은 항상 함께 내려집니다. 이 실습의 7번 스텝이 그 기본 세트 세 가지를 다룹니다.

단계

  1. 버킷 lab-vers 를 만들고 버저닝을 켠다. mc version info local/lab-versEnabled 가 보여야 한다.
  2. local/lab-vers/doc.txt 에 서로 다른 내용을 3번 올린다. mc ls --versions local/lab-vers/doc.txt 가 3줄이어야 한다.
  3. 가장 오래된 버전을 버전 ID 로 지정해 /root/vers/v1.txt 로 받는다. 내용이 첫 번째로 올린 것이어야 한다.
  4. 버전 지정 없이 doc.txt 를 지운다. mc ls --versions local/lab-vers/doc.txt 가 4줄이 되고 그중 하나가 delete marker 여야 한다. /root/vers/marker.txtversions=4 has_delete_marker=true 를 적는다.
  5. delete marker 를 버전 ID 로 지정해 지운다. mc cat local/lab-vers/doc.txt 가 3번째 내용을 돌려줘야 한다. /root/vers/restore.txtrestored=true 를 적는다.
  6. /root/vers/versions.txtcurrent_bytes=<n>, noncurrent_bytes=<n>, total_bytes=<n> 세 줄을 적는다. total 은 두 값의 합이고 noncurrent 는 0보다 커야 한다.
  7. /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 에 저장한다.

참고

버킷 버저닝 켜기

버킷 lab-vers 를 만들고 버저닝을 켠다. mc version info local/lab-versEnabled 가 보여야 한다.

버킷 단위 설정입니다. 켠 뒤 상태를 조회해 확인하세요.

같은 키에 세 번 써서 버전 쌓기

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.txtversions=4 has_delete_marker=true 를 적는다.

버전 지정 없이 지우면 실제로 사라지지 않습니다. 버전 목록에 새 항목이 생깁니다.

delete marker 를 지워 복구하기

delete marker 를 버전 ID 로 지정해 지운다. mc cat local/lab-vers/doc.txt 가 3번째 내용을 돌려줘야 한다. /root/vers/restore.txtrestored=true 를 적는다.

표시를 지우면 바로 아래 버전이 다시 현행이 됩니다. 이것이 실수 복구의 메커니즘입니다.

비현행 버전 용량 계산하기

/root/vers/versions.txtcurrent_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 에 저장한다.

비현행 버전 만료, 만료된 표시 정리, 미완료 업로드 중단 세 가지가 기본 세트입니다.