[STK6-03] 임계치 통합 테스트 + 예외 핸들러 추가
작업 내용 (설계 의도)
변경 사항
RateLimiter 임계치까지의 정상 흐름과 초과 시 예외 발생을 검증하는 통합 테스트를 작성한다.
GlobalExceptionHandler 에 TossRateLimitException → 429, TossCircuitOpenException → 503 매핑을 추가한다.
변경 범위:
GlobalExceptionHandler— 2개 예외 핸들러 추가TossRateLimiterFacadeIntegrationTest— RateLimiter/CircuitBreaker 임계치 통합 테스트GlobalExceptionHandlerTest— 예외 → HTTP 상태코드 매핑 테스트
예외 매핑
| 예외 | HTTP 상태코드 | 응답 메시지 |
|---|---|---|
TossRateLimitException | 429 Too Many Requests | ”Toss API 요청 한도를 초과했습니다” |
TossCircuitOpenException | 503 Service Unavailable | ”Toss API를 일시적으로 사용할 수 없습니다” |
다이어그램
처리 흐름
sequenceDiagram participant C as Controller participant EH as GlobalExceptionHandler participant F as TossRateLimiterFacade C->>F: execute(MARKET_DATA) { block } F-->>C: TossRateLimitException C-->>EH: 예외 전파 EH-->>C: ResponseEntity(429)
테스트 케이스
- MARKET_DATA 그룹 10 req 연속 실행 시 모두 정상 완료한다
- MARKET_DATA 그룹 11번째 req 시
TossRateLimitException을 throw한다 - ACCOUNT 그룹 1 req 성공 → 2번째 req
TossRateLimitException을 throw한다 - ORDER 그룹 6 req 연속 성공 → 7번째 req
TossRateLimitException을 throw한다 - CircuitBreaker 실패율 50% 초과 (20건 슬라이딩 윈도우, 10건 실패) 시 OPEN 전이한다
- CircuitBreaker OPEN 상태에서 호출 시
TossCircuitOpenException을 즉시 throw한다 TossRateLimitException발생 시 HTTP 429 응답을 반환한다TossCircuitOpenException발생 시 HTTP 503 응답을 반환한다- 1초 대기 후 RateLimiter가 리셋되어 다시 정상 호출된다