외부 API 호출 재시도

hye_·2025년 7월 25일
0

MSA 서비스를 개발하면서 외부 API를 호출하는 일이 많은데, 외부 API 호출에 실패할 경우 재시도를 적용할 때, 사용했던 2가지 방법에 대해 기록.

Queue 를 사용한 재시도

큐에 Delay 적용하여 재시도 횟수 별로 시간 차를 두어 호출하게 한다.

정보 유실이 일어나면 안되는 메시지나 빠르게 정보를 취합하는 것 보다 확실한 이벤트 전달이 중요할 때.
Ex) 외부 서비스 웹 훅 이벤트 연동 등,,

  • 장점
    큐에 저장되기 때문에 서버 재시작 등으로 정보가 유실되지 않는다.⭐
    메인 서버 트랜잭션과 분리되어 있기 때문에 서버 부하를 최소화 한다.
    큐 시스템 자체 설정에 따라 대용량 트래픽에 대응이 가능하다.

  • 단점
    기능 구현에 복잡성이 있다.
    큐 시스템 운영 및 모니터링이 필요하다.

Resilience4j의 Retry를 활용한 재시도

RetryConfig 에 Duration 규칙을 두어 재시도 횟수별로 시간 차를 두었다.

Resilience4j의 Retry를 사용할 경우 시간 차를 길게 둘 수 없고 너무 많은 호출에 적용하면 서버 부하가 예상된다.
또한 데이터를 생성하거나 수정하는 호출에 경우 멱등성이 회손 될 가능성이 있다.
그렇기 때문에 호출 빈도수가 높고, 서비스 노출성이 높은 외부 API 조회성 호출에 적용하였다.

이 경우 서버 재시작으로 정보가 유실 되어도 Client 단에서 재접속시 정보를 획득 할 수 있고, 단기간 내에 정보 취득이 필요하다고 판단하여 이 방법을 선택하였다.

EX) 서비스에 필요한 정보를 외부 API를 통해 가져오는 건

  • 장점
    구현이 간단하다.
    JVM 내에서 처리 가능하다.

  • 단점
    재시도 대기 중인 요청은 Thread와 자원을 점유하기 때문에 서버 메모리에 부담이 된다.
    서버 재시작 등의 이슈가 있을 시 재시도 정보가 유실 될 수 있다.
    텀이 긴 재시도는 불가능 하다.

0개의 댓글