

# 객체 다운로드
<a name="download-objects"></a>

이 섹션에서는 Amazon S3 버킷에서 객체를 다운로드하는 방법을 설명합니다. Amazon S3를 사용하면 하나 이상의 버킷에 객체를 저장할 수 있으며, 각 객체의 크기는 최대 50TB까지 가능합니다. 아카이브되지 않은 모든 Amazon S3 객체는 실시간으로 액세스할 수 있습니다. 그러나 아카이브된 객체는 다운로드하기 전에 복원해야 합니다. 아카이브된 객체 다운로드에 대한 자세한 내용은 [아카이브된 객체 다운로드](#download-archived-objects)를 참조하십시오.

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 사용하여 단일 객체를 다운로드할 수 있습니다. 코드를 작성하거나 명령을 실행하지 않고 S3에서 최대 5TB의 객체를 다운로드하려면 S3 콘솔을 사용하세요. 자세한 내용은 [객체 다운로드](#download-an-object) 섹션을 참조하세요.

5TB보다 큰 객체를 다운로드하려면 `Range` HTTP 헤더와 함께 동시 `GetObject` 요청을 사용하여 특정 바이트 범위 또는 `partNumber`를 읽거나 객체의 특정 부분을 다운로드합니다. 단일 GET 요청은 5TB로 제한되며 5TB를 초과하는 GET 요청의 경우 `405 - Method Not Allowed` 오류가 발생합니다.

대용량 객체 다운로드의 경우 Java v1/v2, Python 또는 AWS CLI SDK에서 S3 Transfer Manager를 사용합니다. 최상의 성능을 얻으려면 리소스 사용률을 높이기 위해 최적화된 최신 AWS 공통 런타임(CRT)SDK와 함께 사용합니다. CRT는 처리량을 최적화하기 위해 개별 GET의 크기를 자동으로 조정합니다. Java SDK용 `maxNativeMemoryLimitInBytes`와 같은 메모리 제한 파라미터를 사용해 더 많은 메모리를 할당하여 전체 전송 처리량을 개선할 수 있습니다. 다운로드 요청에서 AWS CLI용 `multipart_chunksize` 및 Java SDK용 `minimumPartSizeInBytes` 같은 요청 파라미터를 사용해 명시적인 부분 크기를 설정하여 이 동작을 옵트아웃할 수 있습니다.

여러 개의 객체를 다운로드하려면 AWS CloudShell, AWS CLI 또는 AWS SDK를 사용하십시오. 자세한 내용은 [여러 객체 다운로드](#download-multiple-objects) 섹션을 참조하세요.

객체의 일부만 다운로드해야 하는 경우, AWS CLI 또는 REST API에서 추가 파라미터를 사용하여 다운로드할 바이트만 지정할 수 있습니다. 자세한 내용은 [객체의 일부 다운로드](#download-objects-parts) 섹션을 참조하세요.

소유하지 않은 객체를 다운로드해야 하는 경우, 객체 소유자에게 객체를 다운로드할 수 있는 미리 지정된 URL을 생성해 달라고 요청하십시오. 자세한 내용은 [다른 AWS 계정에서 객체 다운로드](#download-objects-from-another-account) 섹션을 참조하세요.

AWS 네트워크 외부에서 객체를 다운로드하는 경우 데이터 전송 수수료가 적용됩니다. 동일한 AWS 리전 내에서는 AWS 네트워크 내 데이터 전송은 무료이지만 모든 `GET` 요청에 대해서는 요금이 부과됩니다. 데이터 전송 비용 및 데이터 검색 요금에 대한 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하십시오.

**Topics**
+ [객체 다운로드](#download-an-object)
+ [여러 객체 다운로드](#download-multiple-objects)
+ [객체의 일부 다운로드](#download-objects-parts)
+ [다른 AWS 계정에서 객체 다운로드](#download-objects-from-another-account)
+ [아카이브된 객체 다운로드](#download-archived-objects)
+ [메타데이터를 기반으로 한 객체 다운로드](#download-objects-based-on-metadata)
+ [객체 다운로드 문제 해결](#download-objects-troubleshooting)

## 객체 다운로드
<a name="download-an-object"></a>

Amazon S3 콘솔, AWS CLI, AWS SDK 또는 REST API를 사용하여 객체를 다운로드할 수 있습니다.

### S3 콘솔 사용
<a name="download-objects-console"></a>

이 단원에서는 Amazon S3 콘솔을 사용하여 S3 버킷에서 단일 객체를 다운로드하는 방법을 설명합니다.

**참고**  
한 번에 하나의 객체만 다운로드할 수 있습니다.
Amazon S3 콘솔을 사용하여 키 이름이 마침표(`.`)로 끝나는 객체를 다운로드하는 경우, 다운로드한 객체의 키 이름에서 마침표가 제거됩니다. 다운로드한 객체 이름 끝에 마침표를 유지하려면 AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 사용해야 합니다.

**S3 버킷에서 객체 다운로드**

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

1. 왼쪽 탐색 창에서 **범용 버킷** 또는 **디렉터리 버킷**을 선택합니다.

1. 버킷 목록에서 객체를 다운로드할 버킷의 이름을 선택합니다.

    

1. 다음 방법 중 하나를 사용하여 S3 버킷에서 객체를 다운로드할 수 있습니다.
   + 객체 옆의 확인란을 선택하고 **다운로드**를 선택합니다. 특정 폴더에 객체를 다운로드하려면 **작업** 메뉴에서 **다른 이름으로 다운로드**를 선택합니다.
   + 특정 버전의 객체를 다운로드하려면 **버전 표시**(검색 상자 옆에 있음)를 켭니다. 원하는 객체 버전 옆의 확인란을 선택하고 **다운로드**를 선택합니다. 특정 폴더에 객체를 다운로드하려면 **작업** 메뉴에서 **다른 이름으로 다운로드**를 선택합니다.

### AWS CLI 사용
<a name="download-object-cli"></a>

다음 `get-object` 예제 명령은 AWS CLI를 사용하여 Amazon S3에서 객체를 다운로드하는 방법을 보여줍니다. 이 명령은 `amzn-s3-demo-bucket1` 버킷에서 객체 `folder/my_image`를 가져옵니다. 다운로드한 객체의 파일 이름인 `outfile`을 포함해야 합니다(예: `my_downloaded_image.jpg`).

```
aws s3api get-object --bucket amzn-s3-demo-bucket1 --key folder/my_image my_downloaded_image.jpg
```

자세한 내용과 예제는 **AWS CLI 명령 참조에서 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html)를 참조하세요.

### AWS SDK 사용
<a name="download-object-sdk"></a>

AWS SDK를 사용하여 객체를 다운로드하는 방법에 대한 예제는 **Amazon S3 API 참조의 [코드 예제](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_GetObject_section.html)를 참조하세요.

다양한 AWS SDK 사용에 대한 일반적인 정보는 **Amazon S3 API 참조의 [AWS SDK를 사용하여 Amazon S3에서 개발](https://docs.aws.amazon.com/AmazonS3/latest/API/sdk-general-information-section.html)을 참조하세요.

### REST API 사용
<a name="download-object-rest"></a>

REST API를 사용하여 Amazon S3에서 객체를 검색할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service API 참조*에서 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)를 참조하세요.

## 여러 객체 다운로드
<a name="download-multiple-objects"></a>

AWS CloudShell, AWS CLI 또는 AWS SDK를 사용하여 여러 객체를 다운로드할 수 있습니다.

### AWS CloudShell에서 AWS Management Console 사용
<a name="download-objects-cloudshell"></a>

AWS CloudShell은 브라우저 기반의 사전 인증된 쉘로, 에서 바로 시작할 수 있습니다.AWS Management Console

AWS CloudShell에 대한 자세한 내용은 **AWS CloudShell 사용 안내서에서 [CloudShell이란 무엇인가요?](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)를 참조하십시오.

**중요**  
AWS CloudShell을 사용하면 홈 디렉터리에는 AWS 리전당 최대 1GB의 저장 공간이 있습니다. 따라서 객체가 이 용량을 초과하면 동기화할 수 없습니다. 자세한 제한 사항은 **AWS CloudShell 사용 안내서에서 [서비스 할당량 및 제한 사항](https://docs.aws.amazon.com/cloudshell/latest/userguide/limits.html)을 참조하십시오.

**AWS CloudShell을 사용하여 객체를 다운로드하려면 다음을 수행하십시오.**

1. AWS Management Console에 로그인하고 CloudShell 콘솔([https://console.aws.amazon.com/cloudshell/](https://console.aws.amazon.com/cloudshell/))을 엽니다.

1. 다음 명령을 실행하여 버킷의 객체를 CloudShell에 동기화합니다. 다음 명령은 `amzn-s3-demo-bucket1`이라는 버킷의 객체를 동기화하고 CloudShell에 `temp`라는 폴더를 생성합니다. CloudShell은 이 폴더에 객체를 동기화합니다. 이 명령을 사용하려면 `user input placeholders`를 사용자의 정보로 대체합니다.

   ```
   aws s3 sync s3://amzn-s3-demo-bucket1 ./temp
   ```
**참고**  
`sync` 명령은 디렉터리 버킷과 호환되지 않습니다.  
특정 객체를 제외하거나 포함하기 위해 패턴 일치를 수행하려면 `sync` 명령과 함께 `--exclude "value"` 및 `--include "value"` 파라미터를 사용할 수 있습니다.

1. 다음 명령을 실행하여 `temp`라는 폴더에 있는 객체를 `temp.zip`이라는 파일로 압축합니다.

   ```
   zip temp.zip -r temp/
   ```

1. **작업**을 선택한 다음 **파일 다운로드**를 선택합니다.

1. 파일 이름 `temp.zip`을 입력한 다음 **다운로드**를 선택합니다.

1. (선택 사항) CloudShell에서 `temp.zip` 파일과 `temp` 폴더에 동기화된 객체를 삭제합니다. AWS CloudShell을 사용하면 각 AWS 리전에 대해 최대 1GB의 영구 스토리지가 제공됩니다.

   다음 예제 명령을 사용하여 `.zip` 파일과 폴더를 삭제할 수 있습니다. 이 예 명령을 사용하려면 `user input placeholders`를 실제 정보로 대체하세요.

   ```
   rm temp.zip && rm -rf temp/
   ```

### AWS CLI 사용
<a name="download-objects-cli"></a>

다음 예제는 AWS CLI를 사용하여 지정된 디렉토리 또는 접두사 아래에 있는 모든 파일 또는 객체를 다운로드하는 방법을 보여줍니다. 이 명령은 `amzn-s3-demo-bucket1` 버킷의 모든 객체를 현재 디렉터리로 복사합니다. 이 예제 명령을 사용하려면 `amzn-s3-demo-bucket1` 대신 버킷 이름을 사용하십시오.

```
aws s3 cp s3://amzn-s3-demo-bucket1 . --recursive
```

다음 명령은 `amzn-s3-demo-bucket1` 버킷의 접두사 `logs`에 해당하는 모든 객체를 현재 디렉터리로 다운로드합니다. 또한 `--exclude` 및 `--include` 파라미터를 사용하여 접미사가 `.log`인 객체만 복사합니다. 이 예시 명령을 사용하려면 `user input placeholders`를 실제 정보로 대체하십시오.

```
aws s3 cp s3://amzn-s3-demo-bucket1/logs/ . --recursive --exclude "*" --include "*.log"
```

자세한 내용과 예제는 **AWS CLI 명령 참조에서 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/cp.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/cp.html)를 참조하세요.

### AWS SDK 사용
<a name="download-objects-sdks"></a>

AWS SDK를 사용하여 Amazon S3 버킷의 모든 객체를 다운로드하는 방법에 대한 예제는 **Amazon S3 API 참조의 [코드 예제](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_DownloadBucketToDirectory_section.html)를 참조하세요.

다양한 AWS SDK 사용에 대한 일반적인 정보는 **Amazon S3 API 참조의 [AWS SDK를 사용하여 Amazon S3에서 개발](https://docs.aws.amazon.com/AmazonS3/latest/API/sdk-general-information-section.html)을 참조하세요.

## 객체의 일부 다운로드
<a name="download-objects-parts"></a>

AWS CLI 또는 REST API를 사용하여 객체의 일부를 다운로드할 수 있습니다. 이렇게 하려면 추가 파라미터를 사용하여 다운로드할 객체의 일부를 지정합니다.

### AWS CLI 사용
<a name="download-objects-part-cli"></a>

다음 예제 명령은 `amzn-s3-demo-bucket1`이라는 버킷에 있는 `folder/my_data`라는 객체의 바이트 범위에 대한 `GET` 요청을 수행합니다. 요청에서 바이트 범위 앞에 `bytes=`를 붙여야 합니다. 부분 객체는 `my_data_range`라는 출력 파일로 다운로드됩니다. 이 예시 명령을 사용하려면 `user input placeholders`를 실제 정보로 대체하십시오.

```
aws s3api get-object --bucket amzn-s3-demo-bucket1 --key folder/my_data --range bytes=0-500 my_data_range
```

자세한 내용과 예제는 **AWS CLI 명령 참조에서 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html)를 참조하십시오.

HTTP `Range` 헤더에 대한 자세한 내용은 RFC 편집기 웹 사이트에서 [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-range)을 참조하십시오.

**참고**  
Amazon S3는 단일 `GET` 요청에서 여러 범위의 데이터 검색을 지원하지 않습니다.

### REST API 사용
<a name="download-objects-part-rest"></a>

REST API의 `partNumber` 및 `Range` 파라미터를 사용하여 Amazon S3에서 객체 파트를 검색할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service API 참조*에서 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)를 참조하세요.

## 다른 AWS 계정에서 객체 다운로드
<a name="download-objects-from-another-account"></a>

미리 지정된 URL을 사용하여 버킷 정책을 업데이트하지 않고도 다른 사람에게 객체에 대한 시간 제한 액세스를 허용할 수 있습니다.

미리 지정된 URL은 브라우저에 입력하거나 프로그램에서 객체를 다운로드하는 데 사용할 수 있습니다. URL에 사용되는 자격 증명은 URL을 생성한 AWS 사용자의 자격 증명입니다. URL이 생성된 후에는 URL이 만료될 때까지 미리 지정된 URL을 가진 사람은 누구나 해당 객체를 다운로드할 수 있습니다.

### S3 콘솔에서 미리 지정된 URL 사용
<a name="download-objects-presigned"></a>

다음 단계에 따라 Amazon S3 콘솔을 사용하여 범용 버킷에서 객체를 공유하기 위해 미리 서명된 URL을 생성할 수 있습니다. 콘솔을 사용할 때 미리 지정된 URL의 최대 만료 시간은 생성 시점으로부터 12시간입니다.

**Amazon S3 콘솔을 사용하여 미리 서명된 URL을 생성하려면**

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

1. 왼쪽 탐색 창에서 **범용 버킷**을 선택합니다.

1. 버킷 목록에서 미리 서명된 URL을 사용할 객체가 있는 버킷 이름을 선택합니다.

1. **객체(Objects)** 목록에서 미리 서명된 URL을 생성할 객체를 선택합니다.

1. **객체 작업** 메뉴에서 **미리 서명된 URL 공유**를 선택합니다.

1. 미리 서명된 URL의 유효 기간을 지정합니다.

1. **미리 서명된 URL 생성**을 선택합니다.

1. 확인 메시지가 나타나면 URL이 클립보드에 자동으로 복사됩니다. 미리 서명된 URL을 다시 복사해야 하는 경우 미리 서명된 URL을 복사하는 버튼이 표시됩니다.

1. 다시 복사해야 하는 경우 미리 지정한 URL을 복사하는 버튼이 표시됩니다.

미리 지정된 URL 및 기타 생성 방법에 대한 자세한 내용은 [미리 서명된 URL을 통해 객체 다운로드 및 업로드](using-presigned-url.md)을 참조하십시오.

## 아카이브된 객체 다운로드
<a name="download-archived-objects"></a>

자주 액세스하지 않는 객체의 스토리지 비용을 줄이려면 해당 객체를 *아카이브*합니다. 객체를 아카이브하면 저비용 스토리지로 이동되므로 실시간으로 액세스할 수 없습니다. 아카이브된 객체를 다운로드하려면 먼저 복원해야 합니다.

스토리지 클래스에 따라 몇 분 또는 몇 시간 내에 아카이브된 객체를 복원할 수 있습니다. Amazon S3 콘솔, S3 배치 작업, Amazon S3 REST API, AWS SDK 및 AWS Command Line Interface(AWS CLI)를 사용하여 아카이브된 객체를 복원할 수 있습니다.

지침은 [아카이브된 객체 복원](restoring-objects.md) 섹션을 참조하세요. 아카이브된 객체를 복원하고 나면 다운로드할 수 있습니다.

## 메타데이터를 기반으로 한 객체 다운로드
<a name="download-objects-based-on-metadata"></a>

조건부 읽기 요청을 사용하여 메타데이터를 기반으로 객체를 다운로드하기 위한 사전 조건을 추가할 수 있습니다. 엔터티 태그(ETag) 또는 마지막 수정 날짜를 기준으로 객체를 반환할 수 있습니다. 이렇게 하면 S3 작업을 지정된 날짜 이후에 업데이트된 객체로 제한하거나 특정 객체 버전만 반환할 수 있습니다.

[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) 또는 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) 요청에 대해 조건부 쓰기를 사용할 수 있습니다.

조건부 요청에 대한 자세한 내용은 [조건부 요청을 통해 S3 작업에 사전 조건 추가](conditional-requests.md) 섹션을 참조하세요.

## 객체 다운로드 문제 해결
<a name="download-objects-troubleshooting"></a>

권한이 충분하지 않거나 버킷 또는 AWS Identity and Access Management(IAM) 사용자 정책이 잘못되면 Amazon S3에서 객체를 다운로드하려고 할 때 오류가 발생할 수 있습니다. 이러한 문제로 인해 Amazon S3에서 리소스에 대한 액세스를 허용할 수 없는 액세스 거부(403 금지됨) 오류가 자주 발생할 수 있습니다.

액세스 거부(403 금지됨) 오류의 일반적인 원인에 대해서는 [Amazon S3의 액세스 거부(403 Forbidden) 오류 문제 해결](troubleshoot-403-errors.md)을 참조하십시오.

객체에 액세스하려고 할 때 404 NoSuchKey 오류가 발생하는 경우 AWS re:Post 지식 센터의 [Amazon S3의 404 NoSuchKey 오류를 해결하려면 어떻게 해야 합니까?](https://repost.aws/knowledge-center/404-error-nosuchkey-s3)를 참조하세요.