2025. 2. 28. 14:35ㆍSpring Microservice/Microservices Patterns
📌 마이크로서비스 클라이언트 회복 탄력성 패턴(Microservice Client Resiliency Patterns)
마이크로서비스 아키텍처는 분산된 환경에서 운영되므로, 특정 서비스가 장애를 일으켰을 때 전체 시스템에 영향을 주지 않도록 설계해야 합니다.
이를 위해 클라이언트 측에서 장애를 감지하고 대응하는 회복 탄력성(Resiliency) 패턴을 적용할 수 있습니다.
📌 아래 그림에서는 다음 4가지 클라이언트 회복 탄력성 패턴을 소개합니다.

🔹 1. 클라이언트 측 부하 분산(Client-Side Load Balancing)
- 마이크로서비스는 다수의 인스턴스를 실행하여 확장성과 가용성을 높일 수 있음.
- 클라이언트는 서비스 디스커버리에서 가져온 엔드포인트 정보를 캐싱하고, 요청을 여러 인스턴스에 균등하게 분산.
- Spring Cloud LoadBalancer(기존 Ribbon) 또는 gRPC Load Balancer 같은 기술을 사용하여 구현 가능.
✅ 장점
✔ 부하를 여러 서비스 인스턴스로 분산하여 성능 향상
✔ 장애 발생 시 정상적인 인스턴스로 트래픽 자동 분배 가능
🔹 2. 회로 차단기 패턴(Circuit Breaker Pattern)
- 특정 서비스가 장애를 일으키거나 응답 속도가 느려지면, 클라이언트가 계속해서 해당 서비스로 요청을 보내면 안 됨.
- Circuit Breaker는 장애가 감지되면 일정 시간 동안 해당 서비스로의 호출을 차단하여 빠르게 실패 처리(fail fast)하도록 함.
- Spring Boot에서는 Resilience4j를 사용하여 구현 가능.
✅ 장점
✔ 느린 서비스로 인해 클라이언트가 리소스를 과도하게 소비하는 문제 방지
✔ 서비스 복구 후 자동으로 다시 요청 가능(open → half-open → closed)
🔹 3. 폴백 패턴(Fallback Pattern)
- 특정 서비스가 실패했을 때, 클라이언트가 대체 가능한 방법을 선택할 수 있도록 함.
- 예를 들어, 캐시된 데이터 반환, 기본값 제공, 다른 서비스 호출 등의 대체 로직을 수행.
- Hystrix(Deprecated) 또는 Resilience4j Fallback 기능을 활용하여 구현 가능.
✅ 장점
✔ 서비스 장애 시에도 사용자 경험 유지 가능
✔ 데이터가 없더라도 최소한의 기능을 제공하여 다운타임 방지
🔹 4. 벌크헤드 패턴(Bulkhead Pattern)
- 잘못된 서비스 호출이 전체 애플리케이션에 영향을 주지 않도록 분리(격리)하는 패턴.
- 예를 들어, 서비스 A와 서비스 B의 호출을 별도의 스레드 풀에서 처리하여 특정 서비스의 장애가 다른 서비스에 영향을 주지 않도록 함.
- Resilience4j의 Bulkhead 기능을 활용하여 구현 가능.
✅ 장점
✔ 하나의 서비스 장애가 전체 애플리케이션을 다운시키는 문제 방지
✔ 다양한 서비스 요청을 격리하여 개별적인 성능 유지 가능
📌 Summary
| 패턴 | 설명 | 대표적인 구현 방식 |
|---|---|---|
| 클라이언트 측 부하 분산(Client-Side Load Balancing) | 여러 서비스 인스턴스로 트래픽을 분산 | Spring Cloud LoadBalancer, gRPC Load Balancer |
| 회로 차단기(Circuit Breaker) | 장애가 발생한 서비스로 계속 요청하지 않도록 차단 | Resilience4j Circuit Breaker |
| 폴백(Fallback) | 서비스 장애 시 대체 데이터 또는 다른 처리 방식을 제공 | Resilience4j Fallback, 캐싱 활용 |
| 벌크헤드(Bulkhead) | 잘못된 서비스가 전체 시스템을 방해하지 않도록 요청을 격리 | Resilience4j Bulkhead |
📌 결론
마이크로서비스 환경에서는 서비스 장애가 다른 서비스나 전체 시스템에 영향을 주지 않도록 설계해야 합니다.
✔ 클라이언트 측 부하 분산을 사용하여 트래픽을 분산하고,
✔ 회로 차단기 패턴을 적용하여 장애 감지 후 빠르게 실패하도록 처리하며,
✔ 폴백 패턴을 사용하여 대체 데이터를 제공하고,
✔ 벌크헤드 패턴을 활용하여 서비스 요청을 분리하면,
💡 보다 안정적이고 회복력이 강한(Resilient) 마이크로서비스 아키텍처를 구축할 수 있습니다. 🚀
'Spring Microservice > Microservices Patterns' 카테고리의 다른 글
| Microservice logging and tracing patterns (0) | 2025.02.28 |
|---|---|
| Microservice security patterns (0) | 2025.02.28 |
| Microservice routing patterns (0) | 2025.02.28 |
| Core microservice development pattern (0) | 2025.02.28 |
| Microservices Patterns (0) | 2025.02.28 |