WEBBOOK CHAPTER

Spring Boot 4.1, 시작부터 런칭까지: 33장. 외부 API client에 시간 예산을 준다

33장. 외부 API client에 시간 예산을 준다

한 요청의 전체 deadline이 2초인데 directory와 notification 각각 3회·2초 retry를 하면 thread와 connection을 고갈시킨다. DNS·connect·TLS·read timeout과 전체 deadline을 구분하고 남은 시간을 다음 호출에 전달한다. retry는 일시 오류와 멱등한 operation만 제한적으로 수행하며 exponential backoff와 jitter를 쓴다.

circuit breaker는 장애를 고치는 장치가 아니라 실패를 빠르게 제한하는 장치다. fallback이 오래된 위험 정보를 정상처럼 보이게 하면 더 위험하다. directory가 실패하면 새 인계 생성은 중단하되 이미 저장된 인계 조회는 가능하게 하는 식으로 업무별 degradation을 정한다. bulkhead로 알림 지연이 핵심 API thread를 소진하지 않게 한다.

WireMock 또는 provider sandbox 계약 테스트에서 200, schema 변화, 429 Retry-After, 500, slow body, connection reset을 재현한다. 관측에는 provider, operation, result class, latency, retry count를 기록하고 URL query·body의 개인정보는 제거한다.