

# 개체 구성, 나열 및 작업
<a name="organizing-objects"></a>

Amazon S3에서는 접두사를 사용하여 스토리지를 구성할 수 있습니다. 접두사는 버킷에 있는 객체를 논리적으로 그룹화한 것입니다. 비슷한 데이터를 버킷의 동일한 디렉터리에 저장할 수 있도록 접두사 값은 디렉터리 이름과 비슷합니다. 프로그래밍 방식으로 객체를 업로드하는 경우 접두사를 사용하여 데이터를 구성할 수 있습니다.

Amazon S3 콘솔에서는 접두사를 폴더라고 합니다. S3 콘솔에서 버킷으로 이동하여 모든 객체와 폴더를 볼 수 있습니다. 또한 객체 속성과 같은 각 객체에 대한 정보를 볼 수 있습니다.

Amazon S3에서 데이터를 나열하고 구성하는 방법에 대한 자세한 내용은 다음 주제를 참조하십시오.

**Topics**
+ [접두어를 사용한 객체 구성](using-prefixes.md)
+ [프로그래밍 방식으로 객체 키 나열](ListingKeysUsingAPIs.md)
+ [Amazon S3 콘솔에서 폴더를 사용하여 객체 구성](using-folders.md)
+ [Amazon S3 콘솔에서 객체 속성 보기](view-object-properties.md)
+ [태그를 사용하여 객체 분류](object-tagging.md)

# 접두어를 사용한 객체 구성
<a name="using-prefixes"></a>

접두사를 사용하여 Amazon S3 버킷에 저장할 데이터를 구성할 수 있습니다. 접두사는 객체 키 이름의 시작 부분에 있는 문자열입니다. 접두사는 임의의 길이일 수 있지만 객체 키 이름의 최대 길이(1,024바이트)를 초과할 수 없습니다. 접두사를 디렉터리와 비슷한 방식으로 데이터를 구성하는 방법으로 생각할 수 있습니다. 그러나 접두사는 디렉터리가 아닙니다.

접두사로 검색하면 지정된 접두사로 시작하는 키로 결과가 제한됩니다. 구분 기호를 사용하면 목록 작업이 공통 접두사를 공유하는 모든 키를 단일 요약 목록 결과로 롤업합니다.

접두사와 구분 기호 파라미터의 목적은 키를 계층적 구조로 정렬하여 탐색할 수 있도록 하는 것입니다. 그러려면 먼저 슬래시(/)와 같이 버킷에서 키 이름에는 사용되지 않을 구분 기호를 선택합니다. 다른 문자를 구분 기호로 사용할 수 있습니다. 슬래시(/) 문자에 특별한 점은 없지만 매우 일반적인 접두사 구분 기호입니다. 그런 다음 각 계층을 구분 기호로 분리하여 각 수준별로 모든 계층이 포함된 키 이름을 구성합니다.

예를 들어, 도시에 대한 정보를 저장할 경우 대륙, 국가 및 주를 기준으로 도시를 구성할 것입니다. 이러한 이름에는 보통 문장 부호가 사용되지 않으므로 슬래시(/)를 구분 기호로 선택할 수 있습니다. 다음 예제는 슬래시(/) 구분 기호의 사용 방법을 보여줍니다.
+ 유럽/프랑스/누벨아키텐/보르도
+ 북미/캐나다/퀘벡/몬트리올
+ 북미/미국/워싱턴/벨뷰
+ 북미/미국/워싱턴/시애틀

이런 식으로 전세계의 모든 도시를 저장한 경우 계층 구분 없이 각 키 네임스페이스를 일괄 관리하기에는 많은 어려움이 있을 것입니다. 나열 작업에 `Prefix` 및 `Delimiter`를 사용하면 앞서 만든 계층 구조를 사용하여 데이터를 나열할 수 있습니다. 예를 들어, 미국의 모든 주를 나열하려면 `Delimiter='/'` 및 `Prefix='North America/USA/'`를 설정합니다. 데이터가 저장된 캐나다의 모든 지방을 나열하려면 `Delimiter='/'` 및 `Prefix='North America/Canada/'`를 설정합니다.

