S3 버전 관리 작동 방식

S3 버전 관리 작동 방식 (How S3 Versioning works)

S3 버전 관리를 사용해 하나의 버킷에 객체의 여러 버전을 유지함으로써 실수로 삭제되거나 덮어써진 객체를 복원할 수 있어요. 예를 들어 버킷에 S3 버전 관리를 적용하면 다음과 같은 변화가 생겨요.

  • 객체를 삭제하면 객체를 영구 제거하는 대신 Amazon S3가 삭제 마커를 삽입하고, 그 마커가 현재 객체 버전이 돼요. 그런 다음 이전 버전을 복원할 수 있어요. 자세한 내용은 버전 관리 활성화 버킷에서 객체 버전 삭제를 참고하세요.
  • 객체를 덮어쓰면 Amazon S3가 버킷에 새 객체 버전을 추가해요. 이전 버전은 버킷에 남아 비현재 버전이 돼요. 이전 버전을 복원할 수 있어요.

참고 저장되고 전송되는 객체의 모든 버전에는 일반 Amazon S3 요금이 적용돼요. 객체의 각 버전은 전체 객체예요. 이전 버전과의 diff가 아니에요. 따라서 객체 버전을 3개 저장하면 객체 3개에 대한 요금이 부과돼요.

생성하는 모든 S3 버킷에는 연결된 versioning 하위 리소스가 있어요. (자세한 내용은 일반 용도 버킷 구성 옵션을 참고하세요.) 기본적으로 버킷은 비버전 관리 상태이며, versioning 하위 리소스는 다음과 같이 빈 버전 관리 구성을 저장해요.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</VersioningConfiguration>

버전 관리를 활성화하려면 Enabled 상태를 포함하는 버전 관리 구성으로 Amazon S3에 요청을 보낼 수 있어요.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>Enabled</Status>
</VersioningConfiguration>

버전 관리를 일시 중단하려면 상태 값을 Suspended로 설정해요.

참고 버킷에서 버전 관리를 처음 활성화하면 변경 사항이 완전히 전파되는 데 약간의 시간이 걸릴 수 있어요. 이 변경이 전파되는 동안에는 버전 관리 활성화 후 생성되거나 업데이트된 객체에 대한 요청에 간헐적인 HTTP 404 NoSuchKey 오류가 발생할 수 있어요. 버킷의 객체에 쓰기 작업(PUT 또는 DELETE)을 수행하기 전에 버전 관리 활성화 후 15분을 기다릴 것을 권장해요.

버킷 소유자와 모든 인증된 AWS Identity and Access Management(IAM) 사용자가 버전 관리를 활성화할 수 있어요. 버킷 소유자는 버킷을 만든 AWS 계정이에요. 권한에 대한 자세한 내용은 Amazon S3의 Identity and Access Management를 참고하세요. AWS Management Console, AWS Command Line Interface(AWS CLI) 또는 REST API를 사용해 S3 버전 관리를 활성화·비활성화하는 방법에 대한 자세한 내용은 버킷에서 버전 관리 활성화를 참고하세요.

주제

  • 버전 ID
  • 버전 관리 워크플로

본문

버전 ID

버킷에 버전 관리를 활성화하면 Amazon S3는 저장되는 객체에 고유한 버전 ID를 자동으로 생성해요. 예를 들어 한 버킷에 동일한 키(객체 이름)를 가진 두 객체(예: photo.gif(버전 111111), photo.gif(버전 121212))를 서로 다른 버전 ID로 보유할 수 있어요.

각 객체에는 S3 버전 관리 활성화 여부와 관계없이 버전 ID가 있어요. S3 버전 관리가 활성화되지 않으면 Amazon S3는 버전 ID 값을 null로 설정해요. S3 버전 관리를 활성화하면 Amazon S3는 객체에 버전 ID 값을 할당해요. 이 값은 해당 객체를 동일한 키의 다른 버전과 구별해요.

