티스토리 뷰

Debug

RestTemplate 503 Error

Bong Gu 2021. 7. 30. 23:03
728x90

Debug

RestTemplate 503 오류

이슈내용

  • 기존 RestTemplate를 사용하던 부분에 503에러가 발생했다.

  • RestTemplate는 빈으로 등록되어 사용중이었는데 빈의 내용이 변경되었다.

    • 변경 내용은 timeout이 없던 RestTemplate에 timeout을 설정

      • 변경 전
      @Bean
      public RestTemplate restTemplate() {
        return new RestTemplate();
      }
      • 변경 후
      @Bean
      public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory httpRequestFactory 
          = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectionRequestTimeout(HTTP_REQUEST_TIMEOUT);
        httpRequestFactory.setConnectTimeout(HTTP_REQUEST_TIMEOUT);
        httpRequestFactory.setReadTimeout(HTTP_REQUEST_TIMEOUT);
        return new RestTemplate(httpRequestFactory);
      }
  • 서버정보에 뒤에 포트정보를 포함하여 요청하고 있었다.
    POST https://stdoc.remotemeeting.com:443/path

  • 해당 RestTemplate를 사용하는 부분은 문제가 없는 운영서버와 동일한 코드이다. RestTemplate 빈만 변경되었다.

  • 포스트맨등을 사용했을때 포트정보를 포함하면 증상가 동일한 503 에러가 발생한다.

해결

  • RestTemplate의 기본 생성자로 생성하게되면 SimpleClientHttpRequestFactory 구현체를 사용하게 된다.

    • 이 구현체는 HttpUrlConnection을 이용한다.
  • 빈 설정을 했던 HttpComponentClientHttpRequestFactory 구현는 Apache에서 제공하는 HttpClient를 사용한다.

  • 따라서 기존 설정 (기본 생성자)에서 사용했던 SimpleClientHttpRequestFactory로 구현체를 변경하고 timout을 설정해주었다.

    @Bean
    public RestTemplate restTemplate() {
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    factory.setConnectTimeout(HTTP_REQUEST_TIMEOUT);
    factory.setReadTimeout(HTTP_REQUEST_TIMEOUT);
    return new RestTemplate(factory);
    }
  • 문제해결

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday