

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

# Amazon OpenSearch Service에서 HTTP 요청 압축
<a name="gzip"></a>

gzip 압축을 사용하여 Amazon OpenSearch Service 도메인에서 HTTP 요청 및 응답을 압축할 수 있습니다. gzip 압축을 사용하면 문서 크기를 줄이고 대역폭 사용률과 대기 시간을 줄여 전송 속도를 향상시킬 수 있습니다.

gzip 압축은 OpenSearch 또는 Elasticsearch 6.0 이상을 실행하는 모든 도메인에 대해 지원됩니다. 일부 OpenSearch 클라이언트는 gzip 압축을 기본적으로 지원하며 많은 프로그래밍 언어에는 프로세스를 단순화하는 라이브러리가 있습니다.

## gzip 압축 활성화
<a name="gzip-enable"></a>

유사한 OpenSearch 설정과 혼동하지 마세요. `http_compression.enabled`는 OpenSearch Service에 고유하며 도메인에서 gzip 압축을 활성화 또는 비활성화합니다. OpenSearch 또는 Elasticsearch 7.*x*를 실행하는 도메인은 기본적으로 gzip 압축을 사용하지만 Elasticsearch 6.*x*를 실행하는 도메인은 기본적으로 기능이 비활성화되어 있습니다.

gzip 압축을 활성화하려면 다음 요청을 전송합니다.

```
PUT _cluster/settings
{
  "persistent" : {
    "http_compression.enabled": true
  }
}
```

`_cluster/settings`에 대한 요청은 압축 해제되어야 하므로 별도의 클라이언트 또는 표준 HTTP 요청을 사용하여 클러스터 설정을 업데이트해야 할 수 있습니다.

gzip 압축을 성공적으로 활성화했는지 확인하려면 다음 요청을 전송합니다.

```
GET _cluster/settings?include_defaults=true
```

응답에 다음 설정이 표시되는지 확인합니다.

```
...
"http_compression": {
  "enabled": "true"
}
...
```

## 필수 헤더
<a name="gzip-headers"></a>

gzip으로 압축된 요청 본문을 포함할 때 표준 `Content-Type: application/json` 헤더를 유지하고 `Content-Encoding: gzip` 헤더를 추가합니다. gzip으로 압축된 응답을 수락하려면 `Accept-Encoding: gzip` 헤더도 추가합니다. OpenSearch 클라이언트가 gzip 압축을 지원하는 경우 이러한 헤더를 자동으로 포함할 가능성이 큽니다.

## 샘플 코드(Python 3)
<a name="gzip-code"></a>

다음 샘플에서는 [opensearch-py](https://pypi.org/project/opensearch-py/)를 사용하여 압축을 수행하고 요청을 보냅니다. 이 코드는 IAM 자격 증명을 사용하여 요청에 서명합니다.

```
from opensearchpy import OpenSearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth
import boto3

host = '' # e.g. my-test-domain.us-east-1.es.amazonaws.com
region = '' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

# Create the client.
search = OpenSearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = awsauth,
    use_ssl = True,
    verify_certs = True,
    http_compress = True, # enables gzip compression for request bodies
    connection_class = RequestsHttpConnection
)

document = {
  "title": "Moneyball",
  "director": "Bennett Miller",
  "year": "2011"
}

# Send the request.
print(search.index(index='movies', id='1', body=document, refresh=True))

# print(search.index(index='movies', doc_type='_doc', id='1', body=document, refresh=True))
```

또는 적절한 헤더를 지정하고 요청 본문을 직접 압축하고 [요청](https://2.python-requests.org)과 같은 표준 HTTP 라이브러리를 사용할 수 있습니다. 이 코드는 HTTP 기본 자격 증명을 사용하여 요청에 서명합니다. [세분화된 액세스 제어](fgac.md)를 사용하는 경우 도메인에서 이 기능을 지원할 수 있습니다.

```
import requests
import gzip
import json

base_url = '' # The domain with https:// and a trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/
auth = ('{{master-user}}', '{{master-user-password}}') # For testing only. Don't store credentials in code.

headers = {'Accept-Encoding': 'gzip', 'Content-Type': 'application/json',
           'Content-Encoding': 'gzip'}

document = {
  "title": "Moneyball",
  "director": "Bennett Miller",
  "year": "2011"
}

# Compress the document.
compressed_document = gzip.compress(json.dumps(document).encode())

# Send the request.
path = 'movies/_doc?refresh=true'
url = base_url + path
response = requests.post(url, auth=auth, headers=headers, data=compressed_document)
print(response.status_code)
print(response.text)
```