객체 다운로드하기

객체 다운로드하기

이 섹션은 Amazon S3 버킷에서 객체를 다운로드하는 방법을 설명해요. Amazon S3에서는 객체를 하나 이상의 버킷에 저장할 수 있고, 각 객체 하나는 최대 50TB까지 될 수 있어요. 아카이브되지 않은 S3 객체는 실시간으로 액세스할 수 있어요. 하지만 아카이브된 객체는 다운로드하기 전에 먼저 복원해야 해요. 아카이브 객체 다운로드에 대한 내용은 "아카이브 객체 다운로드"를 참고하세요.

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK, 또는 Amazon S3 REST API로 단일 객체를 다운로드할 수 있어요. 코드를 작성하거나 명령을 실행하지 않고 S3에서 최대 5TB 객체를 다운로드하려면 S3 콘솔을 사용하세요. 자세한 내용은 "객체 다운로드"를 참고하세요.

5TB보다 큰 객체를 다운로드하려면 Range HTTP 헤더로 특정 바이트 범위를 읽는 동시 GetObject 요청이나, 객체의 특정 부분을 다운로드하는 partNumber를 사용하세요. 단일 GET 요청은 5TB로 제한되고, 5TB를 초과하는 GET 요청은 405 - Method Not Allowed 오류를 받아요.

대용량 객체 다운로드에는 Java v1/v2, Python, 또는 AWS CLI SDK의 S3 Transfer Manager를 사용하세요. 최상의 성능을 위해 이 SDK들과 함께 최신 AWS Common Runtime(CRT)을 사용하세요. CRT는 더 나은 리소스 활용을 위해 최적화되어 있어요. CRT는 개별 GET의 크기를 자동으로 조정해 처리량을 최적화해요. Java SDK의 maxNativeMemoryLimitInBytes 같은 메모리 제한 매개변수로 더 많은 메모리를 할당하면 전체 전송 처리량을 개선할 수 있어요. AWS CLI의 multipart_chunksize, Java SDK의 minimumPartSizeInBytes 같은 요청 매개변수로 명시적 파트 크기를 설정하면 이 동작을 선택 해제할 수 있어요.

여러 객체를 다운로드하려면 AWS CloudShell, AWS CLI, 또는 AWS SDK를 사용하세요. 자세한 내용은 "여러 객체 다운로드"를 참고하세요.

객체의 일부만 다운로드해야 한다면 AWS CLI나 REST API에서 추가 매개변수를 사용해 다운로드하려는 바이트만 지정할 수 있어요. 자세한 내용은 "객체 일부 다운로드"를 참고하세요.

소유하지 않은 객체를 다운로드해야 한다면 객체 소유자에게 해당 객체를 다운로드할 수 있는 사전 서명 URL을 생성해 달라고 요청하세요. 자세한 내용은 "다른 AWS 계정에서 객체 다운로드"를 참고하세요.

AWS 네트워크 외부에서 객체를 다운로드하면 데이터 전송 요금이 적용돼요. AWS 네트워크 내에서 같은 AWS 리전 안의 데이터 전송은 무료이지만, 모든 GET 요청에는 요금이 부과돼요. 데이터 전송 비용과 데이터 검색 요금에 대한 자세한 내용은 Amazon S3 요금을 참고하세요.

출처: 문서

본문

객체 다운로드

Amazon S3 콘솔, AWS CLI, AWS SDK, 또는 REST API로 객체를 다운로드할 수 있어요.

이 섹션은 S3 콘솔을 사용해 S3 버킷에서 객체를 다운로드하는 방법을 설명해요.

참고

  • 한 번에 객체 하나만 다운로드할 수 있어요.
  • S3 콘솔로 키 이름 끝에 마침표(.)가 있는 객체를 다운로드하면 다운로드된 객체의 키 이름에서 마침표가 제거돼요. 다운로드된 객체 이름 끝의 마침표를 유지하려면 AWS Command Line Interface(AWS CLI), AWS SDK, 또는 Amazon S3 REST API를 사용해야 해요.

S3 버킷에서 객체를 다운로드하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 General purpose buckets 또는 Directory buckets를 선택합니다.
  3. 버킷 목록에서 객체를 다운로드할 버킷의 이름을 선택합니다.
  4. S3 버킷에서 객체를 다음 방법 중 하나로 다운로드할 수 있습니다.
    • 객체 옆의 확인란을 선택하고 Download를 선택합니다. 객체를 특정 폴더로 다운로드하려면 Actions 메뉴에서 Download as를 선택합니다.
    • 객체의 특정 버전을 다운로드하려면 Show versions(검색 상자 옆에 있음)를 켭니다. 원하는 객체 버전 옆의 확인란을 선택하고 Download를 선택합니다. 객체를 특정 폴더로 다운로드하려면 Actions 메뉴에서 Download as를 선택합니다.

다음 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 Command Reference_의 get-object를 참고하세요.

AWS SDK로 객체를 다운로드하는 예시는 _Amazon S3 API Reference_의 Code examples를 참고하세요.

다양한 AWS SDK 사용에 대한 일반 정보는 _Amazon S3 API Reference_의 AWS SDK를 사용한 Amazon S3 개발을 참고하세요.

REST API로 Amazon S3에서 객체를 가져올 수 있어요. 자세한 내용은 _Amazon Simple Storage Service API Reference_의 GetObject를 참고하세요.

여러 객체 다운로드

AWS CloudShell, AWS CLI, 또는 AWS SDK로 여러 객체를 다운로드할 수 있어요.

AWS CloudShell은 AWS Management Console에서 바로 실행할 수 있는 브라우저 기반의 사전 인증 셸이에요.

