

# S3 버전 관리 작동 방식
<a name="versioning-workflows"></a>

S3 버전 관리를 사용하여 한 버킷에 여러 버전의 객체를 보관함으로써 실수로 삭제되거나 덮어써진 객체를 복원할 수 있습니다. 예를 들어, 버킷에 S3 버전 관리를 적용하는 경우 다음과 같은 변경 사항이 발생합니다.
+ 객체를 영구적으로 제거하는 대신 삭제하는 경우, Amazon S3에서는 삭제 마커를 삽입하며 이는 현재 객체 버전이 됩니다. 따라서 나중에 이전 버전을 복원할 수 있습니다. 자세한 내용은 [버전 관리가 사용 설정된 버킷에서 객체 버전 삭제](DeletingObjectVersions.md) 섹션을 참조하세요.
+ 객체를 덮어쓴 경우 Amazon S3가 버킷에 새 객체 버전을 추가합니다. 이전 버전은 버킷에 남아 있고 현재 버전이 아닌 버전이 됩니다. 이전 버전을 복원할 수 있습니다.

**참고**  
저장되거나 전송된 객체의 모든 버전에는 일반 Amazon S3 요금이 적용됩니다. 각 객체 버전은 이전 버전과의 차이점만 포함된 것이 아닌 완전한 객체입니다. 따라서 세 가지 버전의 객체가 저장된 경우 객체 세 개에 대한 요금이 부과됩니다.

