메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

Amazon S3 소개

본 Amazon Simple Storage Service 소개는 이 웹 서비스에 대해 세부 요약 정보를 제공하기 위한 목적으로 작성되었습니다. 이 단원을 읽으면 이 제품의 혜택과 사업에의 적용 방법을 이해하게 됩니다.

Amazon S3 및 이 안내서의 개요

Amazon S3에서 제공하는 단순한 웹 서비스 인터페이스를 사용하여 웹에서 언제 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있습니다.

이 안내서에서는 버킷을 만들고, 객체를 저장 및 검색하고, 리소스에 대한 권한을 관리하기 위해 요청을 보내는 방법에 대해 설명합니다. 이 안내서에서는 액세스 제어 및 인증 프로세스에 대해서도 설명합니다. 액세스 제어는 Amazon S3 내에서 객체 및 버킷에 액세스할 수 있는 사람과 액세스 유형(예: 읽기 및 쓰기)을 정의합니다. 인증 프로세스는 Amazon Web Services(AWS)에 액세스하려는 사용자의 자격 증명을 확인합니다.

Amazon S3의 장점

Amazon S3는 의도적으로 단순성 및 견고성에 초점을 두는 최소한의 기능 세트를 사용하여 구축되었습니다. 다음은 Amazon S3 서비스의 일부 장점입니다.

  • 버킷 만들기 - 데이터를 저장하는 버킷을 만들고 여기에 이름을 지정합니다. 버킷은 데이터를 저장하기 위한 Amazon S3의 기본 컨테이너입니다.

  • 버킷에 데이터 저장 - 버킷에 데이터를 무한정으로 저장합니다. Amazon S3 버킷에 객체를 원하는 만큼 업로드할 수 있으며, 각 객체에 최대 5TB의 데이터를 포함할 수 있습니다. 각 객체는 고유한 개발자 할당 키를 사용하여 저장 및 검색합니다.

  • 데이터 다운로드 - 데이터를 직접 다운로드하거나 다른 사람이 그렇게 하도록 합니다. 언제든지 데이터를 직접 다운로드하거나 다른 사람이 그렇게 하도록 허용할 수 있습니다.

  • 권한 - 데이터를 Amazon S3 버킷으로 업로드 또는 다운로드하려는 사용자에게 액세스 권한을 부여하거나 해당 권한을 거부합니다. 3가지 유형의 사용자에게 업로드 및 다운로드 권한을 부여할 수 있습니다. 인증 메커니즘을 사용하면 데이터가 무단으로 액세스되지 않도록 보호하는 데 도움이 될 수 있습니다.

  • 표준 인터페이스 - 모든 인터넷 개발 도구 키트에서 사용할 수 있도록 설계된 표준 기반 REST 및 SOAP 인터페이스를 사용합니다.

    참고

    HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. 새로운 Amazon S3 기능은 SOAP에 대해 지원되지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

Amazon S3 개념

이 단원에서는 Amazon S3를 효과적으로 사용하기 위해 이해해야 할 핵심 개념 및 용어에 대해 설명합니다. 가장 먼저 접하게 될 가능성이 높은 것부터 순서대로 제공되어 있습니다.

버킷

버킷은 Amazon S3에 저장된 객체에 대한 컨테이너입니다. 모든 객체는 어떤 버킷에 포함됩니다. 예를 들어, photos/puppy.jpg로 명명된 객체는 johnsmith 버킷에 저장되며, 다음 URL을 사용하여 주소를 지정할 수 있습니다. http://johnsmith.s3.amazonaws.com/photos/puppy.jpg

버킷은 가장 높은 수준에서 Amazon S3 네임스페이스를 구성하고, 스토리지 및 데이터 전송 요금에 대한 책임이 있는 계정을 식별하며, 액세스 제어에서 역할을 하고, 사용량 보고에 대한 집계 단위로 사용되는 등 여러 목적으로 사용됩니다.

특정 리전에서 생성되도록 버킷을 구성할 수 있습니다. 자세한 내용은 Buckets and Regions를 참조하십시오. 객체가 추가될 때마다 Amazon S3에서 고유한 버전 ID를 생성하고 이를 객체에 할당하도록 버킷을 구성할 수도 있습니다. 자세한 내용은 버전 관리를 참조하십시오.

