본문 바로가기

Project/TeamProject

[팀플 - Travel Jeju] 6th course - Travel Course III

반응형

[ 오늘 할 일 ]

  • 날씨 API를 이용하여 여행경로 서비스에 제주도 날씨 상시 업데이트 기능 추가 

 

[ 전체적인 흐름 ]

  • json 형태로 데이터를 받아오기 때문에 pom.xml에 라이브러리 추가 
  • 새벽 2시 기상정보 업데이트 - 12시~2시까지의 빈 시간대는 오류 발생 
  • 날씨 관련 모든 정보를 받은 데이터를 원하는 값만 추출 
  • 원하는 값들을 조합하여 해당 기상정보에 맞게 이모지로 변경 
  • 이모지, 강수량, 현재 온도만 view단으로 모델에 실어서 전송 
  • jsp의 javascript 단에서 원하는 디자인에 맞게 구성
  • html단으로 전송하여 화면에 출력 
     

결과물

날씨 정보를 담은 데이터가 json형식으로 api에서 넘어오기 때문에 json 라이브러리를 추가하였다 

이때 주의할 점은 pom.xml에 라이브러리를 추가하고 maven을 업데이트시키면 

프로젝트의 Properties에 Deployment Assembly에 추가한 ojdbc가 빠지는 현상이 발생한다

 

json 라이브러리와 연관된 문제는 아니고,

maven을 업데이트 시킬 때마다 디비 관련 추가했던 jar 파일들이 계속해서 빠지는 오류가 발생하였다 

dataArray 메서드는 

기상 api가 매일 새벽 2시마다 정보를 업데이트해주는데

이때 새벽 12시부터 새벽 2시까지의 시간대는 해당 금일의 기상정보가 없어서 

오류가 지속적으로 발생하는 경우 때문에 만든 메서드이다 

 

빈 2시간대의 정보들은 그 전날의 밤 11시의 값을 가져오는 형식으로 하여서 빈시간대의 정보를 채워주었다 

return 하는 HashMap타입의 datas는 아래 getWeather 메서드에서 사용하게 된다 

 

코드가 길어서 블로그에 설명하기 어려워 주석처리를 통해 설명하였다 

skyState는 주석에서 언급했듯이,

하늘상태 값 sky, pty를 조합하여 이모지로 변경하여 담는 변수이다 

아래 코드 캡처본을 보면 

눈/ 비가 내리지 않을 때와 내릴 때로 나누고

그 안에서는 switch문을 이용하여 이모티콘을 상황에 맞게 나누었고,

 

weather_dto 모델에 나온 값들을 실어서 jsp단으로 보내게 된다  

getStringFromURL 메서드 또한 주석으로 설명하였는데

이 메서드는 기상 api에서 제공하는 날씨 정보들을 전부 다 한 개의 변수에 담아 

getWeather 클래스로 넘겨주는 역할을 한다 

한 가지 중요한 점은 예외가 발생했던, 성공적으로 데이터를 가져왔든 간에 

finally를 이용하여 사용했던 것들을 모두 끊어주어야

메모리 누수 방지를 할 수 있다 

 

위에 모든 Controller를 거치면 결론적으로 jsp단에는 

하늘상태에 맞는 이모지, 강수량, 현재 온도의 정보들이 weatherdto에 실려 넘어오게 된다 

 

window.onload(서비스에 들어갔을 때)에 추가한 이유는

만약  Controller로 날씨정보를 가져오다 예외가 발생했을 시에 

날씨와 관련 없는 다른 정보들도 못 가져오기 때문에

서비스에 들어갔을 때 ajax를 실행하여 날씨 정보를 가져오는 것으로 만들어 다른 controller와 구분하기 위해서이다 

 

날씨는 3시간마다 정보가 변경되기 때문에

innerHTML로 계속해서 html값을 수정하는 방식으로 구성하였다 

 

html단 id

 

3시간이 지난 후에 정보가 바뀐 모습 

 

반응형