[스프링] Hystrix의 요청 처리 및 타임아웃 관리

스프링 애플리케이션에서 Hystrix를 사용하면 네트워크 요청 및 외부 서비스 연동에서의 문제를 처리할 수 있습니다. Hystrix를 사용하면 요청의 지연 시간이나 실패로부터 애플리케이션을 보호할 수 있고, 일부 기능을 fallback으로 대체하여 애플리케이션의 견고성을 높일 수 있습니다.

Hystrix 설정 및 사용

의존성 추가

먼저 pom.xml 파일에 Hystrix 의존성을 추가합니다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

@EnableHystrix 추가

스프링 부트 애플리케이션의 메인 클래스에 @EnableHystrix 어노테이션을 추가하여 Hystrix를 사용하도록 설정합니다.

@SpringBootApplication
@EnableHystrix
public class MyApplication {
    //...
}

@HystrixCommand 어노테이션 사용

Hystrix로 보호할 메소드에 @HystrixCommand 어노테이션을 추가하여 타임아웃 및 예외 처리를 정의합니다.

@HystrixCommand(fallbackMethod = "fallbackMethod")
public String doSomething() {
    // 원격 서비스 호출 또는 시간이 오래 걸리는 작업 수행
}

이 경우, doSomething 메소드가 지정된 타임아웃 또는 예외를 발생시킬 경우 fallbackMethod가 대신 호출됩니다.

Hystrix 타임아웃 설정

작업 타임아웃 설정

application.properties 파일에 다음 구성을 추가하여 타임아웃을 설정합니다.

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000

위의 구성은 기본적으로 3초의 타임아웃을 설정합니다.

커스텀 타임아웃 설정

개별 메소드에 대한 타임아웃을 커스텀하게 설정할 수도 있습니다.

@HystrixCommand(fallbackMethod = "fallbackMethod", commandProperties = {
    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000")
})
public String doSomething() {
    // 원격 서비스 호출 또는 시간이 오래 걸리는 작업 수행
}

위의 예제는 doSomething 메소드에 대해 5초의 타임아웃을 설정합니다.

결론

Hystrix를 사용하여 스프링 애플리케이션에서 요청의 타임아웃을 관리하고 외부 서비스 연동에서 발생할 수 있는 문제에 대비할 수 있습니다. 애플리케이션의 견고성을 높이고 사용자 경험을 개선하기 위해 Hystrix를 적절히 활용하는 것이 중요합니다.

참조: