본문 바로가기
Back-End

동기 방식으로 외부 서비스 호출 시 장애 조치 방안

by 코젼 2025. 3. 18.
728x90
반응형

외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능악영향을 줄 수 있다.

이를 해결하기 위한 가장 기본적인 방법: 타임아웃 설정

  • 커넥션 타임아웃
  • 리드 타임아웃
  • HTTP 커넥션 풀 타임아웃

특정 서비스의 장애가 전체 서비스에 영향을 주는 경우 해결 방안 예시

1. A 서비스, B 서비스, C 서비스 연동 코드가 HTTP 커넥션 풀을 공유한다.
2. A 서비스의 장애로 응답 시간 지연이 발생하는 경우
    2-1. 풀에 남은 커넥션이 점점 줄어든다.
    2-2. 풀에서 커넥션을 구하는 대기 시간이 증가한다.
    2-3. B, C 서비스에 대한 연동도 함께 대기한다.

이 경우는 벌크헤드 패턴을 적용해 볼 수 있다.

벌크헤드 패턴: 기능의 종류마다 자원 사용을 분리하는 것 자원을 격리하여 서비스 일부에 장애가 발생해도 전체로 전파되지 않도록 보장해 주는 패턴

위 예시에서는 외부 서비스마다 다른 HTTP 커넥션 풀을 사용하도록 벌크헤드 패턴을 적용할 수 있다. 서로 다른 커넥션 풀을 사용하기 때문에 A 서비스에 문제가 발생해도 B,C의 영향최소화할 수 있다.

외부 서비스 장애가 계속 발생한다면?

지속되는 외부 서비스 장애로 타임아웃에 의한 서비스 에러가 발생할 수 있다. 외부 서비스가 장애가 발생했는데도 불구하고 운영 서버는 계속 요청을 보내게 되니, 불필요하게 응답 시간이 저해되고, 처리량감소하게 된다.

이 문제를 해결하기 위해서는 서킷 브레이커를 적용해 볼 수 있다.

서킷 브레이커: 오류가 지속되는 경우 일정 시간 동안 기능 실행을 차단할 수 있다. 서킷 브레이커가 빠른 실패를 도와주기 때문에 외부 서비스 장애에 의한 응답 시간 증가를 예방할 수 있다.

728x90
반응형

'Back-End' 카테고리의 다른 글

단위 테스트와 통합 테스트의 차이  (0) 2025.03.24
TCP 3-way handshake  (0) 2025.03.19
동일성과 동등성의 차이  (2) 2025.03.14
equals와 hashCode를 함께 재정의 해야하는 이유  (0) 2025.03.13
JPA ID 생성 전략  (0) 2025.03.12

댓글