버킷에 대한 자세한 내용은 Amazon S3 버킷을 사용한 작업을 참조하십시오.

객체

객체는 Amazon S3에 저장되는 기본 개체입니다. 객체는 객체 데이터와 메타데이터로 구성됩니다. 데이터 부분은 Amazon S3에서 볼 수 없습니다. 메타데이터는 객체를 설명하는 이름-값 페어의 집합입니다. 여기에는 마지막으로 수정한 날짜와 같은 몇 가지 기본 메타데이터 및 콘텐츠 형식과 같은 표준 HTTP 메타데이터가 포함됩니다. 객체를 저장할 때 사용자 정의 메타데이터를 지정할 수도 있습니다.

객체는 키(이름) 및 버전 ID를 통해 버킷 내에서 고유하게 식별됩니다. 자세한 내용은 버전 관리를 참조하십시오.

키는 버킷 내 객체의 고유한 식별자입니다. 버킷 내 모든 객체는 정확히 하나의 키를 갖습니다. 버킷, 키 및 버전 ID의 조합이 각 객체를 고유하게 식별하기 때문에 Amazon S3는 "버킷 + 키 + 버전"과 객체 자체 사이의 기본 데이터 맵으로 간주할 수 있습니다. Amazon S3 내 모든 객체는 웹 서비스 엔드포인트, 버킷 이름, 키, 그리고 선택 사항인 버전의 조합을 통해 고유하게 주소를 지정할 수 있습니다. 예를 들어, http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl이라는 URL에서 "doc"는 버킷의 이름이고 "2006-03-01/AmazonS3.wsdl"은 키입니다.

리전

Amazon S3에서 사용자가 만드는 버킷을 저장할 리전을 선택할 수 있습니다. 지연 시간 최적화, 비용 최소화, 규정 요구 사항 준수 등 다양한 필요에 따라 리전을 선택할 수 있습니다. Amazon S3에서는 현재 다음 리전만 지원됩니다.

  • 미국 동부(버지니아 북부) 지역 버지니아 북부의 Amazon S3 서버 사용

  • 미국 동부(오하이오) 리전 콜럼버스(오하이오)의 Amazon S3 서버 사용

  • 미국 서부(캘리포니아 북부) 리전 캘리포니아 북부의 Amazon S3 서버 사용

  • 미국 서부(오레곤) 지역 오레곤의 Amazon S3 서버 사용

  • 캐나다(중부) 리전 몬트리올의 Amazon S3 서버 사용

  • 아시아 태평양(뭄바이) 리전 뭄바이의 Amazon S3 서버 사용

  • 아시아 태평양(서울) 리전 서울의 Amazon S3 서버 사용

  • 아시아 태평양(싱가포르) 리전 싱가포르의 Amazon S3 서버 사용

  • 아시아 태평양(시드니) 리전 시드니의 Amazon S3 서버 사용

  • 아시아 태평양(도쿄) 리전 도쿄의 Amazon S3 서버 사용

  • EU(프랑크푸르트) 리전 프랑크푸르트의 Amazon S3 서버 사용

  • EU(아일랜드) 지역 아일랜드의 Amazon S3 서버 사용

  • EU(런던) 리전 런던의 Amazon S3 서버 사용

  • 남아메리카(상파울루) 리전 상파울루의 Amazon S3 서버 사용

특정 리전에 저장된 객체는 사용자가 명시적으로 객체를 다른 리전으로 전송하지 않는 한 해당 리전을 벗어나지 않습니다. 예를 들어 EU(아일랜드) 리전에 저장된 객체는 해당 리전을 벗어나지 않습니다. Amazon S3 리전과 엔드포인트에 대한 자세한 내용은 AWS 일반 참조리전 및 엔드포인트를 참조하십시오.

Amazon S3 데이터 일관성 모델

Amazon S3는 모든 리전의 S3 버킷에 있는 새 객체의 PUT에 대해 한 가지 주의 사항을 제시함으로써 읽기 후 쓰기 일관성을 제공합니다. 주의할 점은 객체를 만들기 전에 (객체가 있는지 찾기 위해) 키 이름에 HEAD 또는 GET 요청을 하는 경우 Amazon S3가 읽기 후 쓰기에 대한 최종 일관성을 제공하는 것입니다.

Amazon S3는 모든 리전의 덮어쓰기 PUTS 및 DELETES에 대한 최종 일관성을 제공합니다.

단일 키에 대한 업데이트는 원자성입니다. 예를 들어 기존 키에 대해 PUT 할 경우, 이후의 읽기가 기존 데이터 또는 업데이트된 데이터를 반환할 수 있지만, 절대로 손상된 데이터 또는 부분 데이터를 쓰지는 않습니다.

Amazon S3에서는 Amazon 데이터 센터 내의 여러 서버로 데이터를 복제함으로써 고가용성을 구현합니다. PUT 요청이 성공하면 데이터가 안전하게 저장됩니다. 그러나 변경 사항에 대한 정보를 Amazon S3로 복제해야 하는데 이 작업에는 일정 시간이 걸릴 수 있으므로 다음 동작을 관찰할 수 있습니다.

  • 프로세스가 Amazon S3로 새 객체를 쓰고 해당 버킷 내에 바로 키를 나열합니다. 변경 사항이 완전히 전파될 때까지 객체가 목록에 나타나지 않을 수 있습니다.

  • 프로세스가 기존 객체를 대체하고 바로 읽기를 시도합니다. 변경 사항이 완전히 전파될 때까지 Amazon S3에서 이전 데이터를 반환할 수 있습니다.

  • 프로세스가 기존 객체를 삭제하고 바로 읽기를 시도합니다. 삭제가 완전히 전파될 때까지 Amazon S3에서 삭제된 데이터를 반환할 수 있습니다.

  • 프로세스가 기존 객체를 삭제하고 해당 버킷 내에 바로 키를 나열합니다. 삭제가 완전히 전파될 때까지 Amazon S3에서 삭제된 객체를 나열할 수 있습니다.

참고

Amazon S3에서는 현재 객체 잠금이 지원되지 않습니다. 두 PUT 요청을 동시에 같은 키에 대해 실행할 경우 타임스탬프가 최신인 요청이 우선 적용됩니다. 이것이 문제가 되는 경우 객체 잠금 메커니즘을 애플리케이션에 구축해 넣어야 합니다.

업데이트는 키를 기반으로 하므로 여러 키에서 원자성 업데이트를 수행할 방법은 없습니다. 예를 들어, 한 키의 업데이트에 의존하는 다른 키의 업데이트를 수행할 수 없습니다. 단, 이 기능을 애플리케이션에 설계해 넣는 경우는 예외입니다.

다음 표에서는 Eventually Consistent Read 및 Consistent Read의 특징에 대해 설명합니다.

Eventually Consistent Read Consistent Read
기한 경과 읽기 가능 기한 경과 읽기 불가능
가장 짧은 읽기 지연 시간 잠재적으로 더 긴 읽기 지연 시간
가장 높은 읽기 처리량 잠재적으로 더 낮은 읽기 처리량

동시 애플리케이션

이 단원에서는 다중 클라이언트에서 같은 항목에 쓰고 있을 때의 Eventually Consistent Read 및 Consistent Read 요청에 대한 예제를 제공합니다.

이 예제에서는 W1(쓰기 1)과 W2(쓰기 2) 모두 R1(읽기 1) 및 R2(읽기 2)가 시작되기 전에 완료됩니다. Consistent Read의 경우 R1과 R2 모두 color = ruby를 반환합니다. Eventually Consistent Read의 경우 경과된 시간에 따라 R1 및 R2가 color = red 또는 color = ruby를 반환하거나 결과를 반환하지 않을 수 있습니다.

다음 예제에서 W2는 R1이 시작되기 전에 완료되지 않습니다. 따라서 R1이 Consistent Read 또는 Eventually Consistent Read에 대해 color = ruby 또는 color = garnet을 반환할 수 있습니다. 또한 경과된 시간에 따라 Eventually Consistent Read가 결과를 반환하지 않을 수 있습니다.

