

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

# HTTP 클라이언트 사용자 지정
<a name="configure-http"></a>

 AWS SDK for Go는 기본 구성 값과 함께 기본 HTTP 클라이언트를 사용합니다. 이러한 구성 값 중 일부를 변경할 수 있지만 기본 HTTP 클라이언트 및 전송은 처리량이 높고 지연 시간이 짧은 환경에서 AWS SDK for Go를 사용하는 고객을 위해 충분히 구성되지 않습니다. 구성 권장 사항은 특정 워크로드에 따라 다르므로 자세한 내용은 [FAQ](faq-gosdk.md) 섹션을 참조하세요. 이 섹션에서는 사용자 지정 HTTP 클라이언트를 구성하고 해당 클라이언트를 사용하여 AWS SDK for Go 직접 호출을 생성하는 방법을 설명합니다.

 사용자 지정 HTTP 클라이언트를 생성하는 데 도움이 되도록 이 섹션에서는 [NewBuildableClient](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#NewBuildableClient)가 사용자 지정 설정을 구성하고 해당 클라이언트를 AWS SDK for Go 서비스 클라이언트와 함께 사용하는 방법을 설명합니다.

 사용자 지정하려는 항목을 정의해 보겠습니다.

## 구성 로드 중 재정의
<a name="overriding-during-configuration-loading"></a>

 [LoadDefaultConfig](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#LoadDefaultConfig)를 직접적으로 호출할 때 [WithHTTPClient](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#WithHTTP)를 사용하여 클라이언트를 래핑하고 결과 값을 `LoadDefaultConfig`에 전달하여 사용자 지정 HTTP 클라이언트를 제공할 수 있습니다. 예를 들어 `customClient`를 클라이언트로 전달하려면 다음을 수행합니다.

```
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))
```

## 제한 시간
<a name="timeout"></a>

 요청 제한 시간으로 `BuildableHTTPClient`를 구성할 수 있습니다. 이 제한 시간에는 연결, 리디렉션 처리 및 전체 응답 본문 읽기 시간이 포함됩니다. 예를 들어 클라이언트 제한 시간을 수정하려면 다음을 수행합니다.

```
import "github.com/aws/aws-sdk-go-v2/aws/transport/http"

// ...

httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)
```

## 다이얼러
<a name="dialer"></a>

 `BuildableHTTPClient`는 수정된 [다이얼러](https://golang.org/pkg/net/#Dialer) 옵션으로 클라이언트를 구성하기 위한 빌더 메커니즘을 제공합니다. 다음 예제에서는 클라이언트 `Dialer` 설정을 구성하는 방법을 보여줍니다.

```
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
import "net"

// ...

httpClient := awshttp.NewBuildableClient().WithDialerOptions(func(d *net.Dialer) {
    d.KeepAlive = -1
    d.Timeout = time.Millisecond*500
})
```

### 설정
<a name="settings"></a>

#### Dialer.KeepAlive
<a name="dialerkeepalive"></a>

 이 설정은 활성 네트워크 연결의 연결 유지 기간을 나타냅니다.

 연결 유지를 비활성화하려면 음수 값으로 설정합니다.

 프로토콜 및 운영 체제에서 지원하는 경우 연결 유지를 활성화하려면 **0**으로 설정합니다.

 연결 유지를 지원하지 않는 네트워크 프로토콜 또는 운영 체제는 이 필드를 무시합니다. 기본적으로 TCP는 연결 유지를 활성화합니다.

 [https://golang.org/pkg/net/\$1Dialer.KeepAlive](https://golang.org/pkg/net/#Dialer.KeepAlive) 참조 

 `KeepAlive`를 **time.Duration**으로 설정합니다.

#### Dialer.Timeout
<a name="dialertimeout"></a>

 이 설정은 다이얼이 연결이 생성되기를 기다리는 최대 시간을 나타냅니다.

 기본값은 30초입니다.

 [https://golang.org/pkg/net/\$1Dialer.Timeout](https://golang.org/pkg/net/#Dialer.Timeout) 참조 

 `Timeout`를 **time.Duration**으로 설정합니다.

## 운송
<a name="transport"></a>

 `BuildableHTTPClient`는 수정된 [운송](https://golang.org/pkg/net/http#Transport) 옵션으로 클라이언트를 구성하기 위한 빌더 메커니즘을 제공합니다.

### 프록시 구성
<a name="configuring-a-proxy"></a>

 인터넷에 직접 연결할 수 없는 경우 Go 지원 환경 변수(`HTTP_PROXY`/`HTTPS_PROXY`)를 사용하거나 사용자 지정 HTTP 클라이언트를 생성하여 프록시를 구성할 수 있습니다. 다음 예제에서는 `PROXY_URL`을 프록시 엔드포인트로 사용하도록 클라이언트를 구성합니다.

```
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
import "net/http"

// ...

httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) {
    proxyURL, err := url.Parse("PROXY_URL")
    if err != nil {
        log.Fatal(err)
    }
    tr.Proxy = http.ProxyURL(proxyURL)
})
```

### 기타 설정
<a name="other-settings"></a>

 다음은 HTTP 클라이언트를 조정하기 위해 수정할 수 있는 몇 가지 다른 `Transport` 설정입니다. 여기에 설명되지 않은 추가 설정은 [전송](https://golang.org/pkg/net/http/#Transport) 유형 설명서에서 확인할 수 있습니다. 다음 예제와 같이 이러한 설정을 적용할 수 있습니다.

```
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
import "net/http"

// ...

httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) {
    tr.ExpectContinueTimeout = 0
    tr.MaxIdleConns = 10
})
```

#### Transport.ExpectContinueTimeout
<a name="transportexpectcontinuetimeout"></a>

 요청에 "Expect: 100-continue" 헤더가 있는 경우 이 설정은 요청 헤더를 완전히 작성한 후 서버의 첫 번째 응답 헤더를 기다리는 최대 시간을 나타냅니다. 이 시간에는 요청 헤더를 보내는 시간이 포함되지 않습니다. HTTP 클라이언트는 이 제한 시간이 소진된 후 페이로드를 전송합니다.

 기본값은 1초입니다.

 제한 시간이 없으면 **0**으로 설정하고 대기 없이 요청 페이로드를 전송합니다. 한 가지 사용 사례는 나중에 표시된 함수에서 Amazon S3를 사용하는 것과 유사한 세션을 수행하는 프록시 또는 타사 서비스에 문제가 발생하는 경우입니다.

 [https://golang.org/pkg/net/http/\$1Transport.ExpectContinueTimeout](https://golang.org/pkg/net/http/#Transport.ExpectContinueTimeout) 참조 

 `ExpectContinue`를 **time.Duration**으로 설정합니다.

#### Transport.IdleConnTimeout
<a name="transportidleconntimeout"></a>

 이 설정은 유휴 네트워크 연결을 HTTP 요청 간에 유지하는 최대 시간을 나타냅니다.

 제한이 없는 경우 **0**으로 설정합니다.

 [https://golang.org/pkg/net/http/\$1Transport.IdleConnTimeout](https://golang.org/pkg/net/http/#Transport.IdleConnTimeout) 참조 

 `IdleConnTimeout`를 **time.Duration**으로 설정합니다.

#### Transport.MaxIdleConns
<a name="transportmaxidleconns"></a>

 이 설정은 모든 호스트에서 유휴(keep-alive) 연결의 최대 수를 나타냅니다. 이 값을 늘리는 한 가지 사용 사례는 동일한 클라이언트에서 단기간에 많은 연결이 표시되는 경우입니다.

 **0**은 제한이 없음을 의미합니다.

 [https://golang.org/pkg/net/http/\$1Transport.MaxIdleConns](https://golang.org/pkg/net/http/#Transport.MaxIdleConns) 참조 

 `MaxIdleConns`를 **int**로 설정합니다.

#### Transport.MaxIdleConnsPerHost
<a name="transportmaxidleconnsperhost"></a>

 이 설정은 호스트당 유지할 유휴(keep-alive) 연결의 최대 수를 나타냅니다. 이 값을 늘리는 한 가지 사용 사례는 동일한 클라이언트에서 단기간에 많은 연결이 표시되는 경우입니다.

 기본값은 호스트당 두 개의 유휴 연결입니다.

 DefaultMaxIdleConnsPerHost를 사용하려면 **0**으로 설정합니다. (2) 

 [https://golang.org/pkg/net/http/\$1Transport.MaxIdleConnsPerHost](https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost) 참조 

 `MaxIdleConnsPerHost`를 **int**로 설정합니다.

#### Transport.ResponseHeaderTimeout
<a name="transportresponseheadertimeout"></a>

 이 설정은 클라이언트가 응답 헤더를 읽을 때까지 기다리는 최대 시간을 나타냅니다.

 클라이언트가 이 기간 내에 응답의 헤더를 읽을 수 없는 경우 제한 시간 오류와 함께 요청이 실패합니다.

 장기 실행 Lambda 함수를 사용할 때는 Lambda 함수가 완료되거나 시간 초과될 때까지 작업이 응답 헤더를 반환하지 않으므로 이 값을 신중하게 설정하세요. 그러나 \$1\$1 InvokeAsync\$1\$1 API 작업에서 이 옵션을 계속 사용할 수 있습니다.

 기본값은 제한 시간 없음이며 영구적으로 기다립니다.

 [https://golang.org/pkg/net/http/\$1Transport.ResponseHeaderTimeout](https://golang.org/pkg/net/http/#Transport.ResponseHeaderTimeout) 참조 

 `ResponseHeaderTimeout`를 **time.Duration**으로 설정합니다.

#### Transport.TLSHandshakeTimeout
<a name="transporttlshandshaketimeout"></a>

 이 설정은 TLS 핸드셰이크가 완료될 때까지 대기하는 최대 시간을 나타냅니다.

 기본값은 10초입니다.

 0은 제한 시간이 없음을 의미합니다.

 [https://golang.org/pkg/net/http/\$1Transport.TLSHandshakeTimeout](https://golang.org/pkg/net/http/#Transport.TLSHandshakeTimeout) 참조 

 `TLSHandshakeTimeout`를 **time.Duration**으로 설정합니다.