Microservices Architecture / / 2024. 12. 13. 10:09

폴백(Fallback)

폴백(Fallback)이란 시스템이나 서비스가 정상적으로 동작하지 않을 때 대비책으로 대체 동작이나 대체 서비스를 실행하는 것을 의미합니다.


1. 폴백의 개념

  • 시스템에 장애가 발생하거나 외부 서비스가 실패했을 때, 사용자에게 최소한의 기능이나 대체 결과를 제공하는 패턴입니다.
  • 목표: 시스템의 안정성을 유지하고 사용자에게 최소한의 서비스라도 제공하기 위함입니다.

2. 폴백이 필요한 상황

  1. 네트워크 장애

    • 외부 API 호출이 실패했을 때 대체 데이터를 제공해야 하는 경우
  2. 시스템 장애

    • 주요 서비스나 기능에 문제가 발생했을 때 다른 서비스로 요청을 우회
  3. 타임아웃

    • 응답 시간이 길어져 요청이 실패했을 때 빠르게 다른 로직을 실행
  4. 데이터 불일치

    • 데이터베이스나 캐시에서 데이터가 없을 경우 기본값을 반환

3. 폴백 패턴의 동작 원리

  1. 정상 경로

    • 원래 실행되어야 할 서비스나 기능이 정상적으로 작동합니다.
  2. 비정상 경로 (오류 발생)

    • 장애나 오류가 발생하면 대체 경로(폴백)를 실행합니다.

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. 폴백과 관련된 패턴

  1. 서킷 브레이커(Circuit Breaker)

    • 실패가 반복되면 요청을 차단하고 폴백을 실행합니다.
  2. 리트라이(Retry)

    • 실패한 작업을 다시 시도한 후 실패하면 폴백을 실행합니다.
  3. 캐시(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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유