Consistent Read의 경우 R2가 color = garnet을 반환합니다. Eventually Consistent Read의 경우 경과된 시간에 따라 R2가 color = ruby 또는 color = garnet을 반환하거나 결과를 반환하지 않을 수 있습니다.

마지막 예제에서 클라이언트 2는 Amazon S3에서 W1에 대해 성공을 반환하기 전에 W2를 수행하므로 최종 값의 결과를 알 수 없습니다(color = garnet 또는 color = brick). 후속 읽기(Consistent Read 또는 Eventually Consistent Read)를 수행하면 두 값 중 아무 값이나 반환될 수 있습니다. 또한 경과된 시간에 따라 Eventually Consistent Read가 결과를 반환하지 않을 수 있습니다.

기능

이 단원에서는 중요한 Amazon S3 기능에 대해 설명합니다.

Reduced Redundancy Storage

고객은 Amazon S3 Reduced Redundancy Storage(RRS) 옵션을 사용하여 자신의 데이터를 저장할 수 있습니다. RRS는 고객이 중요하지 않은 재현 가능한 데이터를 Amazon S3 표준 스토리지보다 더 낮은 중복성 수준에서 저장하여 비용을 절감할 수 있도록 합니다. RRS는 다른 곳에 안정적으로 저장되어 있는 콘텐츠를 배포 또는 공유하거나 썸네일, 코드 변환 미디어 또는 쉽게 재현할 수 있는 기타 처리된 데이터를 저장하는 비용 효율적인 고가용성 솔루션을 제공합니다. RRS 옵션은 여러 시설 전반의 다양한 디바이스에 객체를 저장하여 일반 디스크 드라이브의 400배에 해당하는 내구성을 제공하지만 표준 Amazon S3 스토리지만큼 빈번하게 객체를 복제하지는 않으므로 훨씬 더 경제적입니다.

RRS는 연중 99.99%의 객체 내구성을 보장합니다. 이 내구성 수준은 연평균 0.01%의 객체 예측 손실에 해당합니다.

AWS는 표준 Amazon S3 스토리지보다 RRS 사용 시 더 적은 요금을 부과합니다. 요금 정보는 Amazon S3 Pricing을 참조하십시오.

자세한 내용은 스토리지 클래스를 참조하십시오.

버킷 정책

버킷 정책은 Amazon S3 작업, 요청자, 리소스 및 요청의 여러 측면(예: IP 주소)을 비롯한 다양한 조건을 기반으로 버킷 및 객체에 대한 중앙 집중식 액세스 제어를 제공합니다. 정책은 액세스 정책 언어로 표현되며 중앙 집중식 권한 관리를 가능하게 합니다. 버킷에 연결되는 권한은 해당 버킷의 모든 객체에 적용됩니다.

개인과 기업이 버킷 정책을 사용할 수 있습니다. 기업이 Amazon S3에 등록하면 계정을 만들게 됩니다. 그 후 기업은 계정과 같아집니다. 계정은 자신과 직원이 만드는 Amazon 리소스에 대해 재정적 책임을 집니다. 계정은 버킷 정책 권한을 부여하고 다양한 조건을 기반으로 직원에게 권한을 할당할 수 있습니다. 예를 들어, 계정은 사용자에게 다음과 같은 조건으로 쓰기 권한을 부여하는 정책을 만들 수 있습니다.

  • 특정 S3 버킷에 대한 권한

  • 계정의 기업 네트워크에서 부여

  • 업무 시간 중 부여

계정은 한 사용자에 제한된 읽기 및 쓰기 권한을 부여할 수 있지만 다른 사용자가 버킷을 만들고 삭제하도록 허용할 수도 있습니다. 계정은 여러 현장 사무소에서 일일 보고서를 단일 버킷에 저장하여 각 사무소에서 특정 이름 세트(예: "Nevada/*" 또는 "Utah/*")에만, 그리고 해당 사무소의 IP 주소 범위에서만 쓰도록 허용할 수 있습니다.

개별 객체에 대해서만 권한을 추가(부여)할 수 있는 액세스 제어 목록(아래에 설명되어 있음)과 달리 정책은 버킷 내 모든 객체 또는 객체의 하위 세트에 대해 권한을 추가 또는 거부할 수 있습니다. 계정은 요청 하나를 통해 버킷에 포함된 임의 개수의 객체에 대한 권한을 설정할 수 있습니다. 계정이 공통 접두사로 시작하거나html과 같은 지정된 확장명으로 끝나는 객체 그룹에 대한 액세스를 제어할 수 있도록 계정은 Amazon 리소스 이름(ARN) 및 기타 값에 와일드카드(정규식 연산자와 유사함)를 사용할 수 있습니다.

버킷 소유자만 정책을 버킷에 연결할 수 있습니다. 액세스 정책 언어로 작성되는 정책은 다음을 기반으로 요청을 허용 또는 거부합니다.

  • Amazon S3 버킷 작업(예: PUT ?acl) 및 객체 작업(예: PUT Object 또는 GET Object)

  • 요청자

  • 정책에 지정된 조건

계정은 GetObject, GetObjectVersion, DeleteObject 또는 DeleteBucket과 같은 특정 Amazon S3 작업을 기반으로 액세스를 제어할 수 있습니다.

조건은 IP 주소, IP 주소 범위(CIDR 표기법 사용), 날짜, 사용자 에이전트, HTTP 참조자 및 전송(HTTP 및 HTTPS) 등이 될 수 있습니다.

자세한 내용은 버킷 정책 및 사용자 정책 사용 단원을 참조하십시오.

AWS Identity and Access Management

예를 들어 IAM을 Amazon S3와 함께 사용하여 사용자 또는 사용자 그룹이 AWS 계정에 속한 Amazon S3 버킷의 특정 부분에 대해 보유한 액세스 유형을 제어할 수 있습니다.

IAM에 대한 자세한 내용은 다음을 참조하십시오.

액세스 제어 목록

자세한 내용은 ACL을 사용한 액세스 관리 단원을 참조하십시오.

버전 관리

자세한 내용은 객체 버전 관리 섹션을 참조하십시오.

운영

다음은 API를 통해 실행할 가장 일반적인 작업입니다.

일반적인 작업

  • 버킷 만들기 - 객체를 저장할 고유한 버킷을 만들고 여기에 이름을 지정합니다.

  • 객체 작성 - 객체를 만들거나 덮어써서 데이터를 저장합니다. 객체를 쓸 때 버킷의 네임스페이스에 고유한 키를 지정합니다. 이 시점에서 객체에 대해 원하는 액세스 제어를 지정하는 것도 좋습니다.

  • 객체 읽기 - 데이터를 다시 읽습니다. HTTP 또는 BitTorrent를 통해 데이터를 다운로드할 수 있습니다.

  • 객체 삭제 - 일부 데이터를 삭제합니다.

  • 키 나열 - 버킷 중 하나에 포함된 키를 나열합니다. 접두사를 기반으로 키 목록을 필터링할 수 있습니다.

이와 모든 기타 기능에 대한 세부 정보는 이 안내서의 뒷부분에 자세히 설명되어 있습니다.

Amazon S3 애플리케이션 프로그래밍 인터페이스(API)

Amazon S3 아키텍처는 지원되는 인터페이스를 사용하여 객체를 저장 및 검색하는 프로그래밍 언어 중립적 아키텍처로 설계되었습니다.

Amazon S3는 REST 및 SOAP 인터페이스를 제공합니다. 이 둘은 비슷하지만 약간의 차이가 있습니다. 예를 들어, REST 인터페이스에서는 메타데이터가 HTTP 헤더에 반환됩니다. 본문을 제외하고 최대 4KB의 HTTP 요청만 지원되기 때문에 제공할 수 있는 메타데이터의 양이 제한됩니다.

참고

HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. 새로운 Amazon S3 기능은 SOAP에 대해 지원되지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

REST 인터페이스

REST API는 Amazon S3에 대한 HTTP 인터페이스입니다. REST의 경우, 표준 HTTP 요청을 사용하여 버킷과 객체를 생성하고, 가져오며, 삭제합니다.

