핵심 인사이트 (3줄 요약)
- 본질: 서킷 브레이커(Circuit Breaker)는 특정 마이크로서비스(MSA) 호출 실패가 반복될 때, 호출을 즉시 차단하고 에러를 반환하여 시스템 전체로 장애가 번지는 것을 막는 패턴이다.
- 가치: 장애가 난 서비스 때문에 호출자(Caller)의 스레드가 무한 대기하며 리소스가 고갈되는 '연쇄 장애(Cascading Failure)'를 방지하고 시스템의 복원력을 높인다.
- 판단 포인트: 서비스 간 호출이 많은 분산 아키텍처에서 타임아웃만으로는 부족한 장애 격리(Isolation)가 필요할 때 도입한다.
Ⅰ. 개요 및 필요성
MSA 환경에서 서비스 A가 서비스 B를 호출하는데, B가 응답이 없거나 매우 느리다면 A의 스레드는 응답을 기다리며 계속 점유된다. A를 호출하는 다른 서비스들도 줄줄이 대기 상태에 빠지고, 결국 시스템 전체의 리소스가 바닥나 서버가 다운된다. 서킷 브레이커는 이러한 '스파게티식 장애 전파'를 차단하기 위해 고안되었다. 특정 횟수 이상 실패가 발생하면 아예 연결을 끊어버리고, 미리 준비된 '대체 응답(Fallback)'을 즉시 반환하여 호출자가 기다리지 않게 만든다.
📢 섹션 요약 비유: 서킷 브레이커는 가정집의 '두꺼비집'이다. 과전류(장애)가 흐르면 자동으로 전기를 끊어 집 전체에 불이 나는 것(전체 마비)을 막아준다.
Ⅱ. 아키텍처 및 핵심 원리
서킷 브레이커의 3가지 상태
- Closed (닫힘):
- 정상 상태. 모든 요청이 서비스로 전달된다.
- 실패 횟수가 임계치를 넘으면 'Open' 상태로 전환된다.
- Open (열림):
- 장애 상태. 모든 요청을 즉시 차단하고 바로 'Fallback' 응답을 보낸다.
- 일정 시간(Sleep Window)이 지나면 'Half-Open' 상태가 된다.
- Half-Open (반쯤 열림):
- 복구 확인 상태. 소수의 요청만 보내본다.
- 성공하면 'Closed'로 돌아가고, 실패하면 다시 'Open'이 된다.
폴백 (Fallback) 전략
장애 시 사용자에게 에러 화면 대신 미리 준비한 기본 데이터나 캐시 데이터를 보여주는 기능이다. "현재 서비스가 원활하지 않습니다"라는 친절한 메시지를 보내는 것이 대표적이다.
📢 섹션 요약 비유: Open 상태일 때 제공하는 대체 응답은 식당의 '품절 안내'와 같다. 메뉴가 없으면 하염없이 기다리게 하지 않고 바로 "품절입니다"라고 말해주는 것이다.
Ⅲ. 비교 및 연결
리트라이 (Retry) vs 서킷 브레이커
| 구분 | 리트라이 (Retry) | 서킷 브레이커 (Circuit Breaker) |
|---|---|---|
| 주요 목적 | 일시적 네트워크 오류 해결 (기다리면 될 때) | 시스템 보호 및 장애 전파 차단 (안 될 때) |
| 동작 방식 | 다시 시도하여 성공을 노림 | 시도를 멈추고 즉시 포기함 |
| 주요 위험 | 서버 부하를 가중할 수 있음 | 서비스 일부 기능을 사용할 수 없게 됨 |
| 적합 상황 | 네트워크 찰나의 오류, 멱등성 보장 작업 | 서버 다운, DB 부하, API 응답 지연 |
📢 섹션 요약 비유: 리트라이는 문이 잠겼을 때 계속 두드려보는 것이고, 서킷 브레이커는 문 앞에 '수리 중' 표지판을 걸고 아예 안 가는 것이다.
Ⅳ. 실무 적용 및 기술사 판단
기술사 핵심 포인트:
- 벌크헤드 (Bulkhead) 패턴 결합: 선박의 격벽처럼 서비스별 스레드 풀을 분리하여 한 서비스의 장애가 다른 서비스의 리소스를 뺏지 못하게 격리한다.
- 임계치 설정: 에러율(Failure Rate)과 호출 지연 시간(Slow Call) 기준을 서비스 성격에 맞게 튜닝해야 한다.
- 라이브러리 현황: 과거에는 Netflix Hystrix가 대세였으나, 현재는 Java 진영에서
Resilience4j가 표준이며, 클라우드 네이티브 환경에서는Istio와 같은 서비스 메시의 기능을 사용한다.
📢 섹션 요약 비유: 서킷 브레이커는 시스템의 '퓨즈'다. 한 부품이 타버려도 전체 기계가 고장 나지 않게 스스로 연결을 끊어 보호한다.
Ⅴ. 기대효과 및 결론
서킷 브레이커는 '실패를 허용하고 우아하게 대응하는(Fail Fast)' 아키텍처의 핵심이다. 완벽하게 장애가 없는 시스템은 불가능하므로, 장애가 발생했을 때 얼마나 빠르게 격리하고 부분적인 기능이라도 유지하느냐가 시스템의 신뢰도를 결정한다. 기술사 시험에서는 분산 시스템의 복원력(Resilience) 확보 방안으로 서킷 브레이커와 폴백, 벌크헤드 패턴을 묶어서 설명하는 것이 정석이다.
📢 섹션 요약 비유: 서킷 브레이커는 IT의 '자동 차단 밸브'다. 가스가 새면(장애) 밸브를 자동으로 잠가서 큰 폭발(전체 시스템 마비)이 일어나는 것을 막아준다.
📌 관련 개념 맵
| 개념 | 연관 키워드 | 관계 |
|---|---|---|
| Fallback | 대체 응답, 캐시 데이터 | 장애 시 사용자 경험을 유지하는 수단 |
| Bulkhead | 스레드 풀 분리, 격리 | 서킷 브레이커와 함께 쓰이는 자원 격리 패턴 |
| Resilience4j | Java 라이브러리 | 현재 가장 많이 쓰이는 서킷 브레이커 구현 도구 |
| mTLS | Istio, 인프라 차단 | 서비스 메시를 통해 코드 없이 차단 구현 가능 |
👶 어린이를 위한 3줄 비유 설명
- 친구가 너무 아파서 대답을 못 할 때, 계속 물어보지 않고 잠깐 기다려주는 마음씨 착한 차단기예요.
- 문제가 생긴 서비스에 계속 전화를 걸어서 전화를 먹통으로 만들지 않게 도와줘요.
- 잠깐 쉬었다가 친구가 나았는지 확인하고 다시 사이좋게 지내요.