티스토리 뷰
기상청 사람들
요즘 재미있게 보고 있는 드라마 기상청 사람들. 최근 방영중인 JTBC 토일 드라마 기상청 사람들은 열대야보다 뜨겁고 국지성 호우보다 종잡을 수 없는 기상청 사람들의 일과 사랑을 그린 직장 로맨스 드라마이다. 이 드라마를 통해서 기상청에서 일하는 사람들이 어떻게 데이터를 활용하는지 직관적으로 느낄 수 있었다. 그래서 오늘은 날씨데이터를 통해 공공API를 활용하는 방법에 대해 분석해보려고 한다. 날씨데이터 API는 누구나 사용가능하도록 개방되어 있는 대표적인 Open API이다.
API가 뭔데?
API(Application Programming Interface)는 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만든 인터페이스를 말한다. 이런 API 중 누구나 사용가능하도록 개방되어 있는 것을 오픈 API라고 하며, 데이터를 공개하여 애플리케이션 및 서비스를 개발할 수 있도록 개발자와 사용자에게 공유하는 프로그램을 말한다.
RESTful API
RESTful API는 HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식이다. 즉, 어떤 자원에 대해 CRUD(Create, Read, Update, Delete)연산을 수행하기 위해 URI로 요청을 보내는 것으로, Get, Post 등의 방식을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태로 표현됩니다. 한마디로 REST의 원리를 따르는 API라고 생각하면 된다.
API를 아무리 잘 설계한다고 하더라도 각자 필요한 방식에 맞게 다양하게 설계하면 유지보수 하는데 어려움이 있을 수 있다. 이런 문제를 해결하기 위해 일정한 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 만들어 사용하기로 하였는데 그 중 대표적인 방식이 RESTful API다. RESTful API는 CRUD 표현 방식을 하나의 주소로 관리하여 타 API 방식보다 주소 개수가 줄어들어 업무 파악이 쉽다.
Open API
API 중 누구나 사용가능하도록 개방되어 있는 것을 Open API라고 하며, 데이터를 공개하여 애플리케이션 및 서비스를 개발할 수 있도록 개발자와 사용자에게 공유하는 프로그램을 말한다.
Open API 활용 사례
잘 설계한 API를 오픈해 제공하는 이유는 자사의 서비스의 기능을 다양한 서비스에서 활용할 수 있도록 해 서비스의 저변을 넓히는 목적이 있다. 메타 서비스를 제공하는 대기업들의 시장 확대를 목적으로 오픈 API를 운영하거나 공공의 목적으로 비영리기관에서 무료로 API를 제공하는 경우도 있다.
기상청 API를 알아보자
기상청에서 제공하는 모든 오픈 API서비스는 행정안전부에서 운영중인 공공데이터포털을 통해 제공되고 있다. 공공데이터포털은 공공기관이 생성 또는 취득하여 관리하고 있는 공적 정보를 한 곳에서 제공하는 일종의 통합 창구이다. 포털에서는 국민이 쉽고 편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈 API, 시각화 등 다양한 방식으로 제공하는데, 쉽고 편리한 검색을 통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있다.
한국환경공단 API의 기능과 구조
기능 : 미세먼지(PM10, PM2.5)에 대한 지역별 주의보 경보 발령/해제시간, 농도를 조회하기 위한 서비스
구조 : 공공데이터포털에서 원하는 데이터를 취득하는 프로세스를 통해 설명
1. 공공데이터 포털에 접속, 로그인한다.
2. 원하는 자료를 검색한다.
여기서는 오늘날 제일 핫(?)한 미세먼지 데이터를 가져와서 대기오염 정보를 받아 볼 예정이다.
3. 활용 신청하기, 사용 문서 다운로드하기
한국환경공단_에어코리아_미세먼지 경보 발령 현황자료에 활용신청 CTA를 이용해서 필요한 정보를 기입한다.
4. 개발 계정 신청하기
신청이 되면 활용 승인이 되고 한국환경공단_에어코리아_미세먼지 경보 발령 현황을 열람할 수 있다.
서비스정보 하단에 일반인증키를 API서버에 요청하면 결과값을 받을 수 있다.
5. 어떻게 사용하는지 문서 확인하기 (구조파악)
교환 데이터 표준
<JSON과 XML 특징>
JSON (JavaScript Object Notation) |
XML (eXtensible Markup Language) |
1. 데이터를 저장하고 전달하기 위해 고안된 데이터 형식 2. 사람과 기계가 동시에 읽기 편한 구조 3. 다양한 프로그래밍 언어에 의해 파싱(Parsing)될 수 있음 4. 서버로부터 데이터를 전송 받을 수 있음 |
|
종료태그 사용하지 않음 | 종료태그 사용함 |
구문이 짧음 | JSON에 비해 구문이 김 |
더 빨리 읽고 쓸 수 있음 | 처리속도가 JSON보다 느림 |
배열을 사용할 수 있음 | 배열을 사용할 수 없음 |
한국환경공단_에어코리아_미세먼지 경보 발령 현황 API의 역할, 입출력 구조
6. 요청 / 응답 메시지 예제
요청메시지 |
응답메시지 |
<response> <header> <resultCode>00</resultCode> <resultMsg>NORMAL_CODE</resultMsg> </header> <body> <items> <item> <clearVal>28</clearVal> <sn>262</sn> <districtName>경기</districtName> <dataDate>2020-10-28</dataDate> <issueVal>76</issueVal> <issueTime>03:00</issueTime> <clearDate>2020-10-28</clearDate> <issueDate>2020-10-28</issueDate> <moveName>남부권</moveName> <clearTime>13:00</clearTime> <issueGbn>주의보</issueGbn> <itemCode>PM25</itemCode> </item> (중략) <item> <clearVal>66</clearVal> <sn>156</sn> <districtName>전북</districtName> <dataDate>2020-04-04</dataDate> <issueVal>166</issueVal> <issueTime>15:00</issueTime> <clearDate>2020-04-04</clearDate> <issueDate>2020-04-04</issueDate> <moveName>정읍권역</moveName> <clearTime>17:00</clearTime> <issueGbn>주의보</issueGbn> <itemCode>PM10</itemCode> </item> </items> <numOfRows>100</numOfRows> <pageNo>1</pageNo> <totalCount>251</totalCount> </body> </response> |
위의 내용을 해석한다면.
"2020년 4월 4일 15시, 전북 정읍권역에 미세먼지 경보가 발령되었다. 경보 단계는 '주의보' 단계로 미세먼지(PM10) 시간당 평균 농도는 166㎍/m3이다. '주의보' 단계는 2020년 4월 4일 17시에 미세먼지 농도 66㎍/m3로 해제되었다"라고 할 수 있다.
7. 프로그램 코드 확인
Java, 파이썬, Objective-C 등 프로그램 언어의 샘플이 제공된다.
8. End Point
10. 요청변수(Request Parameter)와 출력결과(Response Element)
<이미지 및 자료 출처>
'데일리 과제' 카테고리의 다른 글
애자일 vs 워터폴 | 카카오톡 멀티프로필 (1) | 2022.03.14 |
---|---|
[W7D4] 데이터 프로덕트 매니저와 Flow Chart (오늘의집) 회고 (1) | 2022.03.11 |
[W7D2] 우리가 사용하는 앱들은 어떤 개발 방식으로 만들어졌을까? (2) | 2022.03.07 |
[W7D1] 버킷플레이스 프론트엔드 뜯어보기 (1) | 2022.03.04 |
[W6D4] 취업시장 동향의 데이터 시각화를 통한 가설 검증 (0) | 2022.03.02 |
- Total
- Today
- Yesterday
- W6D2
- 원어민친구
- 코드스테이츠PMB10
- 프로덕트매니져
- 래디쉬 이승윤대표
- ProductManager
- 언어교환모임
- 외국인친구
- 프로덕트매니저
- W6위클리과제
- 코드스테이츠
- 코드스테이츠PMB
- 오늘부터 프로덕트 매니저
- PM
- 원어민
- 멘토멘티밋업행사
- PBM10
- PMB
- 코드스테이츠부트캠프
- 영어회화
- 원어민친구사귀기
- product manager
- PMB10
- PMB10기
- W5D1
- 코드스테이츠10
- 판교의 젊은 기획자들
- W6D3
- 코드스티에츠PBM10
- 면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |