

# 객체 업로드
<a name="upload-objects"></a>

Amazon S3에 파일을 업로드하면 이 파일은 S3 객체로 저장됩니다.** 객체는 파일 데이터 및 그 객체를 설명하는 메타데이터로 구성됩니다. 또한 버킷에 저장할 수 있는 객체 수에는 제한이 없습니다. Amazon S3 버킷에 파일을 업로드하려면 해당 버킷에 대한 쓰기 권한이 있어야 합니다. 액세스 권한에 대한 자세한 내용은 [Amazon S3의 ID 및 액세스 관리](security-iam.md)을 참조하십시오.

이미지, 백업, 데이터, 동영상 등 모든 유형의 파일을 S3 버킷에 업로드할 수 있습니다. Amazon S3 콘솔을 사용하여 업로드할 수 있는 파일의 최대 크기는 160GB입니다. 160GB가 넘는 파일을 업로드하려면 AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 사용하십시오.

버전 관리를 사용하는 버킷에 이미 키 이름이 있는 객체를 업로드하면 Amazon S3는 기존 객체를 대체하는 대신 객체의 다른 버전을 만듭니다. 버전 관리 활성화에 대한 자세한 내용은 [버킷에 버전 관리 사용 설정](manage-versioning-examples.md) 섹션을 참조하세요.

 업로드하는 데이터의 크기에 따라 Amazon S3는 다음과 같은 옵션을 제공합니다.
+ **AWS SDK, REST API 또는 AWS CLI를 사용하여 단일 작업으로 객체 업로드** - 단일 `PUT` 작업으로 최대 5GB 크기의 단일 객체를 업로드할 수 있습니다.
+ **Amazon S3 콘솔을 사용하여 단일 객체 업로드**** -** Amazon S3 콘솔을 사용하면 최대 160GB 크기의 단일 객체를 업로드할 수 있습니다.
+ **AWS SDK, REST API 또는 AWS CLI를 사용하여 부분으로 나누어 객체 업로드**** -** 멀티파트 업로드 API 작업을 사용하여 최대 50TB 크기의 단일 대형 객체를 업로드할 수 있습니다.

  멀티파트 업로드 API 작업은 대용량 객체의 업로드 경험을 개선하기 위해 설계되었습니다. 객체를 부분별로 업로드할 수 있습니다. 이러한 객체 부분은 임의의 순서로 독립적으로, 그리고 병렬적으로 업로드할 수 있습니다. 크기가 5MB에서 50TB까지인 객체에 대해 멀티파트 업로드를 사용할 수 있습니다. 자세한 내용은 [Amazon S3에서 멀티파트 업로드를 사용한 객체 업로드 및 복사](mpuoverview.md) 섹션을 참조하세요.

5TB를 초과하는 파일을 업로드하려면 Java v1/v2, Python 또는 AWS CLI SDK에서 S3 Transfer Manager를 사용합니다. 최상의 성능을 얻으려면 리소스 사용률을 높이기 위해 최적화된 최신 AWS 공통 런타임(CRT)SDK와 함께 사용합니다.

메모리 스트림에서 대용량 객체를 업로드할 때 CRT는 각 부분을 최대 5GB의 메모리로 버퍼링하여 할당된 메모리의 전체 처리량을 제한합니다. Java SDK용 `maxNativeMemoryLimitInBytes`와 같은 구성 옵션을 사용하여 CRT 메모리 제한을 조정할 수 있습니다. 디스크에서 업로드하는 경우 CRT는 중간 부분 버퍼링 대신 직접 디스크 스트리밍으로 자동 전환하여 메모리 사용량을 개선합니다. 이 동작은 대형 객체에 대해 자동으로 활성화되지만 AWS CLI용 `should_stream` 및 Java SDK용 `CRT_MEMORY_BUFFER_DISABLED` 같은 요청 파라미터를 통해 더 작은 파일에 대해서도 활성화할 수 있습니다.

객체를 업로드할 때 기본적으로 Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화를 사용하여 객체가 자동으로 암호화됩니다. 다운로드하면 객체의 암호가 해독됩니다. 자세한 내용은 [Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정](bucket-encryption.md) 및 [암호화로 데이터 보호](UsingEncryption.md)(을)를 참조하세요.

