

이제 Xamarin용 AWS Mobile SDK가에 포함됩니다 AWS SDK for .NET. 이 안내서에서는 Xamarin용 모바일 SDK의 아카이브된 버전을 참조합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon S3를 사용한 파일 저장 및 검색
<a name="getting-started-store-retrieve-s3-transferutility"></a>

Amazon Simple Storage Service(Amazon S3)는 모바일 개발자에 안전하고 내구성과 확장성이 뛰어난 객체 스토리지를 제공합니다. Amazon S3는 간단한 웹 서비스 인터페이스를 통해 웹 어디서나 원하는 양의 데이터를 저장 및 검색할 수 있으므로 사용하기가 쉽습니다.

다음 자습서에서는 S3를 사용하기 위한 상위 수준 유틸리티인 S3 TransferUtility를 앱에 통합하는 방법을 설명합니다. Xamarin 애플리케이션에서 S3을 사용하는 방법에 대한 자세한 내용은 [Amazon Simple Storage Service(S3)](s3.md)를 참조하세요.

## 프로젝트 설정
<a name="project-setup"></a>

### 사전 조건
<a name="prerequisites"></a>

이 자습서를 시작하기 전에 [.NET 및 Xamarin용 AWS Mobile SDK 설정](setup.md)의 지침을 모두 완료해야 합니다.

또한 이 자습서에서는 이미 S3 버킷을 생성한 것으로 가정합니다. S3 버킷을 생성하려면 [S3 AWS 콘솔](https://console.aws.amazon.com/s3/home)로 이동하세요.

### S3에 대한 권한 설정
<a name="set-permissions-for-s3"></a>

기본 IAM 역할 정책은 애플리케이션에 Amazon Mobile Analytics 및 Amazon Cognito Sync에 대한 액세스 권한을 부여합니다. Cognito 자격 증명 풀이 Amazon S3에 액세스할 수 있으려면 자격 증명 풀의 역할을 수정해야 합니다.

1. [Identity and Access Management 콘솔](https://console.aws.amazon.com/iam/home)로 이동하여 왼쪽 창에서 **역할**을 클릭합니다.

1. 검색 상자에 자격 증명 풀 이름을 입력합니다. 인증된 사용자와 인증되지 않은 사용자에 대해 하나씩 2개의 역할이 나열됩니다.

1. 인증되지 않은 사용자의 역할을 클릭합니다(자격 증명 풀 이름에 unauth가 추가됨).

1. **역할 정책 생성**을 클릭하고 **정책 생성기**를 선택한 다음 **선택**을 클릭합니다.

1. **권한 편집** 페이지에서 다음 이미지에 표시된 설정을 입력합니다. Amazon 리소스 이름(ARN)은 사용자의 것으로 바꿔야 합니다. S3 버킷의 ARN은 `arn:aws:s3:::examplebucket/*`과 비슷하며, 버킷이 위치하는 리전과 버킷의 이름으로 구성됩니다. 아래 표시된 설정은 자격 증명 풀에 지정된 버킷의 모든 작업에 대한 전체 액세스를 부여합니다.  
![\[Edit Permissions interface for AWS policy creation, showing options for Amazon S3 access control.\]](http://docs.aws.amazon.com/ko_kr/mobile/sdkforxamarin/developerguide/images/edit-permissions.png)

1. **설명문 추가** 버튼을 클릭한 다음 **다음 단계**를 클릭합니다.

1. 마법사가 앞서 생성한 구성을 표시합니다. **정책 적용**을 클릭합니다.

S3 액세스 권한 부여에 대한 자세한 내용은 [Amazon S3 버킷에 대한 액세스 권한 부여](http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket)를 참조하세요.

### 프로젝트에 S3용 NuGet 패키지 추가
<a name="add-nuget-package-for-s3-to-your-project"></a>

[.NET 및 Xamarin용 AWS Mobile SDK 설정](setup.md) 내 지침의 4단계를 따라 S3 NuGet 패키지를 프로젝트에 추가합니다.

### (선택 사항) S3 요청의 서명 버전을 구성합니다.
<a name="optional-configure-the-signature-version-for-s3-requests"></a>

Amazon S3와의 모든 상호 작용은 인증을 거치거나 익명으로 할 수 있습니다. AWS는 서명 버전 4 또는 서명 버전 2 알고리즘을 사용해 서비스를 직접적으로 호출하는 것을 인증합니다.

2014년 1월 이후 생성된 모든 새 AWS 리전은 서명 버전 4만 지원합니다. 하지만 그 이전의 리전은 계속해서 서명 버전 4 및 서명 버전 2 요청을 지원합니다.

버킷이 [이 페이지](https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html)에 나열된 서명 버전 2 요청을 지원하지 않는 리전에 위치하는 경우 다음과 같이 AWSConfigsS3.UseSignatureVersion4 속성을 "true"로 설정해야 합니다.

```
AWSConfigsS3.UseSignatureVersion4 = true;
```

AWS 서명 버전에 대한 자세한 내용은 [요청 인증(AWS 서명 버전 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)을 참조하세요.

## S3 TransferUtility 클라이언트 초기화
<a name="initialize-the-s3-transferutility-client"></a>

다음과 같이 S3 클라이언트를 생성하여 AWS 자격 증명 객체를 전달한 다음 S3 클라이언트를 TransferUtility로 전달합니다.

```
var s3Client = new AmazonS3Client(credentials,region);
var transferUtility = new TransferUtility(s3Client);
```

## Amazon S3로 파일 업로드
<a name="upload-a-file-to-amazon-s3"></a>

S3로 파일을 업로드하려면 Transfer Utility 객체에서 `Upload`를 호출하여 다음 파라미터를 전달합니다.
+  `file` - 업로드할 파일의 문자열 이름
+  `bucketName` - 파일을 저장할 S3 버킷의 문자열 이름

```
transferUtility.Upload(
  Path.Combine(Environment.SpecialFolder.ApplicationData,"file"),
  "bucketName"
);
```

위 코드는 Environment.SpecialFolder.ApplicationData 디렉터리에 파일이 있다고 가정합니다. 업로드는 처리량을 높이기 위해 대용량 파일에서 자동으로 S3의 멀티파트 업로드 기능을 사용합니다.

## Amazon S3에서 파일 다운로드
<a name="download-a-file-from-amazon-s3"></a>

S3에서 파일을 다운로드하려면 Transfer Utility 객체에서 `Download`를 호출하여 다음 파라미터를 전달합니다.
+  `file` - 다운로드할 파일의 문자열 이름
+  `bucketName` - 다운로드할 파일이 저장된 S3 버킷의 문자열 이름
+  `key` - 다운로드할 S3 객체(이 경우에는 파일)의 이름을 표시하는 문자열

```
transferUtility.Download(
  Path.Combine(Environment.SpecialFolder.ApplicationData,"file"),
  "bucketName",
  "key"
);
```

Xamarin 애플리케이션에서 Amazon S3에 액세스하는 방법에 대한 자세한 내용은 [Amazon Simple Storage Service(S3)](s3.md)를 참조하세요.