"net/http: TLS handshake timeout"
"net/http: TLS handshake timeout" 에러 메시지는 말 그대로 TLS handshake 중에 타임아웃이 났다는 뜻입니다.
외부 서비스 API 호출 시 나온 상황인데 해당 시간 대에 트래픽이 급증하여 나온 것으로 보여집니다.
문제를 해결하는 방법은 요청 성격에 따라 다르겠지만 몇번 다시 호출해 보고 그래도 안되면 다른 서비스(이럴 때를 대비해 미리 준비한 다른 외부 서비스)를 이용하는게 좋다고 생각합니다.
retry와 timeout 은 요청 성격에 상황에 따라 조절하면 될텐데 여기서는 timeout 을 조절하는 방법에 대해 다루겠습니다.
go 기본 패키지에서 기본 handshake timeout 이 10초입니다.
https://go.dev/src/net/http/transport.go
var DefaultTransport RoundTripper = &Transport{
Proxy: ProxyFromEnvironment,
DialContext: defaultTransportDialContext(&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}),
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
기본 handshake timeout 을 바꾸려면 http client 만들 때 TLSHandshakeTimeout 옵션을 주면 됩니다.
tr := &http.Transport{
TLSHandshakeTimeout: 60 * time.Second, // 60초로 변경
}
client := &http.Client{Transport: tr}
[Golang]time.Time 구조체 기본값은 무엇일까요 (0) | 2022.07.08 |
---|---|
[Golang]싱글톤(singleton) 패턴 구현하기 (0) | 2022.07.01 |
[Golang]UUID 만들기 (0) | 2022.06.24 |
[Golang]PNG 파일 JPG 로 변환하기 (0) | 2022.06.24 |
[Golang]config 파일 관리는 viper 괜찮아요 (0) | 2022.06.16 |