분산 아키텍처에서 오류 처리는 중앙집중화되고 예측 가능하며 네트워크 서비스 작업 시 불가피한 다양한 실패 유형에 강해야 합니다. Retry, Circuit Breaker, Timeout, Fallback 및 중앙 집중식 로깅/모니터링과 같은 패턴 사용을 권장합니다.
원칙:
Python에서 pybreaker 라이브러리를 사용한 Circuit Breaker의 예:
import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=60) @breaker def get_data(): return requests.get('http://service/api/data', timeout=3) try: response = get_data() except pybreaker.CircuitBreakerError: # fallback: 더미 데이터 또는 오류 반환 response = 'Fallback data'
주요 기능:
오류 발생 시 클라이언트에게 모든 예외의 세부정보를 제공할 수 있습니까?
아니요. 예외의 세부정보를 공개할 수 없습니다 - 이는 보안 위협입니다. 응답에는 일반적인 정보만 반환하고, 기술적인 세부정보는 내부 시스템에 로깅합니다.
서비스 간의 네트워크 오류가 발생할 때 단순히 "retry"를 구현하는 것으로 충분합니까?
아니요, "순수한" retry는 문제를 악화시킬 수 있습니다 - 경과 시간이 증가하는 백오프 전략을 구현하는 것이 바람직하며, 강제 재시도는 피해야 합니다.
각 마이크로서비스의 로컬 디스크에 로그를 저장하는 것이 낫습니까?
아니요. 최상의 방법은 ELK, Loki, Grafana와 같은 도구를 사용하여 로그를 중앙 집중식으로 수집하여 모든 로그를 하나의 지점에서 검색하고 분석할 수 있게 하는 것입니다.