타임아웃 설정

날아올라돼지야·2024년 8월 28일
0

1. 문제 상황 설명 및 데모

우리는 마이크로서비스에서 발생할 수 있는 일반적인 문제, 즉 특정 서비스가 느리게 응답하거나 전혀 응답하지 않는 상황에 대해 고려해봐야 합니다.

이 문제를 해결하지 않으면 서버 리소스(스레드, 메모리 등)가 불필요하게 오래 대기하게 되어 성능 저하를 초래할 수 있습니다.

이 문제를 해결하기 위해 Spring Cloud Gateway에서 타임아웃 설정을 사용하여 일정 시간 이후 응답을 기다리지 않도록 설정할 수 있습니다.

1.1 문제 상황 데모

먼저, LoansController에서 contact-info API를 호출하여 응답을 지연시키는 상황을 만듭니다. 이 시점에 Postman에서 요청을 보내면 응답이 오지 않고 계속 대기 상태가 됩니다. 이는 리소스가 불필요하게 대기하면서 서버 성능이 저하될 수 있는 문제를 시뮬레이션하는 것입니다.

1.2 타임아웃 설정 필요성

이와 같은 문제를 해결하기 위해서는 타임아웃을 설정해야 합니다. 타임아웃을 설정함으로써 특정 시간 이상 응답을 기다리지 않고, 일정 시간이 지나면 요청을 중단하거나 폴백 메커니즘을 사용하는 등 추가적인 조치를 취할 수 있습니다.

2. 타임아웃 설정 적용

2.1 타임아웃 설정 방법

Spring Cloud Gateway에서 타임아웃을 설정하는 방법을 알아보기 위해 공식 문서를 참조합니다. 공식 문서에서 timeout이라는 키워드로 검색하여 Http timeouts configuration 섹션을 찾습니다. 이 섹션에서는 연결 타임아웃과 응답 타임아웃을 설정하는 방법을 설명하고 있습니다.

타임아웃을 설정하는 방법은 매우 간단합니다. application.yml 파일에 관련 속성을 추가하면 됩니다. 이를 통해 모든 마이크로서비스에 대해 전역적으로 타임아웃 설정을 적용할 수 있습니다.

2.2 application.yml 파일 수정

Gateway 서버의 application.yml 파일에서 다음과 같은 설정을 추가합니다:

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 1000  # 1초 동안 연결을 시도
        response-timeout: 2000  # 2초 동안 응답을 기다림

이 설정을 통해 Gateway 서버가 다른 마이크로서비스에 요청을 보낼 때, 연결이 1초 내에 이루어지지 않으면 요청을 중단하며, 응답이 2초 내에 도착하지 않으면 타임아웃 오류를 발생시킵니다.

3. 타임아웃 설정 테스트

3.1 타임아웃 설정 적용 후 테스트

타임아웃 설정을 적용한 후, 다시 LoansControllercontact-info API를 호출하여 타임아웃이 제대로 작동하는지 확인합니다. 이번에는 요청이 2초 동안 응답을 기다린 후 타임아웃 오류를 발생시키며 더 이상 대기하지 않음을 확인할 수 있습니다.

이 설정은 모든 마이크로서비스와 경로에 대해 글로벌하게 적용되므로, 각 마이크로서비스의 성능 문제로 인해 전체 시스템에 영향을 미치지 않도록 보호합니다.

3.2 특정 경로에 대한 타임아웃 설정

특정 경로에 대해서만 타임아웃 설정을 다르게 적용해야 하는 경우도 있습니다. 이를 위해 Spring Cloud Gateway는 route 별로 타임아웃을 설정할 수 있는 방법을 제공합니다. 예를 들어, Java DSL 스타일의 라우팅 설정을 사용하는 경우 metadata 메서드를 사용하여 경로별로 타임아웃을 설정할 수 있습니다:

.route("example_route", r -> r.path("/example-path")
    .filters(f -> f.addRequestHeader("Example", "Header")
                  .metadata("response-timeout", 3000))  // 이 경로에 대해 3초 타임아웃 적용
    .uri("http://example.com"))

또한, 응답 타임아웃 값을 -1로 설정하면 특정 경로에 대해 타임아웃 설정을 비활성화할 수 있습니다.

4. 요약 및 결론

Spring Cloud Gateway는 마이크로서비스 네트워크에서 중요한 역할을 하는 강력한 엣지 서버입니다. 타임아웃 설정을 통해 서버 리소스를 보호하고, 성능 저하를 방지할 수 있습니다. 이번 강의를 통해 타임아웃 설정의 필요성과 적용 방법을 배우고, 특정 경로에 대한 타임아웃 설정 방법도 이해했습니다.

이 강의에서는 타임아웃 설정을 통한 성능 문제 해결에 대해 다뤘으며, 이를 통해 Spring Cloud Gateway의 기능을 보다 효과적으로 활용할 수 있는 방법을 배웠습니다.

이후 강의에서는 다른 중요한 패턴과 기능에 대해 계속해서 알아보겠습니다.

profile
무슨 생각하며 사니

0개의 댓글