Amazon S3이란 무엇인가요? - Amazon Simple Storage Service

Amazon S3이란 무엇인가요?

Amazon Simple Storage Service(Amazon S3)는 인터넷 스토리지 서비스입니다. 웹 규모 컴퓨팅 작업을 보다 쉽게 할 수 있도록 설계되었습니다.

Amazon S3에서 제공하는 단순한 웹 서비스 인터페이스를 사용하여 언제든지 웹상 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있습니다. 또한, 개발자는 Amazon이 자체 웹 사이트의 글로벌 네트워크 운영에 사용하는 것과 같은 높은 확장성과 신뢰성을 갖춘 빠르고 경제적인 데이터 스토리지 인프라에 액세스할 수 있습니다. 이 서비스의 목적은 규모의 이점을 극대화하고 개발자들에게 이러한 이점을 제공하는 것입니다.

본 Amazon Simple Storage Service(Amazon S3) 소개는 이 웹 서비스에 대한 세부 요약 정보를 제공합니다. 이 단원을 읽으면 이 제품의 혜택과 사업에의 적용 방법을 이해하게 됩니다.

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

방법

정보 관련 단원

일반 제품 개요 및 요금

Amazon S3

버킷에 대해 어떤 작업을 할 수 있습니까?

버킷 개요

액세스 포인트에 대해 어떤 작업을 할 수 있습니까? Amazon S3 액세스 포인트를 사용한 데이터 액세스 관리

객체에 대해 어떤 작업을 할 수 있습니까?

Amazon S3 객체 개요

어떻게 요청합니까?

요청 만들기

리소스에 대한 액세스를 어떻게 관리합니까?

Amazon S3의 Identity and Access Management

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를 효과적으로 사용하기 위해 이해해야 할 핵심 개념 및 용어에 대해 설명합니다. 가장 먼저 접하게 될 가능성이 높은 것부터 순서대로 제공되어 있습니다.

Buckets

버킷은 Amazon S3에 저장된 객체에 대한 컨테이너입니다. 모든 객체는 어떤 버킷에 포함됩니다. 예를 들어 photos/puppy.jpg로 명명된 객체는 미국 서부(오레곤) 리전의 awsexamplebucket1 버킷에 저장되며 URL https://awsexamplebucket1.s3.us-west-2.amazonaws.com/photos/puppy.jpg를 사용하여 주소를 지정할 수 있습니다.

버킷은 다음과 같은 여러 가지 용도로 사용됩니다.

  • Amazon S3 네임스페이스를 최상위 수준으로 구성합니다.

  • 스토리지 및 데이터 전송 요금을 담당하는 계정을 식별합니다.

  • 액세스 제어에 사용됩니다.

  • 사용량 보고를 위한 집계 단위로 사용됩니다.

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

버킷에 대한 자세한 내용은 버킷 개요을 참조하십시오.

Objects

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

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

Keys

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

객체 키에 대한 자세한 내용은 객체 키 이름 생성 단원을 참조하십시오.

Regions

Amazon S3에서 사용자가 만드는 버킷을 저장할 지리적 AWS 리전 을 선택할 수 있습니다. 지연 시간 최적화, 비용 최소화, 규정 요구 사항 준수 등 다양한 필요에 따라 리전을 선택할 수 있습니다. 특정 리전에 저장된 객체는 사용자가 명시적으로 객체를 다른 리전으로 전송하지 않는 한 해당 리전을 벗어나지 않습니다. 예를 들어, 유럽(아일랜드) 리전에 저장된 객체는 유럽 밖으로 이동하지 않습니다.

참고

계정에 대해 사용되는 AWS 리전 에서만 Amazon S3에 액세스하고 해당 기능을 사용할 수 있습니다.

Amazon S3 리전 및 엔드포인트 목록은 AWS 일반 참조리전 및 엔드포인트를 참조하세요.

Amazon S3 데이터 일관성 모델

Amazon S3는 모든 AWS 리전 의 Amazon S3 버킷에 있는 객체의 PUT 및 DELETE에 대해 강력한 쓰기 후 읽기(read-after-write) 일관성을 제공합니다. 이는 새 객체에 대한 쓰기 그리고 기존 객체 및 DELETE를 덮어쓰는 PUT에 모두 적용됩니다. 또한 Amazon S3 Select, Amazon S3 액세스 제어 목록, Amazon S3 객체 태그, 객체 메타데이터(예: HEAD 객체)에 대한 읽기 작업은 매우 일관적입니다.

단일 키에 대한 업데이트는 원자성입니다. 예를 들어, 한 스레드에서 기존 키에 PUT을 수행하고 두 번째 스레드에서 동일한 키에 GET을 동시에 수행하면, 이전 데이터 또는 새 데이터는 얻지만 부분적 데이터나 손상된 데이터는 얻지 못합니다.