생성한 각 S3 버킷에는 *버전 관리* 하위 리소스가 연결되어 있습니다. (자세한 내용은 [범용 버킷 구성 옵션](UsingBucket.md#bucket-config-options-intro) 섹션을 참조하세요.) 기본적으로 버킷은 *버전 관리 미사용* 상태이며, 버전 관리 하위 리소스는 다음과 같이 빈 버전 관리 구성을 저장합니다.

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

버전 관리를 활성화하려면 Amazon S3에 `Enabled` 상태가 포함된 버전 관리 구성을 사용하여 요청을 보내면 됩니다.

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

버전 관리를 일시 중지하려면 상태 값을 `Suspended`로 설정합니다.

**참고**  
버킷에서 버전 관리를 처음으로 활성화할 때 변경 사항이 완전히 전파되는 데 시간이 조금 걸릴 수 있습니다. 이 변경 사항이 전파되는 동안 버전 관리를 활성화한 후 생성되거나 업데이트된 객체에 대한 요청에 간헐적인 `HTTP 404 NoSuchKey` 오류가 발생할 수 있습니다. 버전 관리를 활성화하고 나서 15분 정도 기다린 후, 버킷의 객체에 대해 쓰기 작업(`PUT` 또는 `DELETE`)을 실행하는 것이 좋습니다.

버킷 소유자 및 모든 승인된 AWS Identity and Access Management(IAM) 사용자는 버전 관리를 활성화할 수 있습니다. 버킷 소유자는 버킷을 생성한 AWS 계정입니다. 권한에 대한 자세한 내용은 [Amazon S3의 ID 및 액세스 관리](security-iam.md) 섹션을 참조하세요.

AWS Management Console, AWS Command Line Interface(AWS CLI) 또는 REST API를 사용하여 S3 버전 관리를 사용하고 사용 중지하는 방법에 대한 자세한 내용은 [버킷에 버전 관리 사용 설정](manage-versioning-examples.md) 섹션을 참조하세요.

**Topics**
+ [버전 ID](#version-ids)
+ [버전 관리 워크플로](#versioning-workflows-examples)

## 버전 ID
<a name="version-ids"></a>

버킷에 대한 버전 관리를 사용 설정하면 Amazon S3는 저장되는 객체에 대해 고유한 버전 ID를 자동으로 생성합니다. 예를 들어, `photo.gif`(버전 111111) 및 `photo.gif`(버전 121212)와 같이 하나의 버킷에서 키(객체 이름)는 동일하지만 버전 ID가 다른 두 개의 객체를 보유할 수 있습니다.

![\[버전 관리가 활성화되어 있으며 키는 같지만 버전 ID가 다른 객체 두 개가 있는 버킷을 보여 주는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_Enabled.png)


각 객체에는 S3 버전 관리가 사용되는지 여부에 관계없이 버전 ID가 있습니다. S3 버전 관리를 활성화하지 않으면 Amazon S3가 버전 ID의 값을 `null`로 설정합니다. S3 버전 관리를 사용 설정한 경우 Amazon S3는 객체에 대한 버전 ID 값을 할당합니다. 이 값은 해당 객체를 동일한 키의 다른 버전과 구별해 줍니다.

기존 버킷에 S3 버전 관리를 사용 설정하는 경우 버킷에 이미 저장된 객체는 변경되지 않습니다. 버전 ID(`null`), 콘텐츠, 그리고 권한은 동일하게 유지됩니다. 버전 관리를 활성화하면 버킷에 추가된 각 객체가 동일한 키의 다른 버전과 구별되는 버전 ID를 가져옵니다.

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

`3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo`

**참고**  
간단한 설명을 위해 이 주제의 다른 예제에서는 훨씬 더 짧은 ID를 사용합니다.



## 버전 관리 워크플로
<a name="versioning-workflows-examples"></a>

버전 관리를 사용하는 버킷에 객체를 `PUT`할 때 비 최신 버전은 덮어쓰지 않습니다. 다음 그림과 같이 동일한 이름의 객체를 이미 보유하고 있는 버킷에 새 버전의 `photo.gif`를 `PUT`할 때 다음과 같은 동작이 발생합니다.
+ 원래 객체(ID = 111111)는 버킷에 남아 있습니다.
+ Amazon S3는 새 버전 ID(121212)를 생성하고 이 최신 버전의 객체를 버킷에 추가합니다.

![\[버전 관리가 활성화된 버킷에 객체를 PUT할 때 S3 버전 관리가 작동하는 방법을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled3.png)


이 기능을 사용하면 객체를 실수로 덮어쓰거나 삭제한 경우 객체의 이전 버전을 검색할 수 있습니다.

객체를 `DELETE`하면 다음 그림과 같이 버킷에 모든 버전이 계속 유지되며 Amazon S3는 삭제 마커를 삽입합니다.

![\[삭제 마커 삽입을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)


삭제 마커가 객체의 최신 버전이 됩니다. 기본적으로 `GET` 요청은 가장 최근에 저장된 버전을 검색합니다. 최신 버전이 삭제 마커일 때 `GET Object` 요청을 수행하면 다음 그림과 같이 `404 Not Found` 오류가 반환됩니다.

![\[404(찾을 수 없음) 오류를 반환하는 삭제 마커에 대한 GetObject 직접 호출을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


하지만 버전 ID를 지정하여 최신 버전이 아닌 객체에 대해 `GET`을 실행할 수 있습니다. 다음 그림에서는 특정 객체 버전인 111111을 `GET`합니다. Amazon S3는 최신 버전이 아닌 해당 버전의 객체를 반환합니다.

자세한 내용은 [버전 관리가 사용 설정된 버킷에서 객체 버전 검색](RetrievingObjectVersions.md) 섹션을 참조하세요.

![\[버전 관리가 활성화된 버킷에 현재 버전이 아닌 객체를 GET할 때 S3 버전 관리가 작동하는 방법을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_GET_Versioned3.png)


삭제하고자 하는 버전을 지정하여 객체를 영구적으로 삭제할 수 있습니다. Amazon S3 버킷 소유자 또는 권한이 부여된 IAM 사용자만이 영구적으로 버전을 삭제할 수 있습니다. `DELETE` 작업이 `versionId`를 지정하는 경우 해당 객체 버전은 영구 삭제되며 Amazon S3가 삭제 마커를 삽입하지 않습니다.

![\[DELETE versionId가 특정 객체 버전을 영구적으로 삭제하는 방법을 보여 주는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


다중 인증(MFA) 삭제를 활성화하도록 버킷을 구성하여 보안을 강화할 수 있습니다. 버킷에 MFA 삭제를 활성화하는 경우 버킷 소유자는 버전을 삭제하거나 버킷의 버전 관리 상태를 변경하는 모든 요청에 두 가지 형식의 인증을 포함해야 합니다. 자세한 내용은 [MFA Delete 구성](MultiFactorAuthenticationDelete.md) 섹션을 참조하세요.

### 객체의 새 버전은 언제 생성됩니까?
<a name="versioning-workflows-new-versions"></a>

객체의 새 버전은 새 객체에 `PUT` 작업을 수행할 때만 생성됩니다. `CopyObject`와 같은 특정 작업은 `PUT` 작업을 구현하여 작동한다는 점에 유의하세요.

현재 객체를 수정하는 일부 작업에서는 새 객체에 `PUT` 작업을 수행하지 않으므로 새 버전이 생성되지 않습니다. 여기에는 객체의 태그 변경과 같은 작업이 포함됩니다.

**중요**  
S3 버전 관리를 사용하는 버킷에 대한 Amazon S3 객체 `PUT` 또는 `DELETE` 요청에서 받은 HTTP 503(서비스 사용 불가) 응답의 횟수가 크게 증가한다면 버전이 무수히 많은 객체가 하나 이상 버킷에 있을 것으로 추정됩니다. 자세한 내용은 [버전 관리 문제 해결](troubleshooting-versioning.md)의 S3 버전 관리 섹션을 참조하세요.