[STK6-01] Resilience4j 의존성 추가 + 공통 Rate Limiter 설정
작업 내용 (설계 의도)
변경 사항
Toss Open API의 API 그룹별 TPS 한도를 백엔드에서 자동으로 준수하기 위해 Resilience4j를 도입한다. 이 티켓은 STK6-02 (Gateway 적용)의 공통 병목 산출물로, 의존성·설정·공통 클래스·예외를 모두 확립한다.
변경 범위:
build.gradle.kts— Resilience4j 의존성 추가application.yml— resilience4j RateLimiter·CircuitBreaker 설정TossApiGroupenum — API 그룹 이름 관리TossRateLimiterFacade— RateLimiter + CircuitBreaker 조합 실행 공통 클래스TossRateLimitException— RateLimiter 초과 예외TossCircuitOpenException— CircuitBreaker OPEN 예외
다이어그램
클래스 의존
flowchart LR subgraph Common["common/infrastructure/toss"] FA[TossRateLimiterFacade] GRP[TossApiGroup] EX1[TossRateLimitException] EX2[TossCircuitOpenException] CFG[TossRateLimiterConfig] end FA --> GRP FA --> EX1 FA --> EX2 CFG --> FA
테스트 케이스
TossRateLimiterFacade를 직접 생성해 MARKET_DATA 그룹 10 req 연속 정상 실행한다TossRateLimiterFacade에서 11번째 req 시TossRateLimitException을 throw한다TossRateLimiterFacade에서 ACCOUNT 그룹 1 req 성공 → 2번째 reqTossRateLimitException을 throw한다TossRateLimiterFacadeCircuitBreaker 실패율 50% 초과 시TossCircuitOpenException을 throw한다TossRateLimiterFacade가RuntimeException을 throw하는 블록 실행 시 예외를 그대로 전파한다