429 응답의 CircuitBreaker 실패 기록 여부 선택
상태
승인
후보군
| 방안 | 설명 |
|---|---|
| 429를 failure로 기록 | TossRateLimitException 을 record-exceptions 에 등록해 CircuitBreaker 실패 카운트에 포함 |
| 429를 success로 기록 | 클라이언트 오류(4xx)로 간주해 CircuitBreaker 실패 카운트 제외 |
결정
429를 CircuitBreaker failure로 기록 — TossRateLimitException 을 record-exceptions 에 등록
결정 이유
- 429가 반복된다는 것은 클라이언트 코드에 문제가 있거나 Toss 서비스 제한이 강화됐음을 의미
- Circuit을 열어 추가 호출을 차단하는 것이 Toss API 서버 부하를 줄이는 올바른 대응
- 구조:
TossRateLimitException을record-exceptions에 등록하거나HttpClientErrorException.TooManyRequests를 직접 기록
검토 대안
| 방안 | 기각 이유 |
|---|---|
| 429를 success로 기록 | 429 반복 시에도 Circuit이 열리지 않아 Toss API 서버에 지속적인 부하를 가함 |
트레이드 오프
- 득: Toss API 부하 보호, 429 반복 시 자동 차단으로 운영 안정성 향상
- 실: RateLimiter 임계치 설정이 잘못된 경우 의도치 않게 Circuit이 열릴 수 있음