Skip to content

feat(core): HTTP 재시도/백오프 + 전송계층 에러분류 (opt-in)#37

Closed
ArcSolver wants to merge 1 commit into
feat/core-hardening-quickwinsfrom
feat/core-http-resilience
Closed

feat(core): HTTP 재시도/백오프 + 전송계층 에러분류 (opt-in)#37
ArcSolver wants to merge 1 commit into
feat/core-hardening-quickwinsfrom
feat/core-http-resilience

Conversation

@ArcSolver

Copy link
Copy Markdown
Owner

무엇을 / 왜

감사의 최대 레버리지 코어 약점 상환 — 행복경로 전용이던 http 핫패스에 견고성 원시기능을 코어 한 곳에 도입. 20개+ 서비스로 복붙되던 429/일시오류 처리를 옵트인으로 흡수할 토대.

스택 PR: base가 feat/core-hardening-quickwins(#36)입니다. #36 머지 후 GitHub가 base를 main으로 자동 재지정합니다.

변경

  • _send() 단일 진입점으로 통합(_request_raw·get_text 공유). 모든 동사에 retry 인자 추가.
  • Retry(attempts, statuses=(429,503), backoff, respect_retry_after): 지수 백오프 + 응답 Retry-After(delta-seconds) 우선 존중.
  • NetworkError: 전송계층 실패(연결/타임아웃) 분류. 원본 httpx 예외를 __cause__로 보존.

핵심 설계 — 기본 동작 100% 무변경

retry 미지정(기본)이면 재시도 0회, 전송 예외는 원본 httpx 그대로 전파. zotero가 9곳에서 쓰는 except httpx.ConnectError를 깨지 않기 위해 래핑·재시도를 모두 opt-in으로 둠. 서비스는 필요 시 retry=Retry(...)로 점진 채택.

검증

864 passed(신규 5: 503 복구·Retry-After 존중·소진 시 UpstreamError·전송오류→NetworkError·기본 무재시도 raw httpx 전파) · ruff clean.

🤖 Generated with Claude Code

감사(전수 논증)의 최대 레버리지 코어 약점 상환 — 행복경로 전용이던 http 핫패스에
견고성 원시기능을 코어 한 곳에 도입. 20개+ 서비스로 복붙되던 429/일시오류 처리를
옵트인으로 흡수할 토대.

- _send() 단일 진입점으로 통합(_request_raw·get_text가 공유). 모든 동사에 retry 인자 추가.
- Retry(attempts, statuses=(429,503), backoff, respect_retry_after): 지수 백오프 + 응답
  Retry-After(delta-seconds) 우선 존중.
- NetworkError: 전송계층 실패(연결/타임아웃) 분류. 원본 httpx 예외를 __cause__로 보존.

핵심 설계: **기본값(retry 미지정)은 동작 완전 무변경** — 재시도 0회, 전송 예외는 원본 httpx
그대로 전파. zotero가 9곳에서 쓰는 `except httpx.ConnectError`를 깨지 않기 위해 래핑·재시도를
모두 opt-in으로 둠. 서비스는 필요 시 retry=Retry(...)로 점진 채택.

864 passed(신규 5: 503 복구·Retry-After 존중·소진 시 UpstreamError·전송오류→NetworkError·
기본 무재시도 raw httpx 전파) · ruff clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ArcSolver ArcSolver deleted the branch feat/core-hardening-quickwins June 4, 2026 17:22
@ArcSolver ArcSolver closed this Jun 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant