API Circuit Breaker 패턴 (장애 보호, 지연 증가, 복구 전략)
Circuit Breaker를 처음 도입할 때 이게 만능 해결책인 줄 알았습니다. 외부 API 장애가 시스템 전체를 마비시키는 상황을 몇 번 겪고 나니 "이거 하나만 적용하면 끝"이라고 생각했거든요. 그런데 막상 운영해보니 생각보다 복잡했습니다. 장애는 막았는데 정상 요청까지 차단되는 경우가 생기더군요. 실패 기준을 어떻게 설정하느냐에 따라 시스템이 너무 예민해지거나 반대로 둔감해지는 문제가 반복됐습니다. 이 글에서는 제가 현장에서 직접 겪은 Circuit Breaker의 양면성과 실제 적용 과정에서 마주친 문제들을 데이터와 함께 정리해봤습니다. 장애 보호 메커니즘과 실제 효과 Circuit Breaker의 핵심 기능은 장애가 발생한 서비스로의 요청을 차단하여 연쇄 장애를 막는 것입니다. 분산 시스템에서는 하나의 서비스가 응답하지 않으면 이를 호출하는 상위 서비스도 대기 시간이 길어지면서 스레드 풀이 고갈되는 문제가 발생합니다. 이런 상황이 반복되면 전체 시스템이 연쇄적으로 마비될 수 있습니다. 제가 운영했던 시스템에서는 외부 결제 API 하나가 다운되자 내부 주문 서비스까지 타임아웃이 연쇄적으로 발생했습니다. 당시 모니터링 데이터를 확인해보니 응답 시간이 평소 200ms에서 15초 이상으로 치솟았고, 전체 요청의 약 70%가 실패 상태였습니다. Circuit Breaker를 도입한 후에는 실패율이 5% 이하로 떨어졌습니다. 회로가 열리면서 장애 서비스로의 요청이 즉시 차단됐고, 나머지 시스템은 정상 작동을 유지할 수 있었습니다. Circuit Breaker는 크게 세 가지 상태로 동작합니다. Closed 상태에서는 모든 요청이 정상적으로 통과하고, 일정 실패 횟수(threshold)를 초과하면 Open 상태로 전환되어 요청을 차단합니다. 그리고 일정 시간이 지나면 Half-Open 상태로 넘어가 일부 요청만 허용하면서 서비스 복구 여부를 확인합니다. 이 메커니즘 덕분에 장애 서비스에 대한 불필요한 자원 낭비를 막고 전체 시스템의 가...