외부 API 장애가 길어져 재시도 요청까지 쌓이고 있습니다. 서킷 브레이커를 추가하면 무엇을 중단하고, 언제 다시 요청을 보내야 하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
서킷 브레이커는 외부 API가 계속 실패할 때 호출을 잠시 막아 연결 풀·스레드·재시도 큐의 고갈이 상위 서비스로 번지는 것을 막습니다. 재시도는 일시 실패의 회복 기회를 주지만 지속 장애에서는 부하를 증폭합니다. 무엇을 실패로 세는지, 열린 동안 어떤 응답을 줄지, 제한된 시험 요청을 언제 허용할지부터 정하겠습니다.
실패를 분류한다
타임아웃·연결 실패·하위 5xx는 의존성 장애 신호가 될 수 있지만 입력 오류·권한 거부는 서버가 살아 있어도 요청 문제입니다. 이를 함께 집계하면 정상 요청까지 차단합니다. 최소 표본과 관찰 창을 두고 연속 실패·오류율 중 트래픽에 맞는 기준을 선택합니다. 열린 상태에서는 호출하지 않고 빠르게 실패하거나 대체 결과를 주되, 결제 확인 불능을 성공으로 위장하지 않고 처리 중·재조회 가능 상태로 남깁니다.
회복을 시험한다
시간이 됐다고 모든 요청을 통과시키면 회복 전 재폭발이 생깁니다. 반개방 상태(half-open)에서 제한된 시험 호출을 보내 성공률과 지연을 확인하고 점진적으로 닫힌 상태로 돌아갑니다. 시험 요청이 읽기와 쓰기, 지역과 응답 크기를 대표하는지 확인하고 쓰기 효과에는 멱등 조건을 둡니다.
브레이커는 deadline·큐 상한·동시 실행 제한·bulkhead를 대신하지 않습니다. 열리기 전 이미 느린 작업이 자원을 점유하기 때문입니다. 인스턴스별 브레이커는 단순하지만 전체 상태를 놓치고, 공유 브레이커는 통합 판단 대신 상태 저장소 장애를 추가합니다.
검증은 일시적 출렁임, 지속 5xx, 입력 오류, timeout, 회복 중 재실패를 주입해 열린 비율·빠른 실패 지연·하위 호출량·연결 점유·대체 결과를 봅니다. 목표는 외부 장애를 없애는 게 아니라 자원 고갈과 회복 시 재폭발을 막는 것입니다.
관찰 창과 계층별 재시도
최근 100건 중 50건 실패라는 기준은 트래픽이 충분할 때와 몇 분에 한 건일 때 의미가 다릅니다. 최소 표본, 시간 창, 느린 호출 비율을 함께 정하고 입력 오류를 제외합니다. 클라이언트가 취소한 요청을 하위 장애로 셀지도 원인을 보고 결정합니다. 반개방 시험은 별도 작은 동시성으로 제한하고, 오래된 닫힘 상태의 완료가 뒤늦게 도착해 새 상태를 덮지 않도록 상태 세대를 관리합니다.
상위 서비스가 세 번, 하위 클라이언트가 세 번 재시도하면 한 사용자 요청이 최대 아홉 호출로 늘 수 있습니다. 브레이커를 재시도 바깥에 둘지 안에 둘지에 따라 실패 한 건이 사용자 요청인지 실제 시도인지도 달라집니다. 집계 단위를 명시하고 전체 deadline과 재시도 예산을 공유해야 장애 부하를 예측할 수 있습니다.
대체 값은 기능의 정확성 요구에 따라 달라집니다. 추천은 마지막 결과나 빈 추천을 줄 수 있지만 결제 승인 불확정은 성공으로 반환할 수 없습니다. 열린 브레이커가 반환한 빠른 거절은 하위 호출 실패와 구분해 계측하고, 회복 후에도 다시 열린 횟수와 성공한 시험 요청의 지연을 확인하겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 하위 장애와 입력 오류를 분리한다.
- open·half-open·closed 전환을 설명한다.
- 브레이커와 deadline·동시성 제한을 나눈다.
- 대체 응답과 금전 처리의 불확실성을 남긴다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 모든 오류를 하위 장애로 센다.
- 브레이커가 큐까지 자동 제한한다고 말한다.
- 확인 불능 결제를 성공으로 응답한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.