지난 4일차에는 기상 api를 이용하여 날씨의 정보를 가져오는 작업을 하였는데
5일차에는 오류를 만나게되어 그에 대하여 공부하고 수정하는 시간을 가졌다.
#주의할점 1(Socket Timeout Exception)
내가 만난 오류는 Socket Timeout Exception이라는 오류이며
Socket Timeout Exception은 소켓을 통해 데이터를 읽거나 소켓을 연결할 때
시간초과가 나면 발생한다고 한다.

ConnectTimeout : 서버연결에 지연발생
ReadTimeout : 서버에는 연결 되었으나 데이터를 받는데 지연발생.
기상청 api 또는 서버에 데이터를 요청하여 가져와야하는 상황에서는
ConnectTimeout(), ReadTimeout()을 꼭 설정해두어야 한다.
반복적으로 API URL을 호출하는 경우 특정 차례에 요청 후 응답을 받지 못한다면 무한 대기상태(교착상태)가
시작되며 다음 순서의 API URL 호출은 시작하지 못하게된다고 한다. 여기서 배치 시 사용할 수 있는
스레드 풀 개수를 설정해 놓은 상태라면 모든 스레드가 사용중인 상태가되는
경우 해당 인스턴스는 모든 작업을 진행하지 못하고 멈추게되고
LOG상에서도 URL호출시 발생하는 무한 대기 상태에는 어떠한 Exception로그도 찾아볼수 없다고한다.
그래서 setConnectTimeOut(), setReadTimeOut() 을 설정하여 미리 선언한 시간만큼 대기하고
응답이 없다면 EXCEPTION을 반환하여 작업을 마치게하는것이다. 이때 발생하는 exception이 SoketTimeoutException 이라고한다.
그러므로 꼭 ConnectTimeout(), ReadTimeout()을 설정해두어야 한다고 한다.
# 주의할점 2(Socket Timeout Exception로 인한 서버로딩 불가상태)
이 부분은 1번의 주의할점과 연계된다!
내가 아직 실력이 부족하여 만난 문제점인것 같다
기상청 api를 이용하여 정보를 페이지에 띄워줄때에 처음에 2가지 방법을 생각하였고
첫 번째 방법은 Controller에서 정보를 받아 페이지를 로딩하는것이고
두 번째 방법은 일반 Contoroller로 들어왔다가 날씨 영역의 정보만 RestController로 보내어
데이터값을 받아오는 방법을 생각하였었다.
이때에 나는 그냥 처음 페이지를 로딩할때에 값을 가져와 다 띄워주면 되는것 아닌가?
라는 생각을 하였고 Controller를 이용하여 페이지를 호출할때에 날씨api를 이용해 정보를
받아왔다... 처음 몇번은 아무 문제없이 잘 되다가 갑자기 Socket Timeout Exception이라는
오류가 발생하며 페이지를 로딩하지 못하는 문제가 발생한것이다.
이 문제를 해결하기위해 해결 방법을 생각해보게 되었고
제일 처음 생각난 방법은 RestController와 ajax를 이용한 비동기 방식이였다.
처음 Controller로 가서 페이지를 로딩한 후에 자바스크립트에 window.onload() 메서드를
이용하여 RestController로 이동하여 날씨의 정보를 가져오는 방법을 사용하였다.
이렇게하면 페이지를 로딩할때에 Socket Timeout Exception이 발생하여도 페이지를
로딩하여 문제없이 그려준다는 것이다.
다만! Socket Timeout Exception이 발생하면 날씨정보를 가져오지 못하여
날씨 정보를 띄워야 하는곳에 아무 정보가 없다는것인데 임의의값을 넣기에는 가짜 정보여서
해결 방법을 생각해보았고 1가지 떠오른 방법은 데이터 베이스를 이용하는것이였다.
해당 일에 서버를 처음 호출할때에 데이터베이스에 해당 일에 날씨 정보를 전부 가져다 넣고
그 날의 정보들은 모두 데이터베이스에서만 꺼내오는 방법이다.이 방법도 아직 생각만해본것이고 코드를 짜보지는않았지만일단 만들고있는 페이지의 UI와 데이터베이스를 전부 연결후 기능까지 완성된 후에이 부분을 보완해볼 생각이다.

제주도의 날씨를 날씨 api를 이용해 값을 받아 날씨에 맞는 이모티콘과 현재 시간의 온도 강수량 확률을 띄어주었다!
'Project 느낀점 > 제주도 여행 프로젝트' 카테고리의 다른 글
제주도 여행 프로젝트 5. (0) | 2021.10.20 |
---|---|
제주도 여행 프로젝트 3 (0) | 2021.10.16 |
제주도 여행 프로젝트 2 (0) | 2021.10.14 |