

# 객체 태그 관리
<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);
            }
        }
    }
}
```

------