

# S3 Transfer Acceleration 사용 설정 및 사용
<a name="transfer-acceleration-examples"></a>

Amazon S3 Transfer Acceleration을 사용하여 클라이언트와 S3 범용 버킷 간의 장거리 파일 전송을 빠르고 안전하게 수행할 수 있습니다. S3 콘솔, AWS Command Line Interface(AWS CLI), API 또는 AWS SDK를 사용하여 Transfer Acceleration을 사용할 수 있습니다.

이 섹션에서는 버킷에서 Amazon S3 Transfer Acceleration을 설정하는 방법과 설정된 버킷에 대해 가속 엔드포인트를 사용하는 방법의 예를 설명합니다.

Transfer Acceleration 요구 사항에 대한 자세한 내용은 [Amazon S3 Transfer Acceleration을 사용하여 빠르고 안전한 파일 전송 구성](transfer-acceleration.md) 섹션을 참조하세요.

## S3 콘솔 사용
<a name="enable-transfer-acceleration"></a>

**참고**  
가속화된 업로드 속도와 가속화되지 않은 업로드 속도를 비교하려면 [ Amazon S3 Transfer Acceleration 속도 비교 도구](https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html)를 엽니다.  
이 속도 비교 도구는 멀티파트 업로드를 통해 Amazon S3 Transfer Acceleration을 사용하거나 사용하지 않으면서 브라우저에서 여러 AWS 리전으로 파일을 전송합니다. 직접 업로드의 업로드 속도를 비교하고 리전별로 가속화된 업로드를 전송할 수 있습니다.

**S3 범용 버킷에 전송 가속화를 활성화하는 방법**

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

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

1. **범용 버킷** 목록에서 전송 가속화를 활성화하려는 버킷의 이름을 선택합니다.

1. [**속성(Properties)**]을 선택합니다.

1. **Transfer Acceleration**에서 **편집(Edit)**을 선택합니다.

1. **사용 설정**를 선택하고 **변경 사항 저장**을 선택합니다.

**가속화된 데이터 전송에 액세스**

1. Amazon S3의 버킷에 Transfer Acceleration을 사용 설정한 후 버킷의 [**속성(Properties)**] 탭을 확인합니다.

1. **Transfer Acceleration**에서 **가속 엔드포인트(Accelerated endpoint)**는 버킷의 Transfer Acceleration 엔드포인트를 표시합니다. 이 엔드포인트를 사용하여 버킷과 주고받을 때 가속화된 데이터 전송에 액세스할 수 있습니다.

   Transfer Acceleration을 중지하면 가속 엔드포인트는 더 이상 작동하지 않습니다.

## AWS CLI 사용
<a name="transfer-acceleration-examples-aws-cli"></a>

다음은 Transfer Acceleration에 사용되는 AWS CLI 명령의 예입니다. AWS CLI 설정에 대한 지침은 *Amazon S3 API 참조*의 [AWS CLI를 사용하여 Amazon S3에서 개발](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)을 참조하세요.

### 버킷에서 Transfer Acceleration 사용 설정
<a name="transfer-acceleration-examples-aws-cli-1"></a>

AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-accelerate-configuration.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-accelerate-configuration.html) 명령을 사용하여 버킷에서 Transfer Acceleration을 활성화하거나 일시 중지합니다.

다음은 `amzn-s3-demo-bucket`이라는 버킷에서 Transfer Acceleration을 활성화하기 위해 `Status=Enabled`를 설정하는 예제입니다. Transfer Acceleration을 일시 중지하려면 `Status=Suspended`를 사용합니다.

**Example**  

```
$ aws s3api put-bucket-accelerate-configuration --bucket amzn-s3-demo-bucket --accelerate-configuration Status=Enabled
```

### Transfer Acceleration 활성화
<a name="transfer-acceleration-examples-aws-cli-2"></a>

`s3` 및 `s3api` AWS CLI 명령으로 구성된 모든 Amazon S3 요청을 가속 엔드포인트 `s3-accelerate.amazonaws.com`으로 보낼 수 있습니다. 이렇게 하려면 AWS Config 파일의 프로파일에서 구성 값 `use_accelerate_endpoint`를 `true`로 설정합니다. 가속 엔드포인트를 사용하려면 버킷에서 Transfer Acceleration을 사용하도록 설정해야 합니다.

