TT Lab
시작하기
배우기 러닝패스 코스

오브젝트 스토리지와 S3

버저닝과 수명주기 다루기

TT Lab 에서 이어서 보기

목표

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

왜 중요한가

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

단계

  1. 버킷 lab-vers 를 만들고 버저닝을 켠다. aws --profile local s3api get-bucket-versioning --bucket lab-vers 에 Enabled 가 보여야 한다.
  2. s3://lab-vers/doc.txt 에 서로 다른 내용을 3번 올린다. aws --profile local s3api list-object-versions --bucket lab-vers --prefix doc.txt 의 Versions 가 3개여야 한다.
  3. 가장 오래된 버전을 버전 ID 로 지정해 /root/vers/v1.txt 로 받는다. 내용이 첫 번째로 올린 것이어야 한다.
  4. 버전 지정 없이 doc.txt 를 지운다. 버전 목록에 DeleteMarkers 가 하나 생겨 전체 항목이 4개가 되어야 한다. /root/vers/marker.txt 에 versions=4 has_delete_marker=true 를 적는다.
  5. delete marker 를 버전 ID 로 지정해 지운다. aws --profile local s3 cp s3://lab-vers/doc.txt - 가 3번째 내용을 돌려줘야 한다. /root/vers/restore.txt 에 restored=true 를 적는다.
  6. /root/vers/versions.txt 에 current_bytes=<n>, noncurrent_bytes=<n>, total_bytes=<n> 세 줄을 적는다. total 은 두 값의 합이고 noncurrent 는 0보다 커야 한다.
  7. /root/vers/lifecycle.json 에 수명주기 규칙을 담아 aws s3api put-bucket-lifecycle-configuration --bucket lab-vers --lifecycle-configuration file:///root/vers/lifecycle.json 으로 적용한다. 비현행 버전 30일 만료, 만료된 delete marker 정리, 미완료 멀티파트 7일 중단 — 세 가지 동작이 모두 들어가야 한다. aws s3api get-bucket-lifecycle-configuration --bucket lab-vers 출력을 /root/vers/ilm.txt 에 저장한다.

참고

버킷 버저닝 켜기

버킷 lab-vers 를 만들고 버저닝을 켠다. aws --profile local s3api get-bucket-versioning --bucket lab-vers 에 Enabled 가 보여야 한다.

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

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

s3://lab-vers/doc.txt 에 서로 다른 내용을 3번 올린다. aws --profile local s3api list-object-versions --bucket lab-vers --prefix doc.txt 의 Versions 가 3개여야 한다.

내용을 매번 다르게 해야 나중에 구별할 수 있습니다. 버전 목록을 조회해 보세요.

옛 버전 읽어 오기

가장 오래된 버전을 버전 ID 로 지정해 /root/vers/v1.txt 로 받는다. 내용이 첫 번째로 올린 것이어야 한다.

버전 식별자를 지정해 조회합니다. 첫 번째로 올린 내용이 나와야 합니다.

삭제 후 delete marker 확인하기

버전 지정 없이 doc.txt 를 지운다. 버전 목록에 DeleteMarkers 가 하나 생겨 전체 항목이 4개가 되어야 한다. /root/vers/marker.txt 에 versions=4 has_delete_marker=true 를 적는다.

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

delete marker 를 지워 복구하기

delete marker 를 버전 ID 로 지정해 지운다. aws --profile local s3 cp s3://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 에 수명주기 규칙을 담아 aws s3api put-bucket-lifecycle-configuration --bucket lab-vers --lifecycle-configuration file:///root/vers/lifecycle.json 으로 적용한다. 비현행 버전 30일 만료, 만료된 delete marker 정리, 미완료 멀티파트 7일 중단 — 세 가지 동작이 모두 들어가야 한다. aws s3api get-bucket-lifecycle-configuration --bucket lab-vers 출력을 /root/vers/ilm.txt 에 저장한다.

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