타임아웃과 헤더 설정
클라이언트 타임아웃, 사용자 지정 헤더 및 인증 토큰
타임아웃과 헤더 설정은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
클라이언트 수준 시간 제한
http.Client.Timeout을 설정해 요청과 응답에 걸리는 전체 시간을 제한합니다. 구성하기 가장 쉬운 시간 제한입니다.
client := &http.Client{Timeout: 10 * time.Second}전송 계층의 시간 제한
http.Transport를 통해 연결 설정 및 TLS 핸드셰이크의 시간 제한을 세밀하게 조정합니다:
t := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 5 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
TLSHandshakeTimeout: 5 * time.Second,
ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}컨텍스트 기반 시간 제한
컨텍스트 시간 제한은 요청마다 적용되며 하위 호출로 전파됩니다. 데드라인이 지나면 요청을 취소합니다.
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)요청 헤더 설정
req.Header.Set(대체) 또는 req.Header.Add(추가)로 요청에 헤더를 추가합니다:
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)일반적인 헤더
요청 본문에는 Content-Type, 원하는 응답 형식에는 Accept, 인증 토큰에는 Authorization, 클라이언트 식별에는 User-Agent를 사용합니다.
응답 헤더 읽기
resp.Header.Get(key)에서 응답 헤더를 읽습니다:
contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")유휴 연결 시간 제한
전송 계층에 IdleConnTimeout을 설정해 유휴 연결을 닫으십시오. 그러면 트래픽이 감소할 때 연결이 계속 쌓이는 것을 방지할 수 있습니다.
t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10TLS 구성
전송 계층의 tls.Config를 통해 TLS(최소 버전, 클라이언트 인증서)를 사용자 지정합니다:
t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}시간 제한 오류 감지
errors.As를 사용해 시간 제한 오류와 네트워크 오류를 구분합니다:
var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
// handle timeout
}요청별 시간 제한과 클라이언트 시간 제한
Client.Timeout은 모든 요청에 적용됩니다. 컨텍스트 시간 제한은 요청별로 적용되며 클라이언트 시간 제한보다 짧을 수 있습니다. 두 시간 제한이 모두 적용되며 더 짧은 쪽이 우선합니다.
연결 유지 비활성화
연결을 거의 열지 않는 단기 실행 프로그램에서는 전송 계층에 DisableKeepAlives: true를 설정해 연결 풀링 오버헤드를 피할 수 있습니다.
빠른 확인
http.Client.Timeout과 컨텍스트 시간 제한을 모두 설정하면 어느 쪽이 적용됩니까?
복습: 시간 제한과 헤더
핵심 내용:
- client.Timeout: 요청별 전체 시간 제한
- context.WithTimeout: 취소할 수 있고 전파되는 시간 제한
- 사용자 지정 헤더에는 req.Header.Set 사용
- 세밀하게 TLS, 연결, 유휴 시간 제한을 설정하려면 Transport 사용
자주 묻는 질문
“타임아웃과 헤더 설정” 강의는 무료인가요?
네 — “타임아웃과 헤더 설정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“타임아웃과 헤더 설정”에서 뭘 배우나요?
클라이언트 타임아웃, 사용자 지정 헤더 및 인증 토큰 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“타임아웃과 헤더 설정” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- HTTP 요청 보내기
- 타임아웃과 헤더 설정
- JSON 응답 디코딩
- 오류 처리와 재시도 로직