모든 요청은 가상의 버킷 주소 지정 방식(`amzn-s3-demo-bucket.s3-accelerate.amazonaws.com`)을 사용하여 전송됩니다. `ListBuckets`, `CreateBucket` 및 `DeleteBucket` 요청은 엔드포인트에서 이러한 작업을 지원하지 않으므로 가속 엔드포인트로 전송되지 않습니다.

`use_accelerate_endpoint`에 대한 자세한 내용은 *AWS CLI 명령 참조*의 [AWS CLI S3 구성](https://docs.aws.amazon.com/cli/latest/topic/s3-config.html)을 참조하세요.

다음 예는 기본 프로파일에서 `use_accelerate_endpoint`를 `true`로 설정합니다.

**Example**  

```
$ aws configure set default.s3.use_accelerate_endpoint true
```

일부 AWS CLI 명령에는 가속 엔드포인트를 사용하고 다른 명령에는 사용하지 않으려면 다음 방법 중 하나를 사용합니다.
+ `--endpoint-url` 파라미터를 `https://s3-accelerate.amazonaws.com`으로 설정하여 `s3` 또는 `s3api` 명령에 가속 엔드포인트를 사용합니다.
+ AWS Config 파일에 별도의 프로파일을 설정합니다. 예를 들어, `use_accelerate_endpoint`를 `true`로 설정하는 프로파일을 하나 작성하고, `use_accelerate_endpoint`를 설정하지 않는 프로파일을 하나 작성합니다. 명령을 실행할 때 가속 엔드포인트를 사용할지 여부에 따라 사용하려는 프로파일을 지정합니다.

### Transfer Acceleration이 사용 설정된 버킷에 객체 업로드
<a name="transfer-acceleration-examples-aws-cli-3"></a>

다음은 가속 엔드포인트를 사용하도록 구성된 기본 프로파일을 사용하여 Transfer Acceleration이 설정된 `amzn-s3-demo-bucket`이라는 버킷에 파일을 업로드하는 예제입니다.

**Example**  

```
$ aws s3 cp file.txt s3://amzn-s3-demo-bucket/key-name --region region
```

다음은 `--endpoint-url` 파라미터를 사용하여 가속 엔드포인트를 지정함으로써 Transfer Acceleration이 설정된 버킷에 파일을 업로드하는 예제입니다.

**Example**  

```
$ aws configure set s3.addressing_style virtual
$ aws s3 cp file.txt s3://amzn-s3-demo-bucket/key-name --region region --endpoint-url https://s3-accelerate.amazonaws.com
```

## AWS SDK 사용
<a name="transfer-acceleration-examples-sdk"></a>

다음은 Transfer Acceleration을 사용하여 AWS SDK를 통해 Amazon S3에 객체를 업로드하는 예제입니다. 일부 AWS SDK 지원 언어(예: Java, .NET)는 가속 엔드포인트 클라이언트 구성 플래그를 사용하므로, Transfer Acceleration의 엔드포인트를 `bucket-name.s3-accelerate.amazonaws.com`으로 명시적으로 설정할 필요가 없습니다.

------
#### [ Java ]

AWS SDK for Java를 통해 가속 엔드포인트를 사용하여 Amazon S3에 객체를 업로드하려면 다음을 수행할 수 있습니다.
+ 가속 엔드포인트를 사용하도록 구성된 S3Client를 만듭니다. 클라이언트가 액세스하는 모든 버킷에 Transfer Acceleration이 사용 설정되어 있어야 합니다.
+ 지정된 버킷에 대해 Transfer Acceleration을 활성화합니다. 이 단계는 지정한 버킷에 아직 Transfer Acceleration이 설정되지 않은 경우에만 필요합니다.
+ 지정된 버킷에 대해 Transfer Acceleration이 활성화되어 있는지 확인합니다.
+ 버킷의 가속 엔드포인트를 사용하여 지정된 버킷에 새 객체를 업로드합니다.

Transfer Acceleration 사용에 대한 자세한 내용은 [Amazon S3 Transfer Acceleration 시작하기](transfer-acceleration-getting-started.md) 섹션을 참조하세요.

다음 코드 예제에서는 AWS SDK for Java를 사용하여 Transfer Acceleration을 구성하는 방법을 보여줍니다.

```
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.BucketAccelerateStatus;
import software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.AccelerateConfiguration;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.core.exception.SdkClientException;

public class TransferAcceleration {
    public static void main(String[] args) {
        Region clientRegion = Region.US_EAST_1;
        String bucketName = "*** Provide bucket name ***";
        String keyName = "*** Provide key name ***";

        try {
            // Create an Amazon S3 client that is configured to use the accelerate endpoint.
            S3Client s3Client = S3Client.builder()
                    .region(clientRegion)
                    .credentialsProvider(ProfileCredentialsProvider.create())
                    .accelerate(true)
                    .build();

            // Enable Transfer Acceleration for the specified bucket.
            s3Client.putBucketAccelerateConfiguration(
                    PutBucketAccelerateConfigurationRequest.builder()
                            .bucket(bucketName)
                            .accelerateConfiguration(AccelerateConfiguration.builder()
                                    .status(BucketAccelerateStatus.ENABLED)
                                    .build())
                            .build());

            // Verify that transfer acceleration is enabled for the bucket.
            String accelerateStatus = s3Client.getBucketAccelerateConfiguration(
                    GetBucketAccelerateConfigurationRequest.builder()
                            .bucket(bucketName)
                            .build())
                    .status().toString();
            System.out.println("Bucket accelerate status: " + accelerateStatus);

            // Upload a new object using the accelerate endpoint.
            s3Client.putObject(PutObjectRequest.builder()
                            .bucket(bucketName)
                            .key(keyName)
                            .build(),
                    RequestBody.fromString("Test object for transfer acceleration"));
            System.out.println("Object \"" + keyName + "\" uploaded with transfer acceleration.");
        } catch (S3Exception e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

다음 예제에서는 AWS SDK for .NET를 사용하여 버킷에서 Transfer Acceleration을 사용하는 방법을 보여 줍니다. 코드 예제 설정 및 실행에 대한 자세한 내용은 **AWS SDK for .NET 개발자 안내서의 [AWS SDK for .NET 시작하기](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)를 참조하세요.

**Example**  

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class TransferAccelerationTest
    {
        private const string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;
        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            EnableAccelerationAsync().Wait();
        }

        static async Task EnableAccelerationAsync()
        {
                try
                {
                    var putRequest = new PutBucketAccelerateConfigurationRequest
                    {
                        BucketName = bucketName,
                        AccelerateConfiguration = new AccelerateConfiguration
                        {
                            Status = BucketAccelerateStatus.Enabled
                        }
                    };
                    await s3Client.PutBucketAccelerateConfigurationAsync(putRequest);

                    var getRequest = new GetBucketAccelerateConfigurationRequest
                    {
                        BucketName = bucketName
                    };
                    var response = await s3Client.GetBucketAccelerateConfigurationAsync(getRequest);

                    Console.WriteLine("Acceleration state = '{0}' ", response.Status);
                }
                catch (AmazonS3Exception amazonS3Exception)
                {
                    Console.WriteLine(
                        "Error occurred. Message:'{0}' when setting transfer acceleration",
                        amazonS3Exception.Message);
                }
        }
    }
}
```

Transfer Acceleration이 사용 설정된 버킷에 객체를 업로드하는 경우 클라이언트를 생성할 때 가속 엔드포인트 사용을 지정합니다.



```
var client = new AmazonS3Client(new AmazonS3Config
            {
                RegionEndpoint = TestRegionEndpoint,
                UseAccelerateEndpoint = true
            }
```

------
#### [ JavaScript ]

AWS SDK for JavaScript를 사용하여 Transfer Acceleration을 활성화하는 예제는 *AWS SDK for JavaScript API 참조*의 [PutBucketAccelerateConfiguration 명령](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/PutBucketAccelerateConfigurationCommand/)을 참조하세요.

------
#### [ Python(Boto) ]

SDK for Python을 사용하여 Transfer Acceleration을 활성화하는 예제는 *AWS SDK for Python(Boto3) API 참조*의 [put\$1bucket\$1accelerate\$1configuration](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.put_bucket_accelerate_configuration) 섹션을 참조하세요.

------
#### [ Other ]

다른 AWS SDK 사용에 대한 자세한 내용은 [샘플 코드 및 라이브러리](https://aws.amazon.com/code/)를 참조하세요.

------

## REST API 사용
<a name="transfer-acceleration-examples-api"></a>

REST API `PutBucketAccelerateConfiguration` 작업을 사용하여 기존 버킷에서 구성을 가속화할 수 있습니다.

자세한 내용은 *Amazon Simple Storage Service API 참조*의 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html)를 참조하십시오.