[스프링] Hystrix와 타임아웃 회피 전략

Hystrix란 무엇인가?

Hystrix는 넷플릭스에서 개발한 라이브러리로, 분산 시스템에서 발생할 수 있는 “디그레이드”, “회복”, “회피”와 같은 문제들을 다루는 도구이다. 주로 분산 시스템에서의 회로 차단 패턴을 구현하기 위해 사용되며, 이러한 패턴은 고전적인 “Retry” 전략보다 더욱 유연하고 효율적으로 오케스트레이션을 수행할 수 있도록 도와준다.

Hystrix의 기능

Hystrix를 사용한 타임아웃 회피 전략 구현

Hystrix를 사용하여 타임아웃 회피 전략을 구현하기 위해서는 다음과 같은 방법을 따를 수 있다.

  1. @HystrixCommand 애너테이션 사용: @HystrixCommand 애너테이션을 이용하여 타임아웃 회피 전략을 정의할 수 있다. 이를 통해 Hystrix가 지정된 시간 내에 호출이 완료되지 않으면 대체 로직으로 흐름을 전환하도록 설정할 수 있다.

    @HystrixCommand(fallbackMethod = "fallbackMethod", commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
    })
    public String hystrixMethod() {
        // 서비스 호출 및 비즈니스 로직 실행
    }
    
    public String fallbackMethod() {
        // 대체 로직 실행
    }
    
  2. Hystrix Command 설정: Hystrix Command를 구성하여 타임아웃 회피 전략을 명시적으로 정의할 수 있다. 이를 통해 서비스 호출과 대체 로직을 구체적으로 지정할 수 있다.

    HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("GroupKey"))
                        .andCommandKey(HystrixCommandKey.Factory.asKey("CommandKey"))
                        .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
                            .withExecutionTimeoutInMilliseconds(3000))
    

마치며

Hystrix를 사용하여 타임아웃 회피 전략을 구현하면, 서비스 호출이 너무 오래 걸릴 경우 시스템의 응답성을 유지하면서 대체 로직을 실행할 수 있다. 이를 통해 시스템 전반적인 안정성을 높일 수 있으며, 분산 시스템에서의 신뢰성을 향상시킬 수 있다.

참고 자료