

# 버전 관리가 사용 설정된 버킷에서 객체 버전 검색
<a name="RetrievingObjectVersions"></a>

Amazon S3에서의 버전 관리는 객체의 여러 변형을 동일한 버킷에 보관하는 방법입니다. 단순한 `GET` 요청은 현재 버전의 객체를 가져옵니다. 다음 그림은 `GET` 요청에서 현재 버전의 객체인 `photo.gif`를 반환하는 과정을 보여 줍니다.

![\[GET이 현재 버전의 객체를 반환하는 방법을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


특정 버전을 가져오려면 해당 버전 ID를 지정해야 합니다. 다음 그림은 `GET versionId` 요청에서 특정 버전의 객체(현재 버전이 아니어도 됨)를 가져오는 과정을 보여 줍니다.

![\[GET versionId 요청이 지정된 객체의 버전을 검색하는 방법을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


콘솔, AWS SDK 또는 REST API를 사용하여 Amazon S3의 객체 버전을 검색할 수 있습니다.

**참고**  
 300개 버전 이전의 객체 버전에 액세스하려면 AWS CLI 또는 객체의 URL을 사용해야 합니다.

## S3 콘솔 사용
<a name="retrieving-object-versions"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. **버킷** 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

1. **객체** 목록에서 객체의 이름을 선택합니다.

1. **버전**을 선택합니다.

   Amazon S3가 객체의 모든 버전을 표시합니다.

1. 검색할 버전의 [**버전 ID(Version ID)**] 옆에 있는 확인란을 선택합니다.

1. [**작업(Actions)**]을 선택하고 [**다운로드(Download)**]를 선택한 다음 객체를 저장합니다.

또한 객체 개요 패널에서 객체 버전의 보기, 다운로드 및 삭제도 가능합니다. 자세한 내용은 [Amazon S3 콘솔에서 객체 속성 보기](view-object-properties.md) 섹션을 참조하세요.

**중요**  
객체는 최신 버전으로 삭제한 경우에만 삭제를 취소할 수 있습니다. 삭제했던 객체의 이전 버전은 삭제를 취소할 수 없습니다. 자세한 내용은 [S3 버전 관리로 여러 버전의 객체 유지](Versioning.md) 섹션을 참조하세요.

## AWS SDK 사용
<a name="retrieve-obj-version-sdks"></a>

버전 관리가 사용되지 않는 버킷과 버전 관리가 사용 설정된 버킷의 객체를 업로드하는 예는 동일합니다. 그러나 버전 관리가 사용 설정된 버킷의 경우 Amazon S3는 버전 번호를 할당합니다. 그렇지 않은 경우 버전 번호는 null이 됩니다.

AWS SDK for Java/.NET/PHP를 사용하여 객체를 다운로드하는 예제는 [객체 다운로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)를 참조하세요.

.NET 및 Rust용 AWS SDK를 사용하여 객체 버전을 나열하는 예시는 [Amazon S3 버킷의 객체 버전 나열](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html)을 참조하세요.

## REST API 사용
<a name="retrieve-obj-version-rest"></a>

**특정 객체 버전 가져오기**

1. `versionId`를 검색하려는 객체의 버전 ID로 설정합니다.

1. `GET Object versionId` 요청을 보냅니다.

**Example - 버전이 지정된 객체 검색**  
다음 요청은 `L4kqtJlcpXroDTDmpUMLUo`의 `my-image.jpg` 버전을 검색합니다.  

```
1. GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

콘텐츠가 아니라 객체의 메타데이터만 검색할 수 있습니다. 자세한 정보는 [객체 버전의 메타데이터 가져오기](RetMetaOfObjVersion.md) 섹션을 참조하세요.

이전 객체 버전 복원에 대한 자세한 내용은 [이전 버전 복원](RestoringPreviousVersions.md) 섹션을 참조하세요.

# 객체 버전의 메타데이터 가져오기
<a name="RetMetaOfObjVersion"></a>

객체의 메타데이터만 가져오고 해당 콘텐츠는 가져오지 않으려는 경우 `HEAD` 작업을 사용합니다. 기본적으로 가장 최근 버전의 메타데이터를 가져옵니다. 특정 객체 버전의 메타데이터를 가져오려면 해당 버전 ID를 지정해야 합니다.

**객체 버전의 메타데이터 가져오기**

1. 메타데이터를 가져오려는 객체의 버전 ID에 `versionId`를 설정합니다.

1. `HEAD Object versionId` 요청을 보냅니다.

**Example - 버전이 지정된 객체의 메타데이터 검색**  
다음 요청은 `my-image.jpg`의 `3HL4kqCxf3vjVBH40Nrjfkd` 버전 메타데이터를 가져옵니다.  

```
1. HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

다음은 샘플 응답을 보여 줍니다.

```
 1. HTTP/1.1 200 OK
 2. x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
 3. x-amz-request-id: 318BC8BC143432E5
 4. x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
 5. Date: Wed, 28 Oct 2009 22:32:00 GMT
 6. Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
 7. ETag: "fba9dede5f27731c9771645a39863328"
 8. Content-Length: 434234
 9. Content-Type: text/plain
10. Connection: close
11. Server: AmazonS3
```

# 이전 버전 복원
<a name="RestoringPreviousVersions"></a>

버전 관리를 사용하여 객체의 이전 버전을 검색할 수 있습니다. 이를 수행하기 위한 접근 방식으로 다음 두 가지가 있습니다.
+ 이전 버전의 객체를 동일한 버킷으로 복사합니다.

  복사된 객체는 해당 객체의 현재 버전이 되고 모든 객체 버전은 유지됩니다.
+ 객체의 현재 버전 영구 삭제

  현재 객체 버전을 삭제하는 것은 실제로 해당 객체의 이전 버전을 현재 버전으로 만드는 것과 같습니다.

전체 객체 버전이 유지되므로 특정 버전의 객체를 동일 버킷에 복사하여 현재 버전보다 이전의 버전을 만들 수 있습니다. 다음 그림에서 원본 객체(ID = 111111)는 동일한 버킷에 복사됩니다. Amazon S3에서는 새 ID(88778877)를 제공하며 이것이 객체의 현재 버전이 됩니다. 따라서 버킷에는 원래 객체 버전(111111)과 그 사본(88778877)이 모두 들어 있습니다. 이전 버전을 가져온 후 업로드하여 최신 버전으로 만드는 방법에 대한 자세한 내용은 [versioning-enabled 버킷에서 객체 버전 검색](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html) 및 [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하세요.

![\[객체의 특정 버전을 동일한 버킷에 복사하여 최신 버전으로 만드는 것을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_COPY2.png)


후속 `GET`에서는 88778877을 검색합니다.

다음 그림은 현재 객체로 이전 버전(111111)을 남겨 둔 채로 객체의 현재 버전(121212)을 삭제하는 과정을 보여줍니다. 객체 삭제에 대한 자세한 내용은 [단일 객체 삭제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html)를 참조하세요.

![\[객체의 현재 버전을 삭제하면 이전 버전이 현재 객체가 된다는 것을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


후속 `GET`에서는 111111을 검색합니다.

**참고**  
객체 버전을 일괄적으로 복원하려면 [`CopyObject` 작업](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html)을 사용할 수 있습니다. `CopyObject` 작업은 매니페스트에 지정된 각 객체를 복사합니다. 그러나 객체가 매니페스트에 나타나는 것과 반드시 동일한 순서로 복사되는 것은 아니라는 점을 유의하세요. 버전이 지정된 버킷에서 최신/이전 버전 순서를 유지하는 것이 중요한 경우 모든 이전 버전을 먼저 복사해야 합니다. 그런 다음 첫 번째 작업이 완료된 후 후속 작업에서 현재 버전을 복사합니다.

## 이전 객체 버전 복원
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

삭제된 객체 복원에 대한 자세한 지침은 AWS re:Post 지식 센터의 [버전 관리가 활성화된 버킷에서 삭제된 Amazon S3 객체를 검색하려면 어떻게 해야 하나요?](https://repost.aws/knowledge-center/s3-undelete-configuration)를 참조하세요.

### S3 콘솔 사용
<a name="retrieving-object-versions"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. **버킷** 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

1. **객체** 목록에서 객체의 이름을 선택합니다.

1. **버전**을 선택합니다.

   Amazon S3가 객체의 모든 버전을 표시합니다.

1. 검색할 버전의 [**버전 ID(Version ID)**] 옆에 있는 확인란을 선택합니다.

1. [**작업(Actions)**]을 선택하고 [**다운로드(Download)**]를 선택한 다음 객체를 저장합니다.

또한 객체 개요 패널에서 객체 버전의 보기, 다운로드 및 삭제도 가능합니다. 자세한 내용은 [Amazon S3 콘솔에서 객체 속성 보기](view-object-properties.md) 섹션을 참조하세요.

**중요**  
객체는 최신 버전으로 삭제한 경우에만 삭제를 취소할 수 있습니다. 삭제했던 객체의 이전 버전은 삭제를 취소할 수 없습니다. 자세한 내용은 [S3 버전 관리로 여러 버전의 객체 유지](Versioning.md) 섹션을 참조하세요.

### AWS SDK 사용
<a name="restoring-obj-version-version-enabled-bucket-sdks"></a>

다른 AWS SDK 사용에 대한 자세한 내용은 [AWS 개발자 센터](https://aws.amazon.com/code/)를 참조하세요.

------
#### [ Python ]

다음 Python 코드 예제에서는 지정된 롤백 버전 이후에 발생한 모든 버전을 삭제하여 버전이 지정된 객체의 이전 버전을 복원합니다.

```
def rollback_object(bucket, object_key, version_id):
    """
    Rolls back an object to an earlier version by deleting all versions that
    occurred after the specified rollback version.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that holds the object to roll back.
    :param object_key: The object to roll back.
    :param version_id: The version ID to roll back to.
    """
    # Versions must be sorted by last_modified date because delete markers are
    # at the end of the list even when they are interspersed in time.
    versions = sorted(
        bucket.object_versions.filter(Prefix=object_key),
        key=attrgetter("last_modified"),
        reverse=True,
    )

    logger.debug(
        "Got versions:\n%s",
        "\n".join(
            [
                f"\t{version.version_id}, last modified {version.last_modified}"
                for version in versions
            ]
        ),
    )

    if version_id in [ver.version_id for ver in versions]:
        print(f"Rolling back to version {version_id}")
        for version in versions:
            if version.version_id != version_id:
                version.delete()
                print(f"Deleted version {version.version_id}")
            else:
                break

        print(f"Active version is now {bucket.Object(object_key).version_id}")
    else:
        raise KeyError(
            f"{version_id} was not found in the list of versions for " f"{object_key}."
        )
```

------