Spring Fallback

2024. 12. 23. 21:12·개발

넷플릭스의 Hystrix 라이브러리는 분산 시스템을 보다 resilient하게 만드는데 중요한 역할을 했다. 이것은 주로 circuit breaker 기능으로 알려져있지만, 다른 특징은 이것이 fallback mechanism을 제공한다는 것이다. fallback은 어플리케이션이 비록 잠재적으로는 degraded mode로 동작함에도 지속적으로 동작하도록 만든다. 이는 특정 서비스의 운영이 실패해도 마찬가지이다. 다만 Hystrix는 현재 Spring Cloud에서 Deprecated 이기에 스프링 2.X 버전 이상부터는 Hystrix가 아닌 Resilience4j를 사용하는 것을 권장한다.

 

Fallback이란,  Main logic이 실패했을 경우에 대안적으로 다른 response를 내려주는 것을 의미한다. 이것은 default value를 내려줄 수 있고 다른 서비스를 호출 할 수 있고 다른 compensating operation을 동작하도록 한다. Hystrix's의 fallback은 failure를 응답받다리더 우자기 error대신 다른 response를 받도록한다.

 

사용법

@Service
class MyService {

    @HystrixCommand(fallbackMethod = "fallbackHello")
    fun sayHello(name: String): String {
        if (name.isBlank()) {
            throw RuntimeException("Name cannot be blank!")
        }
        return "Hello, $name!"
    }

    fun fallbackHello(name: String): String {
        return "Hello, Guest! (fallback)"
    }
}

 

이렇게 고정된 값을 fallback으로 줄 수 있다. 

 

응용방법

Custom Fallback / Exception Handling

@Service
class MyService {

    @CircuitBreaker(name = "myService", fallbackMethod = "fallback")
    fun riskyOperation(): String {
        throw RuntimeException("Something went wrong!")
    }

    fun fallback(exception: Throwable): String {
    return when (exception) {
        is IllegalArgumentException -> "Fallback for IllegalArgumentException"
        is RuntimeException -> "Fallback for RuntimeException"
        else -> throw exception // 예외 다시 던짐
    }
}

 

- 캐시를 통해 fallback 처리하기

 in-memory를 사용(spring자체 또는 redis)

 

 

Fallback의 limitation

-  오래된 데이터 : 만약 fallback이 캐시 데이터에 의존한다면, 오래된 데이터를 return 할 위험이 있다.

- Over reliance: fallback에 지나치게 의존하면 근본적인 문제를 발견하지 못할 수 있으므로 모니터링이 필요하다.

저작자표시 비영리 동일조건 (새창열림)

'개발' 카테고리의 다른 글

이더리움 네트워크  (1) 2025.08.17
API Gateway  (1) 2025.01.05
Spring Retry  (0) 2024.12.23
견고한 MSA  (2) 2024.12.23
MongoDB Bucket Pattern  (1) 2024.12.23
'개발' 카테고리의 다른 글
  • 이더리움 네트워크
  • API Gateway
  • Spring Retry
  • 견고한 MSA
senyalog
senyalog
개발 블로그 https://github.com/iamyunjuda
  • senyalog
    Senya의 개발 블로그
    senyalog
  • 전체
    오늘
    어제
    • 분류 전체보기 (71)
      • 일상 (6)
      • 알고리즘 이론 (14)
        • 백준 (8)
      • 개발 (31)
        • Server (8)
        • 인턴 (2)
        • Javascript (0)
      • 경제 (7)
  • 블로그 메뉴

    • Github
    • 홈
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    암호화페
    MSA
    코딩테스트
    카페
    TypeScript
    코딩
    알고리즘공부
    인턴
    일상
    인턴생활
    GIT
    개발자
    백준풀이
    공부
    개발공부
    공대생
    생각
    개발
    백준문제
    대학생인턴
    이마고웍스
    대학생
    깃
    백준
    백엔드
    nestjs
    컴공
    서버
    경제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
senyalog
Spring Fallback
상단으로

티스토리툴바