Amazon S3에서는 AWS 데이터 센터 내의 여러 서버로 데이터를 복제함으로써 고가용성을 구현합니다. PUT 요청이 성공하면 데이터가 안전하게 저장됩니다. 성공적인 PUT 응답을 받은 후 시작된 모든 읽기(GET 또는 LIST)는 PUT에 의해 쓰여진 데이터를 반환합니다. 다음은 이 동작의 예입니다.

  • 프로세스가 Amazon S3로 새 객체를 쓰고 해당 버킷 내에 바로 키를 나열합니다. 새 객체가 목록에 나타납니다.

  • 프로세스가 기존 객체를 대체하고 바로 읽기를 시도합니다. Amazon S3가 새 데이터를 반환합니다.

  • 프로세스가 기존 객체를 삭제하고 바로 읽기를 시도합니다. 객체가 삭제되었으므로 Amazon S3는 데이터를 반환하지 않습니다.

  • 프로세스가 기존 객체를 삭제하고 해당 버킷 내에 바로 키를 나열합니다. 객체가 목록에 나타나지 않습니다.

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

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

버킷 구성에는 최종 일관성 모델이 있습니다. 구체적으로 설명하면 다음과 같습니다.

  • 버킷을 삭제하고 즉시 모든 버킷을 나열하면 목록에 삭제된 버킷이 여전히 표시될 수 있습니다.

  • 버킷에서 버전 관리를 처음으로 활성화하면 변경 사항이 완전히 전파되는 데 시간이 조금 걸릴 수 있습니다. 버전 관리를 활성화하고 나서 15분 정도 기다린 후, 버킷의 객체에 대해 쓰기 작업(PUT 또는 DELETE)을 실행하는 것이 좋습니다.

동시 애플리케이션

이 섹션에서는 여러 클라이언트가 동일한 항목에 쓸 때 Amazon S3에서 예상되는 동작의 예제를 제공합니다.

이 예제에서는 W1(쓰기 1)과 W2(쓰기 2) 모두 R1(읽기 1) 및 R2(읽기 2)가 시작되기 전에 완료됩니다. S3는 매우 일관적이기 때문에 R1과 R2는 모두 color = ruby을(를) 반환합니다.

다음 예제에서 W2는 R1이 시작되기 전에 완료되지 않습니다. 따라서 R1은 color = ruby 또는 color = garnet을(를) 반환할 수 있습니다. 그러나 R2가 시작되기 전에 W1과 W2가 완료되므로 R2는 color = garnet을(를) 반환합니다.

마지막 예제에서, W1이 승인을 받기 전에 W2가 시작되었습니다. 따라서 이러한 쓰기는 동시에 이루어진 것으로 간주됩니다. Amazon S3는 내부적으로 최종 작성자 인정(last-writer-wins) 의미를 사용하여 어떤 쓰기가 우선하는지 결정합니다. 그러나 Amazon S3가 요청을 수신하는 순서와 애플리케이션이 승인을 받는 순서는 네트워크 대기 시간 등의 요인으로 인해 예측할 수 없습니다. 예를 들어, W2는 동일한 리전의 Amazon EC2 인스턴스에 의해 시작되고 W1은 멀리 떨어진 호스트에 의해 시작될 수 있습니다. 최종 값을 결정하는 가장 좋은 방법은 두 쓰기가 모두 승인된 후 읽기를 수행하는 것입니다.

Amazon S3 기능

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

스토리지 클래스

Amazon S3는 여러 사용 사례에 맞춰 설계된 다양한 스토리지 클래스를 제공합니다. 여기에는 자주 액세스하는 데이터의 범용 스토리지를 위한 Amazon S3 STANDARD, 수명이 길지만 액세스 빈도가 덜한 데이터를 위한 Amazon S3 STANDARD_IA 및 장기적 아카이브를 위한 S3 Glacier가 포함됩니다.

자세한 내용은 Amazon S3 스토리지 클래스 사용 섹션을 참조하세요.

버킷 정책

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

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

  • 특정 S3 버킷에 대한 권한

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

  • 업무 시간 중 부여

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

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

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

  • 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

AWS Identity and Access Management(IAM)로 Amazon S3 리소스에 대한 액세스를 관리할 수 있습니다.

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

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

액세스 제어 목록

액세스 제어 목록(ACL)을 사용하여 버킷 및 객체 각각에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 ACL(액세스 제어 목록) 개요 섹션을 참조하세요.

Versioning

버전 관리를 사용하면 동일 버킷 내에 여러 개의 객체 버전을 보유할 수 있습니다. 자세한 내용은 S3 버킷에서 버전 관리 사용 섹션을 참조하세요.

Operations

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

일반적인 작업

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

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

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

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

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

이러한 작업과 모든 기타 기능은 이 안내서 전체에 자세히 설명되어 있습니다.

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

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

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을 다운로드하고(https://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl 참조) Apache Axis 또는 Microsoft .NET과 같은 SOAP 도구 키트를 사용하여 바인딩을 만든 다음 이 바인딩을 사용하여 Amazon S3을 호출하는 코드를 작성하는 것입니다.

Amazon S3 요금 지불

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

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

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

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

관련 서비스

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

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

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

  • AWS Snowball – 이 서비스는 물리적 스토리지 디바이스를 사용함으로써 인터넷을 우회하여 AWS 내부 및 외부와 대량의 데이터를 빠르게 주고받는 서비스입니다. 각 AWS Snowball 디바이스 유형은 인터넷 속도보다 더 빠르게 데이터를 전송할 수 있습니다. 이 전송은 리전 운송업체를 통해 디바이스의 데이터를 운송하는 방식으로 이루어집니다. 자세한 내용은 AWS Snowball 제품 세부 정보 페이지를 참조하세요.