티스토리 뷰

HttpURLConnection 란?

java 소스 내에서 URL 요청을 통하여 결과 데이터를 스트림 형식으로 제공받아 이용이 가능함.


HttpURLConnection 사용 예제

1
2
3
4
5
URL url = new URL("http://www.test.com");
 
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
 
httpConn.getInputstream(); //결과 Stream Data를 Stream객체에 할당하여 이용한다.
cs

HttpUrlConnection 주요 설정

  • httpConn.setRequestMethod("GET"); //요청 방식 설정 (GET/POST 등)
  • httpConn.setRequestProperty("key","value"); // request Header 설정 key-value 형식으로 다양한 요청 설정이 가능하다.
  • httpConn.setConnectTiomeOut(1000); //서버 연결 제한 시간
  • httpConn.setReadTimeOut(1000); // 서버 연결 후 데이터 read 제한 시간

안전하게 사용하기 ★

경험으로는 배치 환경에서 API 데이터를 현행화하는 경우 위에 서술된 HttpUrlConnection 객체를 이용하여 해당 API URL에 요청하여 결과값으로 제공해주는 데이터를 반환받아 가공 작업이 진행될 것이다.

 

하지만 네트워크 불안정 및 API 제공 사이트의 문제 등 다양한 이유로 인하여 UrlConnection을 사용한 로직이 정상적이지 않을 수 있다.

 

반복적으로 API URL을 호출하는 경우 특정 차례에 요청 후 응답을 받지 못한다면 무한 대기상태(교착상태)가 시작되며 다음 순서의 API URL 호출은 시작하지 못하게 된다.

또한 하나의 배치 step 범위보다 시선을 크게 본다면 해당 배치 step을 수행하던 스레드는 계속하여 실행중인 상태가 되고 해당 배치 step이 다음 배치 작업 시 동일하게 무한 대기에 걸린다면 스레드는 계속 쌓이게 된다.

만약 배치 시 사용할 수 있는 스레드풀 개수를 설정해 놓은 상태라면 모든 스레드가 사용 중인 상태가 되는 경우 해당 배치 인스턴스는 모든 배치 작업을 진행하지 못하고 멈추게 된다.

참고로 log상에도 URL 호출시 발생하는 무한 대기 상태에는 어떠한 exception 로그도 찾아볼 수 없었다.

 

해결방안으로는 HttpUrlConnection 주요 설정에 기입해놓은 설정 중 setConnectTimeOut, setReadTimeOut을 설정해주면 된다.

설정을 하면 URL 요청 시 미리 선언한 시간 만큼 대기하고 응답이 없다면 exception을 반환하며 작업을 마치게 되는데 이때 발생하는 exception은 SocketTimeoutException이다. 

각 설정에 따른 exception 메시지는 아래와 같다.

  • ConnectTimeOut 발생시 connect time out
  • ReadTimeOut 발생 시 Read time out

실제로 위 설정을 통하여 간헐적이던 배치 중단 현상을 해결하였다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함