문제
PR #29에서 webhook.Sender에 공유 *http.Transport를 도입했으나, 현재 구현이 &http.Transport{} 제로값을 사용함.
http.DefaultTransport의 운영 설정이 적용되지 않음:
TLSHandshakeTimeout: 0 → TLS 핸드셰이크 무기한 대기 가능 (client.Timeout이 최종 방어선이나 취약)
IdleConnTimeout: 0 → 유휴 커넥션 만료 없이 누적
MaxIdleConns: 0 → 제한 없음 (DefaultTransport는 100)
개선안
http.DefaultTransport.Clone()을 기반으로 Transport를 생성:
func NewSender() *Sender {
base := http.DefaultTransport.(*http.Transport).Clone()
insecure := http.DefaultTransport.(*http.Transport).Clone()
insecure.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} //nolint:gosec
return &Sender{transport: base, insecureTransport: insecure}
}
영향 범위
internal/adapter/output/webhook/sender.go
- 동작 변화 없음 (structural 변경)
참고
문제
PR #29에서
webhook.Sender에 공유*http.Transport를 도입했으나, 현재 구현이&http.Transport{}제로값을 사용함.http.DefaultTransport의 운영 설정이 적용되지 않음:TLSHandshakeTimeout: 0→ TLS 핸드셰이크 무기한 대기 가능 (client.Timeout이 최종 방어선이나 취약)IdleConnTimeout: 0→ 유휴 커넥션 만료 없이 누적MaxIdleConns: 0→ 제한 없음 (DefaultTransport는 100)개선안
http.DefaultTransport.Clone()을 기반으로 Transport를 생성:영향 범위
internal/adapter/output/webhook/sender.go참고
http.DefaultTransport기본값:MaxIdleConns: 100,IdleConnTimeout: 90s,TLSHandshakeTimeout: 10s