

# 캐시 태그로 콘텐츠 무효화
<a name="invalidation-by-tags"></a>

Amazon CloudFront는 태그 무효화를 지원하므로 URL 경로가 아닌 의미 체계 태그를 기반으로 캐시된 객체를 무효화할 수 있습니다. 이렇게 하면 URL 구조가 무효화 전략과 일치할 필요 없이 캐시 무효화를 유연하게 제어할 수 있습니다.

## 태그 무효화 작동 방식
<a name="invalidation-by-tags-how-it-works"></a>

1. **배포 구성**: 오리진이 캐시 태그를 반환하는 데 사용하는 HTTP 헤더 이름을 지정하여 배포에 ` CacheTagConfig`를 추가합니다.

1. **오리진에서 객체에 태그 지정**: 태그를 사용하여 캐시하려는 객체를 반환할 때, 지정된 헤더를 쉼표로 구분된 태그 값과 함께 HTTP 응답에 포함하도록 오리진을 구성합니다.

   ```
   HTTP/1.1 200 OK
   Content-Type: text/html
   x-amz-meta-cache-tag: product:electronics, category:tv, brand:example
   Cache-Control: max-age=3600
   ```
**참고**  
S3 오리진의 경우, S3 객체에 캐시 태그를 메타데이터로 연결할 수 있습니다. 선택한 키(예: ` cache-tag`)와 쉼표로 구분된 태그 목록을 값으로 사용하여 메타데이터 항목을 추가할 수 있습니다(예: `product:electronics, category:tv, brand:example`).  
S3는 객체 메타데이터를 ` x-amz-meta-<Key>` 접두사가 붙은 응답 헤더로 제공합니다. 따라서 `cache-tag`라는 메타데이터 키는 `x-amz-meta-cache-tag` 헤더로 반환됩니다. `CacheTagConfig`에서 ` HeaderName`을 ` x-amz-meta-cache-tag`로 설정하면 해당 태그로 무효화를 전송할 수 있습니다.
**참고**  
또는 오리진 응답 Lambda@Edge 함수를 캐시 동작에 연결하여 캐시 태그 헤더를 추가할 수 있습니다. Lambda@Edge를 사용하는 경우 헤더 이름이 `x-amz-meta-<Key>` 형식을 따를 필요가 없습니다.

1. **태그 기반 무효화**: `#` 접두사와 함께 ` CreateInvalidation` API를 사용하여 지정된 태그가 있는 캐시된 모든 객체를 무효화합니다.

   ```
   aws cloudfront create-invalidation \
     --distribution-id {{distribution_ID}} \
     --paths "#product:electronics"
   ```

   이 명령은 URL 경로와 관계없이 ` product:electronics` 태그를 포함하는 모든 캐시된 객체를 무효화합니다.

## 태그 형식 요구 사항
<a name="invalidation-by-tags-format"></a>

 **오리진 응답 헤더 값:** 
+ 태그는 헤더 값에서 쉼표로 구분됩니다.
+ 각 태그 앞뒤의 공백은 잘립니다.
+ `tag1,tag2,tag3`와 `tag1, tag2, tag3`는 모두 유효하며 동일합니다.

 **개별 태그 값:** 
+ ASCII 표시 문자(33\~126)
+ 제어 문자, 공백 또는 쉼표 사용 불가
+ 대소문자 구분 안 함
+ 태그당 최대 256자
+ 객체당 최대 50개의 태그(추가 태그는 무시됨)

## 태그 무효화를 위한 배포 구성
<a name="invalidation-by-tags-configuring"></a>

태그 무효화를 활성화하려면 배포 구성에 `CacheTagConfig`를 추가합니다.

```
aws cloudfront create-distribution \
  --distribution-config '{
    "CallerReference": "my-distribution",
    "CacheTagConfig": {
      "HeaderName": "x-amz-meta-cache-tag"
    },
    "DefaultCacheBehavior": {
      "TargetOriginId": "myOrigin",
      "ViewerProtocolPolicy": "redirect-to-https",
      "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6"
    },
    "Origins": { ... },
    "Enabled": true,
    "Comment": "Distribution with tag support"
  }'
```

## 태그 무효화 생성
<a name="invalidation-by-tags-creating"></a>

`--paths` 파라미터에 `#` 접두사를 사용하여 태그를 지정합니다.

