개발공작소
article thumbnail
728x90
반응형

 

 

 

이번에 프로젝트를 하면서 API를 통해 데이터를 가져오는데, 500에러가 뜨면서 데이터를 제대로 못가져오는 상황이 발생..

 

java.io.ioexception server returned http response code 500 for url 에러발생!

 

이거 때문에 골 아팠다. 무슨 에러인지 정확히 모르니,, 그래서 오늘 한번 정리해보려 한다.

 

 

500에러란? ( 500에러 메세지를 출력하는 경우 )

 

500에러는 조금 광범위한 에러이다. 즉 정확하지는 않음. 서버에서 어떤 동작을 수행하다가,

예외적인 또는 예측하지 못한 에러가 발생하는 경우에 500에러를 출력하게 된다

 

  • 서버통신의 TimeOut 시간지연 오류
  • 서버 트래픽 과부하
  • 서버 언어의 구문오류

 

이런 다양한 에러를 모두 500에러로 출력하기 때문에 정확히 무엇이 문제인지 모른다. 

즉 정확한 원인을 파악하기에는 부족.. 그렇기 때문에 정확한 에러로그를 찾아야 한다.

 

 

내가 맞딱뜨렸던 상황

 

내 경우에는 해당 기관시스템에서 바로 받는 게 아닌, 프록시서버를 우회해서 받았었다.

 

그래서 해당 프록시서버에 로그를 찍어보니 500에러가 아닌 ReadTimeOut에러가 발생했다는 것을 알 수 있었다..

 

 

 

실제 데이터를 받는 서버에서는 500에러가 떠서 정확히 무슨 문제인지 파악이 안됬으나, 

직접 프록시 서버에 접근하여 프록시서버의 로그를 통해 정확한 원인 파악이 되었다. ReadTimeOut에러..

 

connectionTimeout. 즉 데이터의양이 많다던지, 네트워크 속도 때문에 실제 요청이 수신될때까지의

시간이 지나도록 수신이 완료 되지 않으니, ReadTimeOut에러를 떨어뜨린 것이었다.

 

그래서 다음과 같이 문제를 해결하였다.

 

 

문제해결

 

1. server.xml 파일의 connectionTimeout의 값을 높게 설정

  <!-- 수정전 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
               
    <!-- 수정후 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="99999"
               redirectPort="8443" />

 

근데 server.xml을 수정해도 똑같이 read timed out에러가 뜨는 것이었다. 서버를 몇번이나 재가동 해도

똑같은 상황.. 그래서 뭐지.. 하다가

 

해당 url이 proxy.jsp라는 파일로 프록시를 타는 것을 확인.. 해당 proxy.jsp를 직접 확인해보니,

 

proxy.jsp에서 HttpURLConnection 객체를 통해 직접 서버통신을 하고 있는 것을 발견

해당 객체에 직접 connectionTimeout 및 readTimeout을 설정해주었다.

 

 

 

2. HttpURLConnection 객체 설정

HtppURLConnection = con (HttpURLConnection)url.openConnection();

con.setConnectionTimeout(10000);
con.setReadTimeout(20000);

// ConnectionTimeout => 10000로 설정
// ReadTimeout => 20000로 설정

 

 

이렇게 설정을 하니 read timed out이 해결 되었다.

 

read timed out에러 해결방법에 대해서는 다음 글을 참조하도록 하자~

 

개발공작소 :: read timed out 에러 원인과 해결방법

 

 

 

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!