피드로 돌아가기
Dev.toBackend
원문 읽기
Resilience4j 도입으로 Timeout 한계를 극복한 Fail-Fast 구조 설계
After Fixing Thread Pool Exhaustion, A Reader Asked: Did You Add a Circuit Breaker? Here's What I Did Next
AI 요약
Context
Timeout 설정과 @async 기반 Thread Pool 격리만으로는 외부 서비스의 완전한 장애 상황에서 발생하는 리소스 낭비를 방지하지 못함. 모든 요청이 Timeout까지 대기하는 Fail-Slow 현상으로 인한 시스템 응답성 저하가 주요 병목 지점으로 파악됨.
Technical Solution
- Resilience4j 기반의 Circuit Breaker를 도입하여 장애 전파를 차단하는 Fail-Fast 메커니즘 구현
- sliding-window-size 10 및 failure-rate-threshold 50% 설정을 통한 동적 장애 판단 체계 구축
- OPEN 상태에서 10초간 호출을 완전히 차단하여 외부 서비스의 Recovery 시간 확보 및 내부 Thread 낭비 방지
- HALF-OPEN 상태에서 3회의 제한적 테스트 호출을 통해 서비스 정상화 여부를 검증하는 상태 전이 설계
- Bulkhead 패턴(Thread Isolation)과 Circuit Breaker를 결합하여 특정 의존성 장애가 전체 시스템으로 확산되는 것을 방지하는 다층 방어 구조 채택
- 장애 발생 시 즉각적인 Fallback 응답을 반환하여 사용자 경험 유지 및 시스템 가용성 확보
실천 포인트
1. 외부 API 호출 시 반드시 Timeout 설정 및 독립적인 Thread Pool 할당 여부 검토
2. 단순 Timeout을 넘어 장애 상황에서 즉시 응답하는 Circuit Breaker 도입 고려
3. 서비스 특성에 맞는 sliding-window-size와 failure-rate-threshold 임계치 정의
4. Circuit Breaker OPEN 상태 시 반환할 적절한 Fallback 로직 설계