폴백(Fallback)이란 시스템이나 서비스가 정상적으로 동작하지 않을 때 대비책으로 대체 동작이나 대체 서비스를 실행하는 것을 의미합니다.
1. 폴백의 개념
- 시스템에 장애가 발생하거나 외부 서비스가 실패했을 때, 사용자에게 최소한의 기능이나 대체 결과를 제공하는 패턴입니다.
- 목표: 시스템의 안정성을 유지하고 사용자에게 최소한의 서비스라도 제공하기 위함입니다.
2. 폴백이 필요한 상황
네트워크 장애
- 외부 API 호출이 실패했을 때 대체 데이터를 제공해야 하는 경우
시스템 장애
- 주요 서비스나 기능에 문제가 발생했을 때 다른 서비스로 요청을 우회
타임아웃
- 응답 시간이 길어져 요청이 실패했을 때 빠르게 다른 로직을 실행
데이터 불일치
- 데이터베이스나 캐시에서 데이터가 없을 경우 기본값을 반환
3. 폴백 패턴의 동작 원리
정상 경로
- 원래 실행되어야 할 서비스나 기능이 정상적으로 작동합니다.
비정상 경로 (오류 발생)
- 장애나 오류가 발생하면 대체 경로(폴백)를 실행합니다.
4. 예시로 이해하기
1) 네트워크 장애 시 폴백 (REST API 호출 실패)
상황: 서버 A가 서버 B에 REST API를 요청했는데 실패한 경우 대체 데이터를 반환합니다.
Java 예제 (Resilience4j 라이브러리 사용)
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import org.springframework.web.client.RestTemplate;
import org.springframework.stereotype.Service;
@Service
public class ExternalService {
@CircuitBreaker(name = "fallbackExample", fallbackMethod = "fallbackResponse")
public String getExternalData() {
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject("http://external-service/api/data", String.class);
}
// 폴백 메서드
public String fallbackResponse(Exception e) {
return "대체 데이터입니다."; // 실패 시 반환할 대체 값
}
}
설명:
@CircuitBreaker
를 사용해 외부 호출이 실패하면fallbackResponse
메서드를 실행합니다.- 실패한 경우 "대체 데이터입니다"라는 기본 응답을 반환합니다.
2) 캐시 데이터 활용
상황: DB에서 데이터를 가져오는 데 실패하면 캐시된 데이터를 반환합니다.
public String getData() {
try {
return databaseService.fetchData(); // 데이터베이스 호출
} catch (Exception e) {
return cacheService.getCachedData(); // 캐시된 데이터 반환
}
}
3) 기본값 반환
상황: 서비스가 실패할 경우 기본값(default value)을 반환합니다.
public String getUserInfo(String userId) {
try {
return userService.getUserDetails(userId);
} catch (Exception e) {
return "기본 사용자 정보"; // 오류 발생 시 기본값
}
}
5. 폴백과 관련된 패턴
서킷 브레이커(Circuit Breaker)
- 실패가 반복되면 요청을 차단하고 폴백을 실행합니다.
리트라이(Retry)
- 실패한 작업을 다시 시도한 후 실패하면 폴백을 실행합니다.
캐시(Cache)
- 최신 데이터를 캐싱해 두었다가 실패 시 캐시 데이터를 반환합니다.
6. 폴백의 장점
✅ 안정성: 서비스 장애나 오류 발생 시 최소한의 기능을 제공하여 시스템 안정성을 유지합니다.
✅ 사용자 경험 향상: 시스템 오류에도 끊김 없는 서비스를 제공합니다.
✅ 성능 최적화: 실패를 빠르게 감지하고 폴백을 실행해 불필요한 대기 시간을 줄입니다.
7. 폴백의 한계
⚠️ 정확한 데이터 부족: 폴백에서 제공하는 데이터는 대체 데이터이기 때문에 정확하지 않을 수 있습니다.
⚠️ 복잡성 증가: 폴백 로직을 설계하고 구현하는 것이 추가 작업을 요구합니다.
8. 요약
✅ 폴백(Fallback)은 시스템 장애나 오류 발생 시 대체 동작을 실행하는 방법입니다.
✅ 주요 사용 사례: 네트워크 장애, 타임아웃, 데이터베이스 오류 등
✅ 구현 방법:
- 기본값 반환
- 캐시된 데이터 활용
- Resilience4j, Hystrix와 같은 라이브러리 사용
폴백은 시스템의 안정성과 가용성을 높이는 중요한 설계 패턴입니다. 😊
'Microservices Architecture' 카테고리의 다른 글
링 버퍼(Ring Buffer) (0) | 2024.12.13 |
---|---|
Circuit Breaker(서킷 브레이커) (1) | 2024.12.13 |
엘라스틱서치(Elasticsearch) (0) | 2024.12.10 |
12 팩터 앱(12 Factor App) (0) | 2024.12.10 |
스프링 클라우드 패턴 (0) | 2024.12.10 |