객체를 업로드할 때 다른 유형의 기본 암호화를 사용하려는 경우 S3 `PUT` 요청에서 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용하여 서버 측 암호화를 지정하거나 SSE-KMS를 사용하여 데이터를 암호화하도록 대상 버킷의 기본 암호화 구성을 설정할 수도 있습니다. SSE-KMS에 대한 자세한 내용은 [AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](specifying-kms-encryption.md) 단원을 참조하십시오. 다른 계정에서 소유한 KMS 키를 사용하려면 먼저 해당 키에 대한 사용 권한이 있어야 합니다. KMS 키의 크로스 계정 권한에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [다른 계정에서 사용할 수 있는 KMS 키 만들기](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)를 참조하십시오.

Amazon S3에서 액세스 거부됨(403 Forbidden) 오류가 발생하는 경우 [Amazon S3의 액세스 거부(403 Forbidden) 오류 문제 해결](troubleshoot-403-errors.md) 섹션에서 일반적인 원인에 대해 자세히 알아보세요.

## 객체 업로드
<a name="upload-objects-procedure"></a>

### S3 콘솔 사용
<a name="upload-objects-by-drag-and-drop"></a>

이 절차는 콘솔을 사용하여 Amazon S3 버킷에 객체 및 폴더를 업로드하는 방법을 설명합니다.

객체를 업로드할 때 객체 키 이름은 파일 이름과 선택적 접두사입니다. Amazon S3 콘솔에서 폴더를 생성하여 객체를 구성할 수 있습니다. Amazon S3에서 폴더는 객체 키 이름에 나타나는 접두사로 표시됩니다. Amazon S3 콘솔의 폴더에 개별 객체를 업로드하면 객체 키 이름에 폴더 이름이 포함됩니다.

예를 들어 이름이 `sample1.jpg`인 객체를 이름이 `backup`인 폴더에 업로드하는 경우 키 이름은 `backup/sample1.jpg`입니다. 그러나 콘솔에는 해당 객체가 `sample1.jpg` 폴더의 `backup`로 표시됩니다. 키 이름에 대한 자세한 내용은 [객체 메타데이터 작업](UsingMetadata.md) 섹션을 참조하세요.

**참고**  
Amazon S3 콘솔에서 객체 이름을 바꾸거나 **스토리지 클래스**, **암호화** 또는 **메타데이터** 등의 속성을 변경하면 새 객체가 생성되어 이전 객체를 대체합니다. S3 버전 관리가 사용 설정된 경우 객체의 새 버전이 생성되고 기존 객체는 이전 버전이 됩니다. 또한 속성을 변경하는 역할도 새 객체(또는 객체 버전)의 소유자가 됩니다.

폴더를 업로드하면 Amazon S3는 지정된 폴더의 모든 파일과 하위 폴더를 버킷으로 업로드합니다. 그러면 업로드된 파일 이름과 폴더 이름을 조합하여 객체 키 이름이 지정됩니다. 예를 들어 `/images` 및 `sample1.jpg`라는 두 개의 파일을 포함하는 폴더 `sample2.jpg`를 업로드하는 경우 Amazon S3는 파일을 업로드한 후 해당 키 이름인 `images/sample1.jpg` 및 `images/sample2.jpg`를 할당합니다. 키 이름에는 폴더 이름이 접두사로 포함됩니다. Amazon S3 콘솔에는 마지막 `/` 이후의 키 이름 부분만 표시됩니다. 예를 들어, `images` 폴더에서 `images/sample1.jpg` 및 `images/sample2.jpg` 객체는 `sample1.jpg` 및 `sample2.jpg`로 표시됩니다.<a name="upload-files-folders"></a>

**S3 버킷에 폴더 및 파일 업로드**

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

1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다.

1. **버킷** 목록에서 폴더 또는 파일을 업로드할 버킷 이름을 선택합니다.

1. **업로드**를 선택합니다.

1. **업로드** 창에서 다음 중 하나를 수행합니다.
   + 파일 및 폴더를 **업로드** 창으로 끌어다 놓습니다.
   + **파일 추가** 또는 **폴더 추가**를 선택하고 업로드할 파일 또는 폴더를 선택한 후 **열기**를 선택합니다.

1. 버전 관리를 사용 설정하려면 **대상**에서 **버킷 버전 관리 사용 설정**를 선택합니다.