기존 버킷에서 S3 버전 관리를 활성화하면 버킷에 이미 저장된 객체는 변하지 않아요. 해당 객체의 버전 ID(null), 내용, 권한은 그대로 유지돼요. S3 버전 관리를 활성화한 후에는 버킷에 추가되는 각 객체가 버전 ID를 받아 동일한 키의 다른 버전과 구별돼요.

버전 ID는 Amazon S3만 생성하며 편집할 수 없어요. 버전 ID는 유니코드, UTF-8로 인코딩된 URL 준비가 된 불투명한 문자열이며 길이가 1,024바이트를 넘지 않아요. 다음은 예시예요.

3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

참고 간단히 하기 위해 이 주제의 다른 예시에서는 훨씬 짧은 ID를 사용해요.

버전 관리 워크플로

버전 관리 활성화 버킷에 객체를 PUT하면 비현재 버전은 덮어써지지 않아요. 다음 그림과 같이 같은 이름의 객체가 이미 있는 버킷에 새 버전의 photo.gif를 PUT하면 다음과 같은 동작이 발생해요.

  • 원본 객체(ID = 111111)는 버킷에 남아요.
  • Amazon S3가 새 버전 ID(121212)를 생성해 객체의 이 새 버전을 버킷에 추가해요.

이 기능을 사용하면 객체가 실수로 덮어써지거나 삭제된 경우 객체의 이전 버전을 검색할 수 있어요.

객체를 DELETE하면 모든 버전이 버킷에 남고 Amazon S3가 삭제 마커를 삽입해요(다음 그림 참조). 삭제 마커가 객체의 현재 버전이 돼요. 기본적으로 GET 요청은 가장 최근에 저장된 버전을 검색해요. 현재 버전이 삭제 마커일 때 GET Object 요청을 수행하면 404 Not Found 오류가 반환돼요(다음 그림 참조).

그러나 버전 ID를 지정해 객체의 비현재 버전을 GET할 수 있어요. 다음 그림에서 특정 객체 버전 111111을 GET해요. 그것이 현재 버전이 아니더라도 Amazon S3는 해당 객체 버전을 반환해요. 자세한 내용은 버전 관리 활성화 버킷에서 객체 버전 검색을 참고하세요.

삭제하려는 버전을 지정해 객체를 영구 삭제할 수 있어요. Amazon S3 버킷의 소유자 또는 인증된 IAM 사용자만 버전을 영구 삭제할 수 있어요. DELETE 작업이 versionId를 지정하면 해당 객체 버전이 영구 삭제되고 Amazon S3는 삭제 마커를 삽입하지 않아요.

버킷을 구성해 다단계 인증(MFA) 삭제를 활성화하면 보안을 더 추가할 수 있어요. 버킷에 MFA 삭제를 활성화하면 버킷 소유자는 버전을 삭제하거나 버킷의 버전 관리 상태를 변경하는 모든 요청에 두 가지 형태의 인증을 포함해야 해요. 자세한 내용은 MFA 삭제 구성을 참고하세요.

객체에 대한 새 버전은 언제 생성되나요?

객체의 새 버전은 새 객체를 PUT할 때만 생성돼요. CopyObject 같은 특정 작업은 PUT 작업을 구현해 수행된다는 점에 유의하세요.

현재 객체를 수정하는 일부 작업은 새 객체를 PUT하지 않으므로 새 버전을 만들지 않아요. 여기에는 객체의 태그 변경 같은 작업이 포함돼요.

중요 S3 버전 관리가 활성화된 버킷에 대한 Amazon S3 PUT 또는 DELETE 객체 요청에서 HTTP 503(Service Unavailable) 응답 수가 크게 증가하는 것을 발견하면, 버킷에 수백만 개의 버전이 있는 객체가 하나 이상 있을 수 있어요. 자세한 내용은 버전 관리 문제 해결의 S3 버전 관리 섹션을 참고하세요.

출처: 문서

더 알아보기