개요

우리 분야에서 기상자료는 많은 연구의 기초자료로 활용되고 있다. 특히 일별 기상자료는 관개배수와 수문학에서 사용되는 다양한 모델의 입력자료로 사용되기 때문에 기상청에서 제공하는 과거 일별 관측자료를 일일이 다운받아 정리하고 있다. 이 작업은 우리학과 학부과정, 석사과정 학생들의 필수코스로 자리잡고 있다. 나는 매년 반복되는 이러한 작업이 매우 비효율적이라고 생각했고, 2003년 즈음부터 크롤링해서 자료를 자동으로 정리하는 작업을 해왔다. 처음에는 로컬환경에서 작업을 수행할 수 있도록 작성하였는데, 반복적으로 연구자마다 동일한 환경설정을 구성하고 실행하는 행태 역시 비효율적이라는 생각을 하게 되었다. 이에 중간 서버를 두어 API를 제공하면, 손쉽게 기상자료를 활용할 수 있겠다라는 생각을 했으며, 2014년에 해당 내용을 논문으로 게재하였다.

기상청에서는 다양한 API를 제공하고 있지만 유독 과거 일별 관측자료는 API 형태로 제공하지 않고, 관측 항목별 연도별로 테이블 형태로 값을 제공하고 있다. 본 연구에서는 매일 기상청 홈페이지에 접속하여 해당 자료를 크롤링하여 데이터베이스에 저장하고, 저장된 자료를 사용자에게 제공할 수 있는 API를 개발하였다. 연구자는 API를 활용하여, 엑셀에서 “웹 데이터” 메뉴를 통해 정리된 형태의 일별 기상관측 자료를 받아 쓸 수 있고, 프로그래밍 언어를 이용하면 로컬 파일 대신 웹에서 자료를 읽을 수 있도록 10여줄의 코드만 추가하면 사용할 수 있다.

연구 내용을 간단하게 확인할 수 있도록 시연용 페이지를 만들었다. 이 페이지는 4개 지역 측후소에 대하여 최근 5개년간 일별 기온을 타일형태 그래프로 보여준다. 서버는 Flask를 이용하여 RESTful API를 구성하였고, 프론트엔드는 D3.js를 이용하여 구현하였다. 덧붙여, 본 연구는 엄밀하게 정의하면 HTTP API를 개발한 것이나, 비 CS 계열인 우리 분야를 고려하여 널리 통용되고 있는 용어인 RESTful API로 기술하였다.

(2018.07 업데이트) 최근 6개월동안 시연용 페이지에 사용된 색상 팔레트를 변경하고, 로딩화면, 범례를 추가하였다. 색상 팔레트는 평균온도값과 온도가 주는 느낌 사이의 차이를 잘 표현하지 못하는 점이 아쉬웠는데, ImpactLab.org에서 사용한 팔레트를 차용함으로써 이러한 아쉬움을 해소할 수 있었다.

(2018.08 업데이트) 서버에 일괄적으로 SSL를 적용하면서, Flask에서 제공하는 데모용 서버를 사용할 수 없고 웹서버를 경유하여 wsgi를 이용하여 서비스하도록 변경하였다. 변경과정에서 데모용으로 사용하던 5002번 포트를 쓰지 않게 되었고, 이에 따라 API 주소가 아래와 같이 변경되었다.

(2018.08 업데이트) 올 여름 무더위가 계속되고, 태풍 솔릭이 지나간 후 갑작스러운 폭우가 내려 홍수 피해가 발생되는 터라 최고기온과 강수량 맵을 추가하였다.

(2020.03 업데이트) 2020년 데이터가 업로드가 되지 않았었다. 기상청에서 제공하는 페이지가 업데이트되면서, 더 이상 예전 코드를 쓸 수 없게 되었다. 한편 data.go.kr에서 제공하는 데이터에 종관관측자료가 추가되었다. 미루던 일을 2월말에나 시작하였고, 3월 초에 업데이트를 마무리하였다. 현재는 기상청 웹사이트를 크롤링하는 대신, data.go.kr에서 API를 통해 매일 자료를 받고 있다. 승인 기간이 있으므로, 매년 API 승인 내역을 확인할 필요가 있다. 백엔드만 달라졌을 뿐, API는 예전과 동일한 형태로 제공되어 있기 때문에 사용자 측면에서 느낄 수 있는 변동사항은 없다.

  • 원 주소: http://api.taegon.kr:5002
  • 새 주소: https://api.taegon.kr
  • 활용 예: https://api.taegon.kr/stations/108/?sy=2018&format=html

관련링크