피드로 돌아가기
Dev.toBackend
원문 읽기
Business Logic 보호를 위한 Adapter 기반 Resilience 설계
Retries and Circuit Breakers Belong in the Adapter, Not Your Use Case
AI 요약
Context
Use Case 내부에 Retry 루프와 Sleep 타이머가 혼재되어 비즈니스 규칙이 가려지는 문제 발생. 네트워크 장애 대응 로직이 도메인 계층으로 누출되어 코드 중복 및 유지보수 효율성 저하 초래.
Technical Solution
- Port Interface 도입을 통한 Use Case와 외부 인프라 간의 추상화 계층 형성
- HttpPaymentGateway 구현체를 통한 HTTP 상태 코드 기반의 Domain Exception 변환 처리
- Decorator Pattern을 적용하여 RetryingPaymentGateway로 Retry 로직을 캡슐화
- PaymentGatewayUnavailable과 같은 Transient Failure만 선별적으로 재시도하는 필터링 메커니즘 구축
- Exponential Backoff 전략을 Decorator 내부로 격리하여 비즈니스 로직의 순수성 유지
- IdempotencyKey 전달을 통한 재시도 과정의 중복 결제 방지 및 데이터 정합성 보장
실천 포인트
- Use Case 내에 for/while 루프를 이용한 Retry 로직이 존재하는지 검토 - 네트워크 오류(Transient Failure)와 비즈니스 오류(Domain Failure)를 명확히 구분하여 예외 처리 - Resilience 로직 변경 시 Use Case 수정 없이 설정값 변경만으로 대응 가능한 구조인지 확인 - 외부 API 호출부의 재시도 로직을 Decorator 또는 Middleware 계층으로 분리하여 테스트 용이성 확보