AWS CloudShell에 대한 자세한 내용은 _AWS CloudShell User Guide_의 What is CloudShell?을 참고하세요.

중요

AWS CloudShell의 홈 디렉터리에는 AWS 리전당 최대 1GB 스토리지가 있어요. 따라서 이 양을 초과하는 총 용량의 객체가 있는 버킷은 동기화할 수 없어요. 더 많은 제한 사항은 _AWS CloudShell User Guide_의 서비스 할당량과 제한을 참고하세요.

AWS CloudShell로 객체를 다운로드하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/cloudshell/에서 CloudShell 콘솔을 엽니다.
  2. 다음 명령을 실행해 버킷의 객체를 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. Actions를 선택한 다음 Download file을 선택합니다.
  2. 파일 이름 temp.zip을 입력하고 Download를 선택합니다.
  3. (선택) CloudShell의 temp 폴더에 동기화된 객체와 temp.zip 파일을 삭제합니다. AWS CloudShell에는 각 AWS 리전에 대해 최대 1GB의 영구 스토리지가 있어요.

다음 예시 명령으로 .zip 파일과 폴더를 삭제할 수 있어요. 이 명령을 사용하려면 user input placeholders를 여러분의 정보로 바꾸세요.

 rm temp.zip && rm -rf temp/

다음 예시는 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 Command Reference_의 cp를 참고하세요.

AWS SDK로 Amazon S3 버킷의 모든 객체를 다운로드하는 예시는 _Amazon S3 API Reference_의 Code examples를 참고하세요.

다양한 AWS SDK 사용에 대한 일반 정보는 _Amazon S3 API Reference_의 AWS SDK를 사용한 Amazon S3 개발을 참고하세요.

객체 일부 다운로드

AWS CLI나 REST API로 객체의 일부를 다운로드할 수 있어요. 추가 매개변수를 사용해 객체의 어느 부분을 다운로드할지 지정하면 돼요.

다음 예시 명령은 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 Command Reference_의 get-object를 참고하세요.

HTTP Range 헤더에 대한 자세한 내용은 RFC Editor 웹사이트의 RFC 9110을 참고하세요.

참고

Amazon S3는 단일 GET 요청에서 여러 범위의 데이터 검색을 지원하지 않아요.

REST API의 partNumber와 Range 매개변수를 사용해 Amazon S3에서 객체 부분을 검색할 수 있어요. 자세한 내용은 _Amazon Simple Storage Service API Reference_의 GetObject를 참고하세요.

다른 AWS 계정에서 객체 다운로드

버킷 정책을 업데이트하지 않고도 사전 서명 URL을 사용해 객체에 대한 시간 제한 액세스를 다른 사람에게 부여할 수 있어요.

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

다음 단계에 따라 S3 콘솔을 사용해 일반 용도 버킷의 객체를 공유하기 위한 사전 서명 URL을 생성할 수 있어요. 콘솔을 사용할 때 사전 서명 URL의 최대 만료 시간은 생성 시점부터 12시간이에요.

S3 콘솔로 사전 서명 URL을 생성하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 General purpose buckets를 선택합니다.
  3. 버킷 목록에서 사전 서명 URL을 원하는 객체가 들어 있는 버킷의 이름을 선택합니다.
  4. Objects 목록에서 사전 서명 URL을 생성할 객체를 선택합니다.
  5. Object actions 메뉴에서 Share with a presigned URL을 선택합니다.
  6. 사전 서명 URL이 유효한 기간을 지정합니다.
  7. Create presigned URL을 선택합니다.
  8. 확인 메시지가 나타나면 URL이 자동으로 클립보드에 복사됩니다. 다시 복사해야 한다면 사전 서명 URL을 복사하는 버튼이 보여요.
  9. 객체를 다운로드하려면 URL을 아무 브라우저에 붙여 넣으면 객체 다운로드가 시도됩니다.

사전 서명 URL과 이를 만드는 다른 방법에 대한 자세한 내용은 사전 서명 URL로 객체 다운로드·업로드하기를 참고하세요.

아카이브 객체 다운로드

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

스토리지 클래스에 따라 아카이브 객체를 몇 분 또는 몇 시간 안에 복원할 수 있어요. Amazon S3 콘솔, S3 Batch Operations, Amazon S3 REST API, AWS SDK, AWS Command Line Interface(AWS CLI)로 아카이브 객체를 복원할 수 있어요.

지침은 아카이브 객체 복원하기를 참고하세요. 아카이브 객체를 복원한 뒤 다운로드할 수 있어요.

메타데이터를 기준으로 객체 다운로드

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

GetObject 또는 HeadObject 요청에 조건부 쓰기를 사용할 수 있어요.

조건부 요청에 대한 자세한 내용은 조건부 요청으로 S3 작업에 사전 조건 추가하기를 참고하세요.

객체 다운로드 문제 해결

불충분한 권한이나 잘못된 버킷 또는 AWS Identity and Access Management(IAM) 사용자 정책은 Amazon S3에서 객체를 다운로드하려고 할 때 오류를 일으킬 수 있어요. 이런 문제들은 종종 Amazon S3가 리소스에 대한 액세스를 허용할 수 없는 Access Denied(403 Forbidden) 오류를 일으켜요.

Access Denied(403 Forbidden) 오류의 일반적인 원인은 Amazon S3의 액세스 거부(403 Forbidden) 오류 문제 해결을 참고하세요.

객체에 액세스하려고 할 때 404 NoSuchKey 오류가 발생한다면 AWS re:Post Knowledge Center의 Amazon S3의 404 NoSuchKey 오류를 어떻게 문제 해결하나요?를 참고하세요.

더 알아보기 (Learn more)