```
# Invalidate all objects tagged with "user1"
aws cloudfront create-invalidation \
  --distribution-id {{distribution_ID}} \
  --paths "#user1"

# Invalidate objects matching any of multiple tags (OR logic)
aws cloudfront create-invalidation \
  --distribution-id {{distribution_ID}} \
  --paths "#user1" "#product-category:electronics"

# Mix path and tag invalidations in one batch
aws cloudfront create-invalidation \
  --distribution-id {{distribution_ID}} \
  --paths "/index.html" "#user1" "/images/*" "#product-category:electronics"
```

## 무효화 상태 확인
<a name="invalidation-by-tags-checking-status"></a>

`GetInvalidation`을 사용하여 상태를 확인합니다. 응답에는 경로 항목과 태그 항목이 모두 포함됩니다.

```
aws cloudfront get-invalidation \
  --distribution-id {{distribution_ID}} \
  --id {{invalidation_ID}}
```

## 중요 고려 사항
<a name="invalidation-by-tags-considerations"></a>
+ **옵트인 필요**: 태그 무효화는 `CacheTagConfig`가 구성된 배포에서만 작동합니다. 이 구성이 없는 배포는 오리진의 캐시 태그 헤더를 무시합니다.
+ **태그 처리 제한**: CloudFront는 캐시된 객체당 최대 50개의 태그를 처리합니다. 오리진 응답에 50개 이상의 태그가 포함된 경우, 제한을 초과하는 추가 태그는 저장되지 않습니다.
+ **헤더 이름 변경**: 태그 무효화는 현재 `CacheTagConfig` 구성과 비교하여 수행됩니다. `CacheTagConfig`에서 `HeaderName`을 변경하면 이전 헤더 이름의 태그로 캐시된 객체에 대해 발행된 무효화는 더 이상 평가되지 않습니다. 헤더 이름을 변경해야 하는 경우, 먼저 새 캐시 태그 헤더와 이전 캐시 태그 헤더를 모두 객체와 함께 반환한 다음, 경로 무효화(예: `/*`)를 수행하거나 헤더 이름을 변경하기 전에 기존 태그를 무효화하여 오래된 콘텐츠가 제공되는 것을 방지하세요. 이 작업이 완료되면 이전 캐시 태그 헤더를 객체와 함께 전송하는 것을 중지할 수 있습니다.
+ **CacheTagConfig 제거**: 배포에서 ` CacheTagConfig`를 제거하면 CloudFront는 오리진 응답에서 태그를 추출하는 작업을 중지합니다. 태그가 있는 기존 캐시된 객체는 만료되거나 경로에 의해 무효화될 때까지 정상적으로 제공됩니다.
+ **이전 버전과의 호환성**: 기존 경로 및 와일드카드 무효화는 변경 없이 계속 작동합니다. 태그 무효화는 누적 방식으로 작동하므로 동일한 배포에서 두 가지 방법을 모두 사용할 수 있습니다.
+ **배포 테넌트**: ` CreateInvalidationForDistributionTenant` API를 통해 배포 테넌트에 대한 태그 무효화도 지원됩니다.

## 사용 사례
<a name="invalidation-by-tags-examples"></a>

### 예제 1: 전자 상거래 제품 카탈로그
<a name="invalidation-by-tags-example-ecommerce"></a>

전자 상거래 사이트가 캐시된 제품 페이지에 제품, 범주 및 브랜드로 태그를 지정합니다.

```
x-amz-meta-cache-tag: category:electronics, brand:acme, product:12345
```

ACME가 브랜딩을 업데이트할 경우 모든 ACME 제품을 한 번에 무효화하세요.

```
aws cloudfront create-invalidation \
  --distribution-id {{distribution_ID}} \
  --paths "#brand:acme"
```

### 예제 2: 사용자 생성 콘텐츠 플랫폼
<a name="invalidation-by-tags-example-ugc"></a>

플랫폼이 캐시된 콘텐츠에 소유자의 사용자 ID로 태그를 지정합니다.

```
x-amz-meta-cache-tag: user:12345, content-type:image
```

사용자가 계정을 해지하면 오리진에서 콘텐츠를 제거한 후 모든 콘텐츠를 무효화하세요.

```
aws cloudfront create-invalidation \
  --distribution-id {{distribution_ID}} \
  --paths "#user:12345"
```

### 예제 3: 콘텐츠 버전 관리
<a name="invalidation-by-tags-example-versioning"></a>

CMS가 콘텐츠에 버전 식별자로 태그를 지정합니다.

```
x-amz-meta-cache-tag: version:v2, template:homepage
```

새 버전을 배포할 때 모든 v2 콘텐츠를 무효화하세요.

```
aws cloudfront create-invalidation \
  --distribution-id {{distribution_ID}} \
  --paths "#version:v2"
```