구분자, 접두사 및 중첩 폴더에 대한 자세한 내용은 [접두사와 중첩 폴더의 차이](https://repost.aws/knowledge-center/s3-prefix-nested-folders-difference)를 참조하십시오.

## 접두사 및 구분 기호를 사용한 객체 나열
<a name="prefixes-list-example"></a>

구분 기호를 사용한 나열 요청을 실행하는 경우 각 수준별로 계층 구조를 탐색할 수 있어 하위 수준의 수백만 키를 건너뛸 수 있습니다. 예를 들어 다음 키가 있는 버킷(*amzn-s3-demo-bucket*)이 있다고 가정합니다.

`sample.jpg` 

`photos/2006/January/sample.jpg` 

`photos/2006/February/sample2.jpg` 

`photos/2006/February/sample3.jpg` 

`photos/2006/February/sample4.jpg` 

이 예제 버킷에서 루트 수준에는 `sample.jpg` 객체만 있습니다. 버킷의 루트 수준 객체만 나열하려면 슬래시(`/`) 구분 기호 문자만 사용하여 버킷에 대해 GET 요청을 보냅니다. 그 응답으로 Amazon S3는 `/` 구분 기호 문자가 포함되지 않은 `sample.jpg` 객체 키를 반환합니다. 그 외 모든 키에는 구분 기호 문자가 포함되어 있습니다. Amazon S3는 이러한 키를 그룹화하여 `CommonPrefixes` 접두사 값을 가진 단일 `photos/` 요소를 반환합니다. 이는 해당 키의 시작 부분부터 지정된 구분 기호의 첫 번째 발생 지점까지의 범위에서 가져온 하위 문자열입니다.

**Example**  

```
 1. <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
 2.   <Name>amzn-s3-demo-bucket</Name>
 3.   <Prefix></Prefix>
 4.   <Marker></Marker>
 5.   <MaxKeys>1000</MaxKeys>
 6.   <Delimiter>/</Delimiter>
 7.   <IsTruncated>false</IsTruncated>
 8.   <Contents>
 9.     <Key>sample.jpg</Key>
10.     <LastModified>2011-07-24T19:39:30.000Z</LastModified>
11.     <ETag>&quot;d1a7fb5eab1c16cb4f7cf341cf188c3d&quot;</ETag>
12.     <Size>6</Size>
13.     <Owner>
14.       <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
15.     </Owner>
16.     <StorageClass>STANDARD</StorageClass>
17.   </Contents>
18.   <CommonPrefixes>
19.     <Prefix>photos/</Prefix>
20.   </CommonPrefixes>
21. </ListBucketResult>
```

프로그래밍 방식으로 객체 키를 나열하는 방법에 대한 자세한 내용은 [프로그래밍 방식으로 객체 키 나열](ListingKeysUsingAPIs.md) 섹션을 참조하십시오.

# 프로그래밍 방식으로 객체 키 나열
<a name="ListingKeysUsingAPIs"></a>

Amazon S3에서는 접두사별로 키를 나열할 수 있습니다. 관련 키 이름에 대한 공통 접두사를 선택하고 계층 구조를 구분하는 특수 문자로 이러한 키를 표시할 수 있습니다. 그런 다음 나열 작업을 사용하여 계층적으로 키를 선택하고 찾아볼 수 있습니다. 이는 파일 시스템 내 각 디렉토리에 파일이 저장되는 방식과 유사합니다.

Amazon S3는 버킷에 포함된 키를 열거할 수 있는 나열 작업을 제공합니다. 버킷과 접두사를 기준으로 키를 선택하여 나열할 수 있습니다. 예를 들어 모든 영어 단어에 대한 키가 포함된 "`dictionary`"라는 이름의 버킷을 가정해 보겠습니다. 버킷에서 "q"로 시작하는 모든 키를 나열하도록 요청할 수 있습니다. 나열 결과는 항상 UTF-8 이진 순서로 반환됩니다.

 SOAP 및 REST 나열 작업은 모두 일치하는 키의 이름과 각 키에 의해 식별되는 객체에 대한 정보가 포함된 XML 문서를 반환합니다.

**참고**  
 Amazon S3용 SOAP API는 신규 고객에게 제공되지 않으며 2025년 8월 31일에 서비스 종료(EOL)됩니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

특수 구분 기호로 끝나는 접두사를 공유하는 키의 그룹은 나열의 목적을 위해 공통 접두사별로 분류할 수 있습니다. 이를 통해 애플리케이션은 파일 시스템에서 디렉토리별로 파일을 정렬하는 것과 유사한 방식으로 계층적 구조에 따라 키를 정렬하고 탐색할 수 있습니다.

예를 들어 영어 외 다른 언어의 단어도 포함하도록 dictionary 버킷을 확장하려면 그 언어와 구분 기호(예: "`French/logical`")를 사용하여 각 단어에 접두사를 추가하여 키를 만들 것입니다. 이 명명 스키마와 계층적 나열 기능을 사용하여 프랑스어 단어의 목록만 검색할 수 있습니다. 또한 사전에 등재된 모든 단어에 대한 키를 살펴볼 필요 없이 최상위 수준에서 해당 단어의 목록만 탐색할 수 있습니다. 이 나열 기능에 대한 자세한 내용은 [접두어를 사용한 객체 구성](using-prefixes.md) 섹션을 참조하십시오.

**REST API**  
애플리케이션에서 요구할 경우 REST 요청을 직접 전송할 수 있습니다. GET 요청을 전송하여 버킷의 일부 또는 전체 객체를 반환하거나, 선택 조건을 사용하여 버킷의 일부 객체를 반환할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service API 참조*의 [GET Bucket(List Objects) 버전 2](https://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html)를 참조하십시오.

**효율적인 나열 기능 구현**  
나열 기능의 성능은 버킷의 총 키 수에 크게 영향을 받지 않습니다. 또한 `prefix`, `marker`, `maxkeys` 또는 `delimiter` 인수의 유무에도 영향을 받지 않습니다.

**여러 페이지의 결과 살펴보기**  
버킷에 포함할 수 있는 키는 거의 무제한이므로 나열 쿼리의 전체 결과는 매우 방대할 수 있습니다. 이처럼 대량의 결과 조합을 관리하기 위해 Amazon S3 API는 그 조합을 여러 개의 응답으로 나눌 수 있도록 페이지 매김을 지원합니다. 각 나열 키 응답은 최대 1,000개의 키로 구성된 페이지와 함께 응답이 잘린 경우 이를 나타내는 표시 기호를 반환합니다. 모든 키가 수신될 때까지 나열 키 요청을 반복해서 전송해야 합니다. AWS SDK 래퍼 라이브러리는 동일한 페이지 매김을 제공합니다.

## 예제
<a name="ListingKeysUsingAPIs_examples"></a>

버킷의 모든 객체를 나열할 때는 `s3:ListBucket` 권한이 있어야 한다는 점에 유의하십시오.

------
#### [ CLI ]

**객체 나열**  
다음 예시에서는 `list-objects` 명령을 사용하여 지정된 버킷에 있는 모든 객체의 이름을 표시합니다.  

```
aws s3api list-objects --bucket text-content --query 'Contents[].{Key: Key, Size: Size}'
```
이 예시에서는 `--query` 인수를 사용하여 `list-objects`의 출력을 각 객체의 키 값 및 크기로 필터링합니다.  
객체에 대한 자세한 내용은 [Amazon S3의 객체 작업](uploading-downloading-objects.md) 섹션을 참조하세요.  
+  API 세부 정보는 *AWS CLI 명령 참조*의 [ListObjects](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-objects.html)를 참조하세요.

**ls**  
다음 예제에서는 `ls` 명령을 사용하여 버킷에 있는 모든 객체와 접두사를 나열합니다.  
이 예제 명령을 사용하려면 **amzn-s3-demo-bucket**을 버킷의 이름으로 바꿉니다.  

```
$ aws s3 ls s3://amzn-s3-demo-bucket
```
+  상위 수준 명령 `ls`에 대한 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [버킷 및 객체 나열](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-listing-buckets) 섹션을 참조하세요.

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**예시 1: 이 명령은 “test-files” 버킷에 있는 모든 항목에 대한 정보를 검색합니다.**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket
```
**예시 2: 이 명령은 "test-files" 버킷에서 "sample.txt" 항목에 대한 정보를 검색합니다.**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -Key sample.txt
```
**예시 3: 이 명령은 “test-files” 버킷에서 접두사가 “sample”인 모든 항목에 대한 정보를 검색합니다.**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix sample
```
+  API 세부 정보는 *AWS Tools for PowerShell Cmdlet 참조(V4)*의 [ListObjects](https://docs.aws.amazon.com/powershell/v4/reference)를 참조하세요.

**Tools for PowerShell V5**  
**예시 1: 이 명령은 “test-files” 버킷에 있는 모든 항목에 대한 정보를 검색합니다.**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket
```
**예시 2: 이 명령은 "test-files" 버킷에서 "sample.txt" 항목에 대한 정보를 검색합니다.**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -Key sample.txt
```
**예시 3: 이 명령은 “test-files” 버킷에서 접두사가 “sample”인 모든 항목에 대한 정보를 검색합니다.**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix sample
```
+  API 세부 정보는 *AWS Tools for PowerShell Cmdlet Reference (V5)*의 [ListObjects](https://docs.aws.amazon.com/powershell/v5/reference)를 참조하세요.

------

# Amazon S3 콘솔에서 폴더를 사용하여 객체 구성
<a name="using-folders"></a>

Amazon S3 범용 버킷에서 객체는 기본 리소스이며 객체는 버킷에 저장됩니다. Amazon S3 범용 버킷은 파일 시스템에서와 같이 계층 대신 단순한 구조를 가지고 있습니다. 하지만 간결한 구성을 위해 Amazon S3 콘솔에서는 객체를 그룹화하는 수단으로 *폴더* 개념을 지원합니다. 콘솔은 그룹화된 객체에 공유 이름 *접두사*를 사용하여 이 작업을 수행합니다. 즉, 그룹화된 객체는 공통 문자열로 시작하는 이름을 갖습니다. 이 공통 문자열 또는 공유 접두사는 폴더 이름입니다. 객체 이름을 *키 이름*이라고도 합니다.

예를 들어 콘솔에서 범용 버킷 안에 `photos`라는 폴더를 만들고 그 안에 `myphoto.jpg`라는 객체를 저장할 수 있습니다. 그러면 객체가 키 이름 `photos/myphoto.jpg`와 함께 저장됩니다. 여기서 `photos/`는 접두사입니다.

아래에 두 가지 예가 더 있습니다.
+ 범용 버킷에 세 개의 객체(`logs/date1.txt`, `logs/date2.txt` 및 `logs/date3.txt`)가 있다면 콘솔은 `logs`라는 폴더를 표시합니다. 콘솔에서 폴더를 열면 세 객체 `date1.txt`, `date2.txt` 및 `date3.txt`가 표시됩니다.
+ `photos/2017/example.jpg`라는 객체가 있는 경우 콘솔에는 `2017` 폴더가 포함된 `photos` 폴더가 표시됩니다. `2017` 폴더에는 `example.jpg` 객체가 포함되어 있습니다.

폴더 안에 폴더를 만들 수 있지만 버킷 안에 버킷을 만들 수는 없습니다. 객체를 폴더로 직접 업로드 또는 복사할 수 있습니다. 폴더를 생성하고 삭제하고 퍼블릭으로 만들 수 있지만 폴더 이름을 바꿀 수는 없습니다. 객체를 다른 폴더로 복사할 수 있습니다.

**중요**  
Amazon S3 콘솔에서 폴더를 생성하면 S3가 0바이트 객체를 생성합니다. 이 객체 키는 제공한 폴더 이름에 후행 슬래시(`/`) 문자가 추가되어 설정됩니다. 예를 들어 Amazon S3 콘솔에서 버킷에 `photos`라는 폴더를 만드는 경우 Amazon S3 콘솔이 `photos/` 키를 사용하여 0바이트 객체를 생성합니다. 콘솔은 폴더에 대한 아이디어를 지원하기 위해 이 객체를 만듭니다.  
또한 이름에 후행 슬래시 문자(`/`)가 포함된 기존 객체는 Amazon S3 콘솔에 폴더로 표시됩니다. 예를 들어 키 이름이 `examplekeyname/`인 객체는 Amazon S3 콘솔에서 객체가 아닌 폴더로 표시됩니다. 그렇지 않으면 다른 객체처럼 동작하며 AWS Command Line Interface(AWS CLI), AWS SDK 또는 REST API를 통해 볼 수 있고 조작도 할 수 있습니다. 또한 Amazon S3 콘솔을 사용하여 키 이름에 후행 슬래시(`/`) 문자가 포함된 객체를 업로드할 수 없습니다. 이름에 후행 슬래시(`/`) 문자가 포함된 객체는 AWS Command Line Interface(AWS CLI), AWS SDK 또는 REST API를 사용하여 업로드할 수 있습니다.  
또한 Amazon S3 콘솔에는 다른 객체와는 달리 폴더 객체의 콘텐츠와 메타데이터가 표시되지 않습니다. 콘솔을 사용하여 이름에 후행 슬래시(`/`) 문자가 포함된 객체를 복사할 경우 대상 위치에 새 폴더가 생성되지만 객체의 데이터와 메타데이터는 복사되지 않습니다. 또한 객체 키 이름에 슬래시(`/`)를 사용하려면 특별한 처리가 필요할 수 있습니다. 자세한 내용은 [Amazon S3 객체 이름 지정](object-keys.md) 섹션을 참조하세요.

디렉터리 버킷에서 폴더를 생성하려면 폴더를 업로드합니다. 자세한 내용은 [디렉터리 버킷에 객체 업로드](directory-buckets-objects-upload.md) 섹션을 참조하세요.

**Topics**
+ [폴더 생성](#create-folder)
+ [퍼블릭 폴더 설정](#public-folders)
+ [폴더 크기 계산](#calculate-folder)
+ [폴더 삭제](#delete-folders)

## 폴더 생성
<a name="create-folder"></a>

이 섹션에서는 Amazon S3 콘솔을 사용하여 폴더를 만드는 방법을 설명합니다.

**중요**  
버킷 정책에서 태그, 메타데이터 또는 액세스 제어 목록(ACL) 권한 부여자없이 이 버킷에 객체를 업로드할 수 없도록 하는 경우에는 다음 절차를 사용하여 폴더를 만들 수 없습니다. 그 대신 빈 폴더를 업로드하고 업로드 구성에서 다음 설정을 지정합니다.

**폴더 생성**

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

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

1. 버킷 목록에서 폴더를 만들 버킷의 이름을 선택합니다.

1. **객체** 탭에서 **폴더 생성**을 선택합니다.

1. 폴더의 이름을 입력합니다(예: **favorite-pics**).
**참고**  
폴더 이름에는 특정 제한 사항과 지침이 적용되며, 1,024바이트로 제한되는 객체의 객체 키 이름의 일부로 간주됩니다. 자세한 내용은 [Amazon S3 객체 이름 지정](object-keys.md) 섹션을 참조하세요.

1. (선택 사항) 버킷 정책에 따라 특정 암호화 키로 객체를 암호화해야 하는 경우 **서버 측 암호화**에서 **암호화 키 지정**을 선택하고 폴더를 생성할 때 동일한 암호화 키를 지정해야 합니다. 동일한 암호화 키를 지정하지 않으면 폴더 생성이 실패합니다.

1. **폴더 생성**을 선택합니다.

## 퍼블릭 폴더 설정
<a name="public-folders"></a>

퍼블릭 폴더 또는 버킷이 특별히 필요하지 않은 경우에는 Amazon S3 폴더 및 버킷에 대한 모든 퍼블릭 액세스를 차단하는 것이 좋습니다. 폴더를 퍼블릭으로 설정하면 인터넷에서 누구나 해당 폴더에 있는 그룹화된 모든 객체를 볼 수 있습니다.

Amazon S3 콘솔에서 폴더를 퍼블릭으로 설정할 수 있습니다. 또한 접두사별로 데이터 액세스를 제한하는 버킷 정책을 생성하여 폴더를 퍼블릭으로 설정할 수도 있습니다. 자세한 내용은 [Amazon S3의 ID 및 액세스 관리](security-iam.md) 섹션을 참조하세요.

**주의**  
Amazon S3 콘솔에서 폴더를 퍼블릭으로 설정한 후에는 다시 프라이빗으로 설정할 수 없습니다. 대신에, 객체에 대한 퍼블릭 액세스가 허용되지 않도록 퍼블릭 폴더에 있는 각 개별 객체에 대한 권한을 설정해야 합니다. 자세한 내용은 [ACL 구성](managing-acls.md) 섹션을 참조하세요.

**Topics**
+ [폴더 생성](#create-folder)
+ [퍼블릭 폴더 설정](#public-folders)
+ [폴더 크기 계산](#calculate-folder)
+ [폴더 삭제](#delete-folders)

## 폴더 크기 계산
<a name="calculate-folder"></a>

이 섹션에서는 Amazon S3 콘솔을 사용하여 폴더의 크기를 계산하는 방법을 설명합니다.

**폴더 크기를 계산하는 방법**

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

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

1. **범용 버킷** 목록에서 폴더가 저장된 버킷의 이름을 선택합니다.

1. **객체** 목록에서 폴더 이름 옆의 확인란을 선택합니다.

1. **Actions**(작업)를 선택한 다음 **Calculate total size**(총 크기 계산)를 선택합니다.

**참고**  
페이지에서 다른 곳으로 이동하면 폴더 정보(총 크기 포함)를 더 이상 사용할 수 없습니다. 다시 보려면 총 크기를 다시 계산해야 합니다.

**중요**  
버킷 내 지정된 객체 또는 폴더에 대해 **Calculate total size**(총 크기 계산) 작업을 사용하면 Amazon S3에서 총 객체 수와 총 스토리지 크기를 계산합니다. 하지만 완료되지 않았거나 진행 중인 멀티파트 업로드와 현재 버전이 아닌 버전이나 이전 버전은 총 객체 수 또는 총 크기에 계산되지 않습니다. 이 작업은 버킷에 저장된 각 객체의 현재 또는 최신 버전만 총 객체 수와 총 크기를 계산합니다.  
예를 들어, 버킷에 객체의 버전이 두 개 있는 경우 Amazon S3 스토리지 계산기는 이를 하나의 객체로 계산합니다. 따라서 Amazon S3 콘솔에서 계산되는 총 객체 수는 S3 Storage Lens에 표시된 **객체 수** 지표 및 Amazon CloudWatch 지표 `NumberOfObjects`에서 보고한 객체 수와 다를 수 있습니다. 마찬가지로, 총 스토리지 크기도 S3 Storage Lens에 표시된 **Total Storage**(총 스토리지) 지표 및 CloudWatch에 표시된 `BucketSizeBytes` 지표와 다를 수 있습니다.

## 폴더 삭제
<a name="delete-folders"></a>

이 섹션에서는 Amazon S3 콘솔을 사용하여 S3 버킷에서 폴더를 삭제하는 방법을 설명합니다.

Amazon S3 기능 및 요금에 대한 자세한 내용은 [Amazon S3](https://aws.amazon.com/s3/)를 참조하십시오.



**S3 버킷에서 폴더 삭제**

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

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

1. **범용 버킷** 목록에서 폴더를 삭제할 해당 버킷의 이름을 선택합니다.

1. **객체** 목록에서 삭제할 폴더 및 객체 옆의 확인란을 선택합니다.

1. **삭제**를 선택합니다.

1. **객체 삭제** 페이지에서 삭제하기 위해 선택한 폴더와 객체의 이름이 **지정된 객체**에 나열되어 있는지 확인합니다.

1. [**객체 삭제(Delete objects)**] 상자에 **delete**를 입력하고 [**객체 삭제(Delete objects)**]를 선택합니다.

**주의**  
이 작업은 지정된 모든 객체를 삭제합니다. 폴더를 삭제할 때 폴더에 새 객체를 추가하기 전에 삭제 작업이 완료될 때까지 기다립니다. 그러지 않으면 새 객체도 삭제될 수 있습니다.

# Amazon S3 콘솔에서 객체 속성 보기
<a name="view-object-properties"></a>

Amazon S3 콘솔을 사용하여 스토리지 클래스, 암호화 설정, 태그 및 메타데이터와 같은 객체의 속성을 볼 수 있습니다.

**객체의 속성 보기**

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

1. 왼쪽 탐색 창에서 **범용 버킷** 또는 **디렉터리 버킷**을 선택합니다.

1. 버킷 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

1. [**객체(Objects)**] 목록에서 속성을 보려는 객체의 이름을 선택합니다.

   객체에 대한 [**객체 개요(Object overview)**]가 열립니다. 아래로 스크롤하여 객체 속성을 볼 수 있습니다.

1. **객체 개요** 페이지에서 다음과 같은 객체 속성을 보거나 구성할 수 있습니다.
**참고**  
**스토리지 클래스**, **암호화**, **메타데이터** 속성을 변경하면 새 객체가 생성되어 이전 객체를 대체합니다. S3 버전 관리가 사용 설정된 경우 객체의 새 버전이 생성되고 기존 객체는 이전 버전이 됩니다. 또한 속성을 변경하는 역할도 새 객체(또는 객체 버전)의 소유자가 됩니다.
사용자 정의 태그가 있는 객체의 **스토리지 클래스**, **암호화** 또는 **메타데이터** 속성을 변경하는 경우 `s3:GetObjectTagging` 권한이 있어야 합니다. 사용자 정의 태그는 없지만 크기가 16MB를 초과하는 객체의 이러한 속성을 변경하는 경우 `s3:GetObjectTagging` 권한도 있어야 합니다.  
대상 버킷 정책에서 `s3:GetObjectTagging` 작업을 거부하는 경우 객체의 이러한 속성은 업데이트되지만 사용자 정의 태그는 객체에서 제거되며 오류가 발생합니다.

   1. **스토리지 클래스** - Amazon S3의 각 객체에는 연결된 스토리지 클래스가 있습니다. 해당 객체에 액세스하는 빈도에 따라 사용할 스토리지 클래스를 선택합니다. 범용 버킷에 있는 S3 객체의 기본 스토리지 클래스는 Standard입니다. 디렉터리 버킷에 있는 S3 객체의 기본 스토리지 클래스는 S3 Express One Zone입니다. 객체를 업로드할 때 사용할 스토리지 클래스를 선택하면 됩니다. 스토리지 클래스에 대한 자세한 정보는 [Amazon S3 스토리지 클래스 이해 및 관리](storage-class-intro.md)를 참조하십시오.

      범용 버킷에 객체를 업로드한 뒤에 스토리지 클래스를 변경하려면 **스토리지 클래스**를 선택합니다. 원하는 스토리지 클래스를 선택한 다음 **저장**을 선택합니다.
**참고**  
디렉터리 버킷에 있는 객체의 스토리지 클래스는 변경할 수 없습니다.

   1. [**서버 측 암호화 설정(Server-side encryption settings)**] - 서버 측 암호화를 사용하여 S3 객체를 암호화할 수 있습니다. 자세한 내용은 [AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](specifying-kms-encryption.md) 또는 [Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 지정](specifying-s3-encryption.md) 섹션을 참조하세요.

   1. **메타데이터** - Amazon S3의 각 객체에는 해당 메타데이터를 나타내는 이름-값 페어 세트가 있습니다. S3 객체에 메타데이터를 추가하는 방법에 대한 자세한 내용은 [Amazon S3 콘솔에서 객체 메타데이터 편집](add-object-metadata.md) 섹션을 참조하십시오.

   1. **태그** - 범용 버킷에 있는 S3 객체에 태그를 추가하여 스토리지를 분류합니다. 자세한 내용은 [태그를 사용하여 객체 분류](object-tagging.md) 섹션을 참조하세요.

   1. **Object Lock 법적 보존 및 보존** - 범용 버킷의 객체가 삭제되는 것을 방지할 수 있습니다. 자세한 내용은 [Object Lock으로 객체 잠금](object-lock.md) 섹션을 참조하세요.

# 태그를 사용하여 객체 분류
<a name="object-tagging"></a>

객체 태그 지정을 이용하여 스토리지를 분류합니다. 각 태그는 키-값 페어입니다.

새 객체를 업로드할 때 태그를 덧붙이거나 기존 객체에 태그를 덧붙일 수 있습니다.
+ 한 객체에 태그를 최대 10개까지 연결할 수 있습니다. 각 객체에 연결된 태그에는 고유한 태그 키가 있어야 합니다.
+ 태그 키의 최대 길이는 128개 유니코드 문자이며, 태그 값의 최대 길이는 256개 유니코드 문자입니다. Amazon S3 객체 태그는 내부적으로 UTF-16 형식으로 표시됩니다. 참고로 UTF-16에서 문자는 1 또는 2자 위치를 차지합니다.
+ 키와 값은 대/소문자를 구분합니다.
+ 태그 제한에 대한 자세한 내용은 *AWS 결제 및 비용 관리 사용 설명서*의 [사용자 정의 태그 제한](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html#allocation-tag-restrictions)을 참조하세요. 기본 태그 제한에 대해서는 *Amazon EC2 사용 설명서*의 [태그 제한](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions)을 참조하세요.

**예제**  
태그 지정에 대한 다음 예시를 참고하십시오.

**Example PHI 정보**  
객체에는 보호 대상 건강 정보(PHI) 데이터가 포함되어 있다고 가정합시다. 다음과 같이 키-값 페어를 사용하여 객체에 태그를 지정할 수 있습니다.  

```
PHI=True
```
또는  

```
Classification=PHI
```

**Example 프로젝트 파일**  
S3 버킷에 프로젝트 파일을 저장한다고 가정합시다. 아래와 같이 `Project`라는 키와 값으로 이 객체들에 태그를 지정할 수 있습니다.  

```
Project=Blue
```

**Example 다중 태그**  
다음과 같이 한 객체에 태그를 여러 개 덧붙일 수 있습니다.  

```
Project=x
Classification=confidential
```

**키 이름 접두사 및 태그**  
객체 키 이름 접두사를 통해 스토리지를 분류할 수도 있습니다. 그러나 접두사 기반의 분류는 1차원적입니다. 다음 객체 키 이름을 참고하십시오.

```
photos/photo1.jpg
project/projectx/document.pdf
project/projecty/document2.pdf
```

이 키 이름들에는 `photos/`, `project/projectx/` 및 `project/projecty/`라는 접두사가 있습니다. 이 접두사들을 사용하여 1차원 분류를 할 수 있습니다. 즉 하나의 접두사 아래에 있는 모든 것이 하나의 범주가 됩니다. 예를 들어, `project/projectx` 접두사는 프로젝트 x와 관련된 모든 문서를 식별합니다.

태그 지정을 통해 이제 또 다른 차원을 갖게 되었습니다. 프로젝트 x 범주에 속한 photo1을 원하는 경우, 그에 따라 객체에 태그를 지정할 수 있습니다.

**추가 혜택**  
태그 지정은 데이터 분류 뿐만 아니라 다음과 같은 이점도 제공합니다.
+ 객체 태그를 통해 권한에 대한 액세스 제어를 세부적으로 수행할 수 있습니다. 예를 들어, 사용자에게 특정 태그가 있는 객체만 읽을 수 있는 권한을 부여할 수 있습니다.
+ 객체 태그를 통해 수명 주기 규칙 내에서 키 이름 접두사뿐만 아니라 태그 기반 필터를 지정할 수 있는 세분화된 객체 수명 주기 관리가 가능합니다.
+ Amazon S3 분석 기능을 사용하는 경우 분석을 위해 객체를 그룹화하도록 객체 태그, 키 이름 접두사 또는 접두사와 태그 둘 다를 기준으로 필터를 구성할 수 있습니다.
+ 또한 Amazon CloudWatch 지표를 사용자 지정하여 특정 태그 필터를 통해 정보를 표시할 수도 있습니다. 다음 단원들에서 세부 정보가 제공됩니다.

**중요**  
태그를 사용하여 기밀 데이터(예: 개인 식별 정보(PII) 또는 보호 대상 건강 정보(PHI))가 포함된 객체를 라벨링하는 것이 허용됩니다. 하지만 태그 자체에는 기밀 정보가 포함되어서는 안 됩니다.

**단일 요청으로 여러 Amazon S3 객체에 객체 태그 세트 추가**  
단일 요청으로 둘 이상의 Amazon S3 객체에 객체 태그 세트를 추가하려면 S3 배치 작업을 사용하면 됩니다. 작업할 객체 목록을 S3 배치 작업에 제공합니다. S3 배치 작업은 지정된 작업을 수행하기 위해 각 API 작업을 호출합니다. 단일 배치 작업 건으로 엑사바이트 규모의 데이터가 포함된 수십억 개의 객체에서 지정된 작업을 수행할 수 있습니다.

S3 배치 작업 기능은 진행 상황을 추적하고 알림을 보내며 모든 작업에 대한 자세한 완료 보고서를 저장하여 감사 가능한 완전관리형 서버리스 환경을 제공합니다. Amazon S3 콘솔, AWS CLI, AWS SDK 또는 REST API를 통해 S3 배치 작업을 사용할 수 있습니다. 자세한 내용은 [S3 배치 작업 기본 사항](batch-ops.md#batch-ops-basics) 섹션을 참조하세요.

객체 태그에 대한 자세한 내용은 [객체 태그 관리](tagging-managing.md) 섹션을 참조하세요.

## 객체 태그 지정과 관련된 API 작업
<a name="tagging-apis"></a>

Amazon S3은 특히 객체 태그 지정을 위한 다음 API 작업을 지원합니다.

**객체 API 작업**
+  [PUT Object 태그 지정](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUTtagging.html) - 객체에 있는 태그를 교체합니다. 요청 본문에서 태그를 지정합니다. 이 API를 사용하는, 서로 뚜렷이 구분되는 두 가지 객체 태그 관리 시나리오가 있습니다.
  + 객체에는 태그가 없는 경우 - 이 API를 사용하여 객체에 태그 세트를 붙일 수 있습니다(객체에는 이전에 붙인 태그가 없음).
  + 객체에 기존 태그 세트가 있는 경우 - 기존 태그 세트를 수정하려면 기존 태그 세트를 조회하여 클라이언트 측에서 해당 세트를 수정한 다음, 이 API를 사용하여 태그 세트를 교체해야 합니다.
**참고**  
 빈 태그 세트로 이 요청을 전송하는 경우 Amazon S3은 객체에 있는 기존 태그 세트를 삭제합니다. 이 방법을 사용하면 티어 1 요청(PUT)에 대한 요금이 부과됩니다. 자세한 내용은 [Amazon S3 요금](https://d0.awsstatic.com/whitepapers/aws_pricing_overview.pdf)을 참조하세요.  
[DELETE Object 태그 지정](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETEtagging.html) 요청은 요금이 부과되지 않고 동일한 결과를 얻으므로 더 유용합니다.
+  [GET Object 태그 지정](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtagging.html) - 객체에 연결된 태그 세트를 반환합니다. Amazon S3은 응답 본문의 객체 태그를 반환합니다.
+ [DELETE Object 태그 지정](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETEtagging.html) - 객체에 연결된 태그 세트를 삭제합니다.

**태그 지정을 지원하는 기타 API 작업**
+  [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 및 [멀티파트 업로드 시작](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html) - 객체를 생성할 때 태그를 지정할 수 있습니다. `x-amz-tagging` 요청 헤더를 사용하여 태그를 지정합니다.
+  [GET Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html) - 헤더 응답 크기가 8킬로바이트로 제한되어 있기 때문에 Amazon S3은 태그 세트를 반환하는 대신에 `x-amz-tag-count` 헤더의 객체 태그 개수를 반환합니다(요청자에게 태그를 읽을 수 있는 권한이 있는 경우에 한함). 태그를 보고 싶은 경우, [GET Object 태그 지정](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtagging.html) API 작업에 대해 또 다른 요청을 합니다.
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) - POST 요청에서 태그를 지정할 수 있습니다.

  요청 시 태그가 8킬로바이트 HTTP 요청 헤더 크기 제한을 초과하지 않는 한, `PUT Object ` API를 사용하여 태그가 있는 객체를 만들 수 있습니다. 지정하는 태그가 헤더 크기 제한을 초과하는 경우, 태그를 본문에 포함시키는 이 POST 방법을 사용할 수 있습니다.

   [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html) - 요청 시 `x-amz-tagging-directive`를 지정하여 Amazon S3이 태그를 복사(기본 동작)하거나 요청 시 제공되는 새로운 태그 세트로 태그를 교체하도록 유도할 수 있습니다.

다음을 참조하십시오.
+ S3 객체 태그 지정은 매우 일관적입니다. 자세한 내용은 [Amazon S3 데이터 일관성 모델](Welcome.md#ConsistencyModel) 섹션을 참조하세요.

## 추가 구성
<a name="tagging-other-configs"></a>

이 단원에서는 객체 태그 지정이 다른 구성과 어떤 관계를 맺는지에 대해 설명합니다.

### 객체 태그 지정 및 수명 주기 관리
<a name="tagging-and-lifecycle"></a>

버킷 수명 주기 구성에서 필터를 지정하여 규칙을 적용할 객체의 하위 집합을 선택할 수 있습니다. 키 이름 접두사, 객체 태그 또는 이 두 가지를 바탕으로 필터를 지정할 수 있습니다.

Amazon S3 버킷에 사진(원본 및 마감 형식)을 저장한다고 가정해 보겠습니다. 이 객체들에 다음과 같이 태그를 지정할 수 있습니다.

```
phototype=raw
or
phototype=finished
```

원본 사진을 생성한 후 언젠가 Amazon Glacier에 아카이브하는 것을 고려해 볼 수 있습니다. 특정 태그(`photos/`)를 지닌 키 이름 접두사(`phototype=raw`)가 있는 객체의 하위 집합을 식별하는 필터를 사용하여 수명 주기 규칙을 구성할 수 있습니다.

자세한 내용은 [객체 수명 주기 관리](object-lifecycle-mgmt.md) 섹션을 참조하세요.

### 객체 태그 지정 및 복제
<a name="tagging-and-replication"></a>

버킷에서 복제를 구성한 경우, Amazon S3에 태그를 읽을 수 있는 권한을 부여하면 Amazon S3에서 태그를 복제합니다. 자세한 내용은 [라이브 복제 설정 개요](replication-how-setup.md) 섹션을 참조하세요.

### 객체 태깅 이벤트 알림
<a name="tagging-and-event-notifications"></a>

객체 태그가 객체에서 추가되거나 삭제될 때 알림을 받도록 Amazon S3 이벤트 알림을 설정할 수 있습니다. `s3:ObjectTagging:Put` 이벤트 유형은 태그가 객체에 PUT되거나 기존 태그가 업데이트될 때 알려줍니다. `s3:ObjectTagging:Delete` 이벤트 유형은 객체에서 태그가 제거될 때 알려줍니다. 자세한 내용은 [이벤트 알림 사용 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-enable-disable-notification-intro.html)를 참조하세요.

객체 태깅에 대한 자세한 내용은 다음 주제를 참조하세요.

**Topics**
+ [객체 태그 지정과 관련된 API 작업](#tagging-apis)
+ [추가 구성](#tagging-other-configs)
+ [태그 지정 및 액세스 제어 정책](tagging-and-policies.md)
+ [객체 태그 관리](tagging-managing.md)

# 태그 지정 및 액세스 제어 정책
<a name="tagging-and-policies"></a>

또한 권한 정책(버킷 및 사용자 정책)을 사용하여 객체 태그 지정과 관련된 권한을 관리할 수 있습니다. 정책 작업에 대해서는 다음 주제를 참조하십시오.
+  [객체 작업](security_iam_service-with-iam.md#using-with-s3-actions-related-to-objects) 
+  [버킷 작업](security_iam_service-with-iam.md#using-with-s3-actions-related-to-buckets)

객체 태그를 통해 권한 관리에 대한 액세스 제어를 세부적으로 수행할 수 있습니다. 객체 태그를 바탕으로 조건적인 권한을 부여할 수 있습니다. Amazon S3에서는 객체 태그 기반의 조건부 권한을 부여하는 데 사용할 수 있는 다음과 같은 조건 키를 지원합니다.
+ `s3:ExistingObjectTag/<tag-key>` - 이 조건 키를 사용하여 기존 객체 태그에 특정 태그 키 및 값이 있다는 것을 확인합니다.
**참고**  
`PUT Object` 및 `DELETE Object` 작업에 대한 권한을 부여할 때 이 조건 키는 지원되지 않습니다. 즉 기존 태그에 기반을 둔 객체를 삭제 또는 덮어쓸 수 있는 권한을 사용자에게 부여하거나 거부할 수 있는 정책을 생성할 수 없습니다.
+ `s3:RequestObjectTagKeys` - 이 조건을 사용하여 객체에 대해 허용하고자 하는 태그 키를 제한합니다. 이것은 PutObjectTagging 및 PutObject, 그리고 POST 객체 요청을 사용하여 객체에 태그를 붙일 때 유용합니다.
+ `s3:RequestObjectTag/<tag-key>` - 이 조건을 사용하여 객체에 대해 허용하고자 하는 태그 키 및 값을 제한합니다. 이것은 PutObjectTagging 및 PutObject, 그리고 POST Bucket 요청을 사용하여 객체에 태그를 붙일 때 유용합니다.

Amazon S3 서비스별 조건 키 전체 목록은 [조건 키를 사용한 버킷 정책 예시](amazon-s3-policy-keys.md) 단원을 참조하세요. 다음 권한 정책들은 객체 태그 지정을 통해 어떻게 세부적인 액세스 권한 관리가 가능한지 보여줍니다.

**Example 1: 사용자가 특정 태그 및 키 값이 있는 객체만 읽도록 허용**  
다음 권한 정책은 `environment: production` 태그 키 및 값이 있는 객체만 사용자가 읽을 수 있도록 제한합니다. 이 정책은 `s3:ExistingObjectTag` 조건 키를 사용하여 태그 키 및 값을 지정합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
  {
    "Principal": {
      "AWS": [
        "arn:aws:iam::111122223333:role/JohnDoe"
      ]
    },
    "Effect": "Allow",
    "Action": ["s3:GetObject", "s3:GetObjectVersion"],
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
      "StringEquals": 
        {"s3:ExistingObjectTag/environment": "production"}
    }
  }
  ]
}
```

**Example 2. 사용자가 추가할 수 있는 객체 태그 키 제한**  
다음 권한 정책은 사용자에게 `s3:PutObjectTagging` 작업을 수행할 수 있는 권한을 부여합니다. 이에 따라 사용자는 기존 객체에 태그를 붙일 수 있습니다. 조건이 `s3:RequestObjectTagKeys` 조건 키를 사용하여 `Owner`, `CreationDate` 등의 허용 태그 키 세트를 지정합니다. 자세한 내용은 *IAM 사용 설명서*의 [다수의 키 또는 값을 사용하는 조건 생성](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)을 참조하십시오.  
요청에 지정된 모든 태그 키가 인증된 태그 키임을 정책이 보장합니다. 지정된 값 중 최소 1개가 요청에 존재함을 조건 내의 `ForAnyValue` 한정자가 보장합니다.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
            "arn:aws:iam::111122223333:role/JohnDoe"
         ]
       },
 "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [
            "Owner",
            "CreationDate"
          ]
        }
      }
    }
  ]
}
```

**Example 3. 사용자가 객체 태그를 추가할 수 있게 하려면 특정 태그 키 및 값 필요**  
다음 권한 정책은 `s3:PutObjectTagging` 작업을 수행할 수 있는 권한을 사용자에게 부여하여, 사용자가 기존 객체에 태그를 추가할 수 있게 합니다. 이 조건은 값이 `X`로 설정된 (`Project` 등의) 특정 태그 키를 포함하도록 사용자에게 요구합니다.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
       "arn:aws:iam::111122223333:user/JohnDoe"
         ]
       },
      "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X"
        }
      }
    }
  ]
}
```



# 객체 태그 관리
<a name="tagging-managing"></a>

이 섹션에서는 AWS SDK for Java 및 .NET 또는 Amazon S3 콘솔을 사용하여 객체 태그를 관리하는 방법에 대해 설명합니다.

객체 태그 지정을 통해 범용 버킷에서 스토리지를 분류할 수 있습니다. 모든 태그는 다음 규칙이 적용되는 키-값 페어입니다.
+ 한 객체에 태그를 최대 10개까지 연결할 수 있습니다. 각 객체에 연결된 태그에는 고유한 태그 키가 있어야 합니다.
+ 태그 키의 최대 길이는 128개 유니코드 문자이며, 태그 값의 최대 길이는 256개 유니코드 문자입니다. Amazon S3 객체 태그는 내부적으로 UTF-16 형식으로 표시됩니다. 참고로 UTF-16에서 문자는 1 또는 2자 위치를 차지합니다.
+ 키와 값은 대/소문자를 구분합니다.

객체 태그에 대한 자세한 내용은 [태그를 사용하여 객체 분류](object-tagging.md) 섹션을 참조하세요. 태그 제한에 대한 자세한 내용은 *AWS 결제 및 비용 관리 사용 설명서*의 [사용자 정의 태그 제한](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)을 참조하세요.

## S3 콘솔 사용
<a name="add-object-tags"></a>

**객체에 태그 추가**

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

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

1. 버킷 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

1. 변경할 객체의 이름 왼쪽에 있는 확인란을 선택합니다.

1. **작업(Actions)** 메뉴에서 **태그 편집(Edit tags)**을 선택합니다.

1. 나열된 객체를 검토하고 **태그 추가(Add tags)**를 선택합니다.

1. 각 객체 태그는 키-값 페어입니다. **키**와 **값**을 입력합니다. 태그를 더 추가하려면 **태그 추가(Add Tag)**를 선택합니다.

   한 개체에 태그를 최대 10개까지 입력할 수 있습니다.

1. [**변경 사항 저장(Save changes)**]을 선택합니다.

   Amazon S3는 지정된 객체에 태그를 추가합니다.

자세한 내용은 이 설명서의 [Amazon S3 콘솔에서 객체 속성 보기](view-object-properties.md) 및 [객체 업로드](upload-objects.md) 단원을 참조하세요.

## AWS SDK 사용
<a name="tagging-manage-sdk"></a>

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

AWS SDK for Java를 사용하여 객체 태그를 관리하려면 새 객체에 대한 태그를 설정하고 기존 객체에 대한 태그를 검색하거나 교체할 수 있습니다. 객체 태그 지정에 대한 자세한 정보는 [태그를 사용하여 객체 분류](object-tagging.md) 단원을 참조하십시오.

S3Client를 사용하여 버킷에 객체를 업로드하고 태그를 설정합니다. 예제는 *Amazon S3 API 참조*의 [Upload an object to a bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_PutObject_section.html)을 참조하세요.

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

다음 예제는 AWS SDK for .NET를 사용하여 새 객체에 대한 태그를 설정하고 기존 객체에 대한 태그를 가져오거나 대체하는 방법을 보여줍니다. 객체 태그 지정에 대한 자세한 정보는 [태그를 사용하여 객체 분류](object-tagging.md) 단원을 참조하십시오.

코드 예제 설정 및 실행에 대한 자세한 내용은 *AWS SDK for .NET 개발자 안내서*의 [AWS SDK for .NET 시작하기](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)를 참조하세요.

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

namespace Amazon.DocSamples.S3
{
    public class ObjectTagsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for the new object ***";
        private const string filePath = @"*** file path ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            PutObjectWithTagsTestAsync().Wait();
        }

        static async Task PutObjectWithTagsTestAsync()
        {
            try
            {
                // 1. Put an object with tags.
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    FilePath = filePath,
                    TagSet = new List<Tag>{
                        new Tag { Key = "Keyx1", Value = "Value1"},
                        new Tag { Key = "Keyx2", Value = "Value2" }
                    }
                };

                PutObjectResponse response = await client.PutObjectAsync(putRequest);
                // 2. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest = new GetObjectTaggingRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };

                GetObjectTaggingResponse objectTags = await client.GetObjectTaggingAsync(getTagsRequest);
                for (int i = 0; i < objectTags.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags.Tagging[i].Key, objectTags.Tagging[i].Value);


                // 3. Replace the tagset.

                Tagging newTagSet = new Tagging();
                newTagSet.TagSet = new List<Tag>{
                    new Tag { Key = "Key3", Value = "Value3"},
                    new Tag { Key = "Key4", Value = "Value4" }
                };


                PutObjectTaggingRequest putObjTagsRequest = new PutObjectTaggingRequest()
                {
                    BucketName = bucketName,
                    Key = keyName,
                    Tagging = newTagSet
                };
                PutObjectTaggingResponse response2 = await client.PutObjectTaggingAsync(putObjTagsRequest);

                // 4. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest2 = new GetObjectTaggingRequest();
                getTagsRequest2.BucketName = bucketName;
                getTagsRequest2.Key = keyName;
                GetObjectTaggingResponse objectTags2 = await client.GetObjectTaggingAsync(getTagsRequest2);
                for (int i = 0; i < objectTags2.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags2.Tagging[i].Key, objectTags2.Tagging[i].Value);

            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine(
                        "Error encountered ***. Message:'{0}' when writing an object"
                        , e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "Encountered an error. Message:'{0}' when writing an object"
                    , e.Message);
            }
        }
    }
}
```

------