Architecture

서킷 브레이커 패턴(Circuit Breaker Pattern) 이란

TedDev 2024. 12. 21. 22:52
728x90

서킷 브레이커 패턴(Circuit Breaker Pattern)은 마이크로서비스 아키텍처에서 시스템의 안정성과 탄력성을 향상시키기 위해 사용하는 중요한 설계 패턴이다. 이 패턴의 주요 목적은 서비스 간의 장애 전파를 방지하고 실패한 서비스와의 불필요한 호출을 줄여 시스템의 복구를 돕는 것이다.

 

주요 개념

  1. 회로 차단기처럼 동작
    서킷 브레이커는 전기 회로 차단기와 유사하게 작동한다. 시스템에서 특정 조건(예: 실패 횟수나 시간 초과)이 발생하면 서킷 브레이커는 "열림(open)" 상태가 되어 추가 요청을 차단한다. 서비스가 복구되었다고 판단될 때 "닫힘(closed)" 상태로 돌아간다.
  2. 상태
    서킷 브레이커는 다음 세 가지 상태를 가집니다:
    • Closed (닫힘) : 정상 상태로 모든 요청이 서비스로 전달된다.
    • Open (열림) : 서비스가 비정상 상태로 판단되어 모든 요청을 즉시 실패 처리한다.
    • Half-Open (반열림) : 제한된 수의 요청을 허용하여 서비스가 복구되었는지 테스트한다. 성공적인 응답이 오면 "닫힘" 상태로 돌아간다.

동작 흐름

  1. 정상 상태 (Closed)
    • 서킷 브레이커는 요청을 서비스로 전달한다.
    • 요청 실패율이 설정된 임계치를 초과하면 "열림(Open)" 상태로 전환한다.
  2. 열림 상태 (Open)
    • 추가적인 요청은 즉시 차단되고 대체 로직(예: 캐싱된 데이터 반환, 기본값 제공)을 수행한다.
    • 일정 시간이 지나면 "반열림(Half-Open)" 상태로 전환된다.
  3. 반열림 상태 (Half-Open)
    • 제한된 수의 요청을 허용하여 서비스 상태를 확인한다.
    • 요청이 성공하면 "닫힘(Closed)" 상태로 돌아가고 실패하면 다시 "열림(Open)" 상태가 된다.

서킷 브레이커 패턴의 장점

  1. 장애 확산 방지
    한 서비스의 장애가 다른 서비스로 전파되는 것을 막아 시스템 전체의 안정성을 높인다.
  2. 시스템 성능 보호
    실패한 서비스에 반복적으로 호출을 시도하지 않으므로 리소스를 절약하고 응답 시간을 단축한다.
  3. 복구 지원
    "반열림" 상태를 통해 서비스가 정상으로 돌아오면 빠르게 복구할 수 있다.

사용 사례

  • 분산 시스템에서의 네트워크 오류 처리
  • 서로 다른 마이크로서비스 간 호출
  • 외부 API 호출에서의 제한된 재시도 로직

 

구현 예시 (Java - Resilience4j 라이브러리 사용)

CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
    .failureRateThreshold(50) // 실패율 임계치
    .waitDurationInOpenState(Duration.ofSeconds(10)) // Open 상태 유지 시간
    .slidingWindowSize(20) // 슬라이딩 윈도우 크기
    .build();

CircuitBreaker circuitBreaker = CircuitBreaker.of("myCircuitBreaker", circuitBreakerConfig);

Supplier<String> decoratedSupplier = CircuitBreaker.decorateSupplier(
    circuitBreaker, 
    () -> someRemoteServiceCall()
);

Try<String> result = Try.ofSupplier(decoratedSupplier)
    .recover(throwable -> "Fallback response"); // 대체 로직
 

결론

서킷 브레이커 패턴은 마이크로서비스 아키텍처에서 필수적인 안정성 확보 기술 중 하나다. 이를 통해 시스템은 장애에 더욱 강건해지고 장애 상황에서도 유연한 대처가 가능하다.

반응형

'Architecture' 카테고리의 다른 글

저장소 분리 패턴  (2) 2024.12.25
마이크로서비스 통신 패턴 (동기, 비동기)  (0) 2024.12.25
MSA에서 인증/인가 패턴  (0) 2024.12.21
BFF 패턴의 개념  (1) 2024.12.20
API 게이트웨이 패턴이란?  (2) 2024.12.20