1. 추가 업로드 옵션을 구성하지 않고 나열된 파일 및 폴더를 업로드하려면 페이지 하단에서 **업로드**를 선택합니다.

   Amazon S3가 객체와 폴더를 업로드합니다. 업로드가 완료되면 **업로드: 상태** 페이지에서 성공 메시지를 볼 수 있습니다.<a name="configure-additional-properties"></a>

**추가 객체 속성 구성**

1. 액세스 제어 목록 권한을 변경하려면 **권한(Permissions)**을 선택합니다.

1. **액세스 제어 목록(ACL)(Access control list (ACL))**에서 권한을 편집합니다.

   객체 액세스 권한에 대한 자세한 내용은 [S3 콘솔을 사용하여 객체에 대한 ACL 권한 설정](managing-acls.md#set-object-permissions)를 참조하십시오. 현재 업로드 중인 모든 파일에 대해 대중(전 세계 모든 사람)에게 객체에 대한 읽기 액세스 권한을 부여할 수 있습니다. 그러나 퍼블릭 읽기 액세스의 기본 설정은 변경하지 않는 것이 좋습니다. 퍼블릭 읽기 액세스 권한 부여는 웹 사이트에 버킷을 사용하는 경우와 같은 소수의 사용 사례에 적용될 수 있습니다. 객체를 업로드한 후에도 언제든 객체 권한을 변경할 수 있습니다.

1. 다른 추가 속성을 구성하려면 **속성(Properties)**을 선택합니다.

1. **스토리지 클래스**에서 업로드하려는 파일의 스토리지 클래스를 선택합니다.

   스토리지 클래스에 대한 자세한 정보는 [Amazon S3 스토리지 클래스 이해 및 관리](storage-class-intro.md)를 참조하세요.

1. 객체에 대한 암호화 설정을 업데이트하려면 **서버 측 암호화 설정**에서 다음을 수행합니다.

   1. **암호화 키 지정(Specify an encryption key)**을 선택합니다.

   1. **암호화 설정**에서 **버킷 기본 암호화 설정 사용** 또는 **기본 암호화에 버킷 설정 재정의**를 선택합니다.

   1. **기본 암호화에 버킷 설정 재정의**를 선택한 경우 다음과 같은 암호화 설정을 구성해야 합니다.
      + Amazon S3에서 관리하는 키를 사용하여 업로드된 파일을 암호화하려면 **Amazon S3 관리형 키(SSE-S3)**를 선택합니다.

        자세한 내용은 [Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 사용](UsingServerSideEncryption.md) 섹션을 참조하세요.
      + AWS Key Management Service(AWS KMS)에 저장된 키를 사용하여 업로드된 파일을 암호화하려면 **AWS Key Management Service 키(SSE-KMS)**를 선택합니다. 그리고 나서 **AWS KMS 키**에 다음 옵션 중 하나를 선택합니다.
        + 사용 가능한 KMS 키 목록에서 **AWS KMS keys 중에서 선택**을 선택한 다음, 사용 가능한 키 목록에서 **KMS 키**를 선택합니다.

          AWS 관리형 키(`aws/s3`)와 고객 관리형 키가 모두 목록에 표시됩니다. 고객 관리형 키에 대한 자세한 내용은 *AWS Key Management Service* 개발자 안내서의 [ 고객 키 및 AWS 키](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt)를 참조하세요.
        + KMS 키 ARN을 입력하려면 **AWS KMS key ARN 입력**을 선택한 다음 나타나는 필드에 KMS 키 ARN을 입력합니다.
        + AWS KMS 콘솔에서 고객 관리형 키를 생성하려면 **KMS 키 생성**을 선택합니다.

          AWS KMS key 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [키 생성](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)을 참조하십시오.
**중요**  
버킷과 동일한 AWS 리전에서 사용할 수 있는 KMS 키만 사용 가능합니다. Amazon S3 콘솔은 버킷과 동일한 리전에 있는 처음 100개의 KMS 키만 나열합니다. 목록에 없는 KMS 키를 사용하려면 KMS 키 ARN을 입력해야 합니다. 다른 계정에서 소유한 KMS 키를 사용하려면 먼저 해당 키에 대한 사용 권한이 있어야 하고, 다음 단계로 KMS 키 ARN을 입력해야 합니다.  
Amazon S3는 대칭 암호화 KMS 키만 지원하며 비대칭 KMS 키는 지원하지 않습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [대칭 및 비대칭 KMS 키 식별](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)을 참조하세요.

1. 추가 체크섬을 사용하려면 **켜기(On)**를 선택합니다. 그런 다음 **체크섬 함수(Checksum function)**에서 사용할 함수를 선택합니다. Amazon S3는 전체 객체를 수신한 후 체크섬 값을 계산하고 저장합니다. **미리 계산된 값(Precalculated value)** 상자를 사용하여 미리 계산된 값을 제공할 수 있습니다. 이렇게 하면 Amazon S3가 제공한 값과 계산한 값을 비교합니다. 두 값이 일치하지 않으면 Amazon S3가 오류를 생성합니다.

   추가 체크섬을 사용하면 데이터를 확인하는 데 사용할 체크섬 알고리즘을 지정할 수 있습니다. 추가 체크섬에 대한 자세한 내용은 [Amazon S3에서 객체 무결성 확인](checking-object-integrity.md) 단원을 참조하십시오.

1. 업로드 중인 모든 객체에 태그를 추가하려면 **태그 추가**를 선택합니다. **키** 필드에 태그 이름을 입력합니다. 태그 값을 입력합니다.

   객체 태그 지정을 통해 스토리지를 분류할 수 있습니다. 각 태그는 키-값 페어입니다. 키와 태그 값은 대/소문자를 구분합니다. 객체마다 태그를 10개까지 포함할 수 있습니다. 태그 키는 최대 128개 길이의 유니코드 문자이며, 태그 값은 최대 255개의 유니코드 문자입니다. 객체 태그에 대한 자세한 내용은 [태그를 사용하여 객체 분류](object-tagging.md) 섹션을 참조하세요.

1. 메타데이터를 추가하려면 **메타데이터 추가**를 선택합니다.

   1. **유형**에서 **시스템 정의** 또는 **사용자 정의**를 선택합니다.

      시스템 정의 메타데이터의 경우, **콘텐츠 유형** 및 **콘텐츠 처리** 같은 일반적인 HTTP 헤더를 선택할 수 있습니다. 시스템 정의 메타데이터 목록과 값 추가 가능 여부를 확인하려면 [시스템 정의 객체 메타데이터](UsingMetadata.md#SysMetadata) 단원을 참조하십시오. 접두사 `x-amz-meta-`로 시작하는 모든 메타데이터는 사용자 정의 메타데이터로 처리됩니다. 사용자 정의 메타데이터는 객체와 함께 저장되었다가 해당 객체를 다운로드할 때 반환됩니다. 키와 값 모두 US-ASCII 표준에 부합해야 합니다. 사용자 정의 메타데이터의 최대 크기는 2KB입니다. 시스템 정의 메타데이터와 사용자 정의 메타데이터에 대한 자세한 내용은 [객체 메타데이터 작업](UsingMetadata.md) 단원을 참조하십시오.

   1. **키**에 대해 키를 선택합니다.

   1. 키 값을 입력합니다.

1. 객체를 업로드하려면 **업로드**를 선택합니다.

   Amazon S3가 객체를 업로드합니다. 업로드가 완료되면 **업로드: 상태** 페이지에서 성공 메시지를 볼 수 있습니다.

1. **종료**를 선택합니다.

### AWS CLI 사용
<a name="UploadObjSingleOpCLI"></a>

`PUT` 요청을 보내 한 번의 작업으로 최대 5GB의 객체를 업로드할 수 있습니다. 자세한 내용은 *AWS CLI 명령 참조*의 [https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html#examples](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html#examples) 예시를 참조하십시오.

### REST API 사용
<a name="UploadObjSingleOpREST"></a>

객체를 업로드하기 위해 REST 요청을 보낼 수 있습니다. `PUT` 요청을 전송하여 단일 작업에서 데이터를 업로드할 수 있습니다. 자세한 내용은 [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 섹션을 참조하세요.

### AWS SDK 사용
<a name="UploadInSingleOp"></a>

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

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

## 동일한 키 이름을 가진 객체 업로드 방지
<a name="upload-objects-with-same-key-name"></a>

업로드 시 조건부 쓰기 작업을 사용하여 객체를 생성하기 전에 버킷에 객체가 있는지 확인할 수 있습니다. 이렇게 하면 기존 데이터의 덮어쓰기를 방지할 수 있습니다. 조건부 쓰기는 업로드하는 동안 버킷에 이미 같은 키 이름을 가진 기존 객체가 없는지 확인합니다.

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

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