HTTP를 지원하는 임의의 도구 키트를 사용하여 REST API를 사용할 수 있습니다. 심지어 브라우저를 사용하여 객체를 가져올 수도 있습니다. 단, 객체를 익명으로 읽을 수 있어야 합니다.

REST API는 표준 HTTP 헤더 및 상태 코드를 사용하므로 표준 브라우저 및 도구 키트가 예상대로 작동합니다. Amazon은 일부 영역에서 HTTP에 기능을 추가했습니다. 예를 들어, 액세스 제어를 지원하기 위해 헤더를 추가했습니다. 이 경우 새로운 기능은 최대한 표준 HTTP 사용법과 일치하는 방식으로 추가되었습니다.

SOAP 인터페이스

참고

HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. 새로운 Amazon S3 기능은 SOAP에 대해 지원되지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

SOAP API는 Document Literal 인코딩을 사용하여 SOAP 1.1 인터페이스를 제공합니다. SOAP를 사용하는 가장 일반적인 방법은 WSDL을 다운로드하고(http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl 참조) Apache Axis 또는 Microsoft .NET과 같은 SOAP 도구 키트를 사용하여 바인딩을 만든 다음 이 바인딩을 사용하여 Amazon S3를 호출하는 코드를 작성하는 것입니다.

Amazon S3 요금 지불

Amazon S3의 요금은 애플리케이션의 스토리지 요구 사항에 맞춰 계획을 수립할 필요가 없도록 설계되었습니다. 대부분의 스토리지 공급자는 사용자가 사전에 결정된 스토리지 및 네트워크 전송 용량을 구매하도록 합니다. 그리고 사용자가 이 용량을 초과할 경우 서비스를 중단하거나 사용자에게 높은 초과 요금을 부과합니다. 이 용량을 초과하지 않은 경우에도 해당 용량을 모두 사용한 것과 같은 요금을 지불합니다.

Amazon S3는 사용자가 실제로 사용한 만큼만 과금하며, 일체의 부대 비용이나 초과 요금이 없습니다. 이로 인해 Amazon 인프라의 비용 이점을 활용하면서 사업과 함께 성장시킬 수 있는 가변 비용 서비스가 개발자에게 제공됩니다.

Amazon S3에 항목을 저장하기 전에 서비스에 등록하고 매월 말에 청구될 결제 수단을 제공해야 합니다. 서비스를 시작하는 데 드는 설치 수수료나 확약금이 없습니다. 매월 말에 제공된 결제 수단을 통해 당월 사용에 대한 요금이 자동으로 청구됩니다.

Amazon S3 스토리지 요금에 대한 자세한 내용은 Amazon S3 Pricing을 참조하십시오.

관련 서비스

데이터를 Amazon S3로 로드한 후에는 해당 데이터를 기타 Amazon 제공 서비스에 사용할 수 있습니다. 가장 자주 사용하게 될 서비스는 다음과 같습니다.

  • Amazon Elastic Compute Cloud - 이 웹 서비스는 클라우드에서 가상 컴퓨팅 리소스를 제공합니다. 자세한 내용은 Amazon EC2 제품 세부 정보 페이지를 참조하십시오.

  • Amazon EMR - 기업, 연구원, 데이터 분석가 및 개발자는 이 웹 서비스를 사용하여 막대한 양의 데이터를 쉽고 비용 효율적으로 처리할 수 있습니다. 이 웹 서비스는 호스팅되는 하둡 프레임워크를 사용합니다. 하둡 프레임워크는 Amazon EC2 및 Amazon S3의 웹 스케일 인프라 상에서 실행됩니다. 자세한 내용은 Amazon EMR 제품 세부 정보 페이지를 참조하십시오.

  • AWS Import/Export - AWS Import/Export를 사용하면 Amazon이 사용자의 데이터(테라바이트 단위)를 Amazon S3로 업로드할 수 있도록 RAID 드라이브와 같은 스토리지 디바이스를 Amazon으로 메일을 통해 전송할 수 있습니다. 자세한 내용은 AWS Import/Export Developer Guide를 참조하십시오.