Skip to content

성능 최적화

프리셋 설정 비교

지표DefaultSecurePerformanceMinimal
Request 타임아웃180s15s60s180s
MaxIdleConns502010010
MaxConnsPerHost105202
MaxRetries3130
MaxResponseBodySize10MB5MB50MB1MB
HTTP/2활성화활성화활성화활성화
Cookies비활성화비활성화활성화비활성화
SSRF 방어활성화활성화활성화활성화
FollowRedirects활성화비활성화활성화비활성화

시나리오별 선택

시나리오추천 프리셋조정 제안
범용 웹 서비스Default-
사용자 제공 URL 처리Secure-
내부 마이크로서비스 고동시성PerformanceMaxIdleConns 증가
일회성 스크립트Minimal-
파일 다운로드 서비스PerformanceMaxResponseBodySize 증가
금융/의료 APISecure + 커스텀감사 미들웨어 추가
go
// 고처리량 시나리오
client, _ := httpc.New(httpc.PerformanceConfig())

// 프리셋 기반 미세 조정
cfg := httpc.PerformanceConfig()
cfg.Timeouts.Request = 120 * time.Second
cfg.Connection.MaxIdleConns = 200
client, _ := httpc.New(cfg)

객체 풀 재사용

HTTPC 는 내부적으로 엔진 응답 객체와 문자열 빌더를 sync.Pool 로 재사용하여 GC 부하를 줄이며, Result 는 매 요청마다 새로 생성되어 GC 가 자동 회수합니다:

go
result, err := client.Get(url)
if err != nil {
    return err
}
// Result 는 매 요청마다 새로 생성, GC 가 자동 회수, 수동 해제 불필요

TIP

고동시성 시나리오에서 객체 풀 재사용은 GC 부하를 크게 줄일 수 있습니다.

성능 안티패턴

안티패턴원인올바른 방법
매 요청마다 클라이언트 생성연결 재사용 불가전역 클라이언트 재사용
과도한 MaxResponseBodySize메모리 점유합리적인 제한 설정
핫 경로에서 result.String() 사용문자열 구성 오버헤드Body() 직접 사용

다음 단계