API활용 노트 01 ~ 02는 기본적인 API에 대한 개념과 사용법, 그리고 실제로 간단한 서비스를 만들어 보겠습니다.
(이 게시글은 API에 대해 공부하며 작성한 순한맛 설명 버전의 게시글입니다.)
API 란?
API가 무엇인지에 대한 간단한 설명
API(Application Programming Interface)는 말 그대로
‘Application(특정한 기능의 소트프웨어)의 Programming Interface(프로그래밍 된 인터페이스)’
즉, 두개의 소프트웨어가 서로 통신을 할 수 있도록 하는 메커니즘을 의미합니다.
조금 더 자세하게.
‘Interface’라는 것은 키보드와 마우스 같이 사람과 컴퓨터를 연결하는 장치를 의미하는데,
‘Programming Interface’는 그것을 프로그램이라는 것을 통해 두개의 소프트웨어를 연결해 준다는 것입니다.
출처: http://sahilsk.github.io/articles/so-youre-writing-api-client
정말 단순히 이야기 하면, 그냥 두 기계가 데이터를 주고받는 통신체계를 의미하는 단어입니다.
아래의 글은, API가 정말 어떤 의미를 가지는지 자세하게 정리해 둔 블로그 입니다.
[IT교양] 비전공자를 위한 API 이해하기 (feat. Open API, REST API) [랴먕님 블로그]
API라는 것을 사용하는 이유?
API라는 것을 어떻게 사용할 수 있을지
만약에 다음과 같은 서비스를 만들어야 한다면.
(사실은 실제로 제가 만들어보고 싶은 것..)
- 정신없는 아침 출근시간,
- 오늘 기온은 어느 정도 이며 옷은 어떻게 입고 나가야 할지,
- 강수 예보가 있는지에 따라 우산을 챙길지 말지,
- 굳이… 핸드폰을 켜서 날씨를 검색해 보는게 귀찮다..
정말 다양한 방법들이 떠오르는 것 같습니다.
창문을 열고 밖을 보며 예측을 하거나🙃, 온습도 센서를 설치해 날씨 예측을 해볼 수도 있고…
어쨋든 데이터를 받아오는 과정에서 기상청 데이터베이스와 내가만든 소프트웨어가 통신을 하는데,
그렇게 대화할 수 있도록 프로그래밍 하는 체계를 ‘API’라고 부르기로 했습니다!
이렇게 API를 사용하면, 내가 필요한 서비스를 골라서 제공된 설명서를 보고 적용할 수 있고
내가 직접 새롭게 개발할 필요 없어, 시간과 비용을 아낄 수 있기 때문에 API라는 것을 사용합니다.
(사실 똑똑한 개발자 분들이 우리 편하게 쓰라고 만들어 주신건데… 안쓸 수 없죠 🤔)
일단 API 써보기
기상청 API를 사용해서 데이터를 요청해보고 받아보기.
그럼 API에 대해 더 알아보기 위해, 만들어 보고자 했던 서비스를 API를 활용해 봅시다.
우선 기상청 API를 사용하기 위해, ‘공공데이터 포털’에 들어가 줍니다.
이 사이트는 open API, 즉 공공 데이터를 오픈된 API를 통해 제공해 주는 사이트 입니다.
출처: https://www.data.go.kr/index.do
공공데이터 검색창에 원하는 데이터 ‘기상청’을 키워드로 검색해 주었습니다.
이것저것 다양한 데이터들이 있지만, ‘기상청_단기예보 ((구)_동네예보) 조회서비스’의
로그인과 휴대폰 인증 및 이것저것 절차를 거치면 무료로 ‘활용신청’을 할 수 있습니다.
만약에 ‘사업자’인 경우 위의 안내문을 잘 읽어보면 좋을 것 같습니다.
활용목적과, 저작자표시에 동의하면 활용신청 절차가 끝이 납니다.
마이페이지 > 데이터 활용 > open API > 활용신청 현황 > 기상청_단기예보 ((구)_동네예보) 조회서비스
또는 본인이 사용하고자 하는 서비스에 대한 정보를 한번 쭉 봐줍니다.
(좌측 사진) 기본정보의 ‘상세설명’을 클릭해보면 이 API를 어떻게 사용하는지 설명서가 있습니다.
‘서비스 정보’칸에서는 실제 이 API를 활용하기 위한 인증키(주황색 박스) 등 중요한 정보들이 있습니다.
(우측 사진) 앞으로의 날씨를 알려주는 ‘단기예보조회’의 ‘확인’버튼을 클릭해서,
여러가지 요청변수 값을 수정하여 입력하고 ‘미리보기’를 누르면 받은 데이터를 볼수 있습니다.
현재의 날짜와 시간(base_date, base_time), 위치는 성수동(nx, ny)으로 설정해 주었습니다.
어떤 데이터를 입력할 지에 대해서는 아래에서 다루도록 하겠습니다.
출처: https://www.kma.go.kr/metropolitan/html/main/index.jsp#
그러면 좌측의 화면 처럼, 일련의 데이터(XML 데이터)를 받을 수 있습니다.
우측 화면의 실제 기상청 데이터와 비교, 온도(TMP) 습도(REH)등 같다는 것을 알 수 있습니다.
이렇게 ‘미리보기’를 하는 과정에서 우리가 원하는 데이터를 요청하고 받는 것을 해 보았고,
이것이 API라는 통신체계의 기본 구조 입니다.
실제로 방금 웹 주소창에 URL을 통해 요청(Request)을 보냈고, URL을 복사해서 뜯어보면
우리가 작성했던 ‘요청 변수(Request Parameter) : 항목과, 샘플 데이터’가 있습니다.
그리고 우리는 ‘기상 정보(XML 데이터)’를 받았죠.
이 일련의 과정을 이제 Python코딩으로 해보겠습니다.
Python으로 API 써보기
Python으로 기상청 API를 사용해서 데이터를 요청해보고 받아보기
이제부터는 간단합니다. 앞서 ‘주소창에 URL을 통해 요청’했던 과정을 코드가 할 수 있도록 해주면 됩니다.
이런 HTTP 요청 과정은 Python의 모듈 ‘requests’를 사용합니다.
1
2
3
4
5
6
7
import requests
URL = 'http://www.google.com'
response = requests.get(URL)
print(response.status_code)
print(response.text)
위의 코드는 requests 모듈의 기본적인 형태입니다. www.google.com 주소로 GET요청을 보내고,
서버에서 요청을 통해 무언가 처리한 후 요청자(클라이언트)에게 응답(response)하는 코드 입니다.
여기서’response.status_code’는 응답상태 코드로, 200(서버에서 정상응답을 보냄)입니다.
(흔히 아는 404 코드는 서버와 잘 통신을 했지만, 서버가 요청한 바를 찾을 수 없을때 오류코드!)
‘response.text’는 응답의 내용으로, 보이는 것과 같이 HTML코드 입니다.
당연하게도 구글 메인 페이지의 HTML코드 입니다.
이제 ‘http://www.google.com’ 부분을 우리가 웹 주소창에 요청했던 URL로 바꾸어줍니다. ('serviceKey=인증키'는 open API에서 발급받은 것을 사용!)
1
2
3
4
5
6
import requests
URL = 'https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst?serviceKey=인증키&pageNo=1&numOfRows=100&dataType=XML&base_date=20231010&base_time=2000&nx=61&ny=126'
response = requests.get(URL)
print(response.status_code)
print(response.text)
그런데, 이렇게 코드를 실행하면 오류가 생깁니다.
1
Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_ILLEGAL_PARAMETER] sslv3 alert illegal parameter (_ssl.c:997)'))
위와 같이 ‘SSL Error’라는 것이 발생하죠.
설명서를 읽어 보아야 겠습니다.
‘기상청_단기예보 ((구)_동네예보) 조회서비스’ 의 상세설명에 참고문서를 다운 받아서 내용을 확인해 보면,
우리가 현재 사용하고 싶은 [단기예보조회]의 상세 기능 명세서에 Call Back URL이라는 항목이 있습니다.
Call Back URL 이란, 서버측에서 클라이언트의 어떤 URL로 데이터를 보낼지 정해놓은 주소 인데,
자세히 보면 맨처음 시작이 ‘https’가 아니라 ‘http’임을 알 수 있습니다.
https인지 http인지는 요청을 받는 서버가 정하는 것에 따라 별도로 간주하는데,
현재 우리가 사용하는 기상청 open API서비스 에서는 http를 사용하라고(Call Back URL) 정해 주었습니다.
다시 ‘https’부분을 ‘http’로 수정하여 결과를 확인해 보면,
상태코드(status_code)는 200, 응답 내용(text)은 기상정보(XML) 데이터를 받을 수 있습니다.
다음 편에 계속… 🙄
( 이 게시글은 저의 첫번째 블로그의 게시글 네이버 블로그 ‘호기심 대마왕 공대생’ 에서도 보실 수 있습니다. )