공공데이터 활용을 위해, Open API를 배워보자 (feat. 평범한 개발자 김슬)


API가 대체 뭔가요?


지난 10월 16일 공익데이터 실험실 가을스프린트 참여자들을 위한 두번째 교육이 진행되었습니다. 강의는 평범한 개발자, 널채움 공동운영자 김슬 님께서 진행해주셨어요. 주제는 Open API 활용인데요, 개발에 대해서는 전혀 모르는 저도 들어보았습니다. 

강의 목적은 (1) API의 정체를 파악하는 것, (2) 공공데이터 포털에서 API를 활용하는 것인데요. 과연 저도 잘 따라갈 수 있을까요? 친절한 슬 님은 강의내용을 못 알아들어도 된다고 하셨지만, 알고 싶은 마음을 가득 안고 열심히 참여했습니다. 여기서는 제가 배운 내용과 팀들의 질의내용 등 Open API 초심자를 위한 쓸모있는 정보를 전달해보겠습니다. 😊


01 먼저 API(Application Programming Interface)란,



  • 개발자들이 협력하는 방법
  • 자신들이 만든 데이터와 기능을 다른 사람들이 사용할 수 있게 하는 인터페이스

라고 할 수 있습니다. 

쉽게 말해 전구를 만들었다면 이 전구를 켜고 끄게 해주는 게 필요한데요, API가 그 역할을 한다고 합니다. 사전적 의미는 ‘소프트웨어 어플리케이션을 개발하기 위한 여러가지 함수의 집합’이며 Open API는 직접 개발하지 않아도 서비스를 만들 수 있도록 해줘, 사용자가 서비스 생산자 역할도 할 수 있게 해준다고 해요.

Open API는 API 중에 누구나 사용할 수 있도록 공개한 것이고, 대부분 Web API 형태로 제공된다고 합니다. Web API도 API 중의 일부분이라고 해요. 즉 무척 다양한 종류의 API가 존재한답니다.

API를 사용할 때는 웹 프로토콜을 통해 공개된 Web API는 웹브라우저로 이용할 수 있고, Hoppscotch 같은 툴을 이용할 수도 있어요.

우리 생활 속에서 쓰이는 API를 알면 더 쉽게 느낄 텐데요. 흔히 siri에게 날씨를 물어보거나, 포털 사이트에서 날씨를 확인하잖아요? 그때 siri가 날씨를 알려주는 건 아이폰이 똑똑해서 모든 날씨 정보 값을 갖고 있어서가 아니라 API를 통해서 날씨 정보 값을 읽어서 우리에게 알려주는 거랍니다. 

개발 기술 없이도 API를 이용하는 방법, 즉 비 개발자를 위한 API 활용 방법을 이번 시간에 배워보기로 합니다. 우선 API를 사용할 때 기본적으로 알아야 할 것들을 확인!


02 웹주소에 규칙이 있는 걸 알고 있나요?


웹주소는 “Host + Path + Query String” 으로 이루어졌어요. 예를 들어 환율 API의 URL을 한번 보겠습니다.

URL https://api.exchangeratesapi.io/latest?base=USD 가 있을 때, 

<그림 1> 웹주소의 구성


위 그림과 같이 Host, Path, QS로 각각 구분할 수 있어요.

Query String을 보면 latest 뒤에 ‘?’가 있고 그 뒤에 키와 값이 ‘=’로 붙어 있습니다. 주소가 더 길어질 경우 즉 보고 싶은 데이터값이 여러 종류일 경우에는 ‘&’으로 여러 개의 값이 연결되어있답니다. 저기서 달러가 아닌 유로 기준의 환율을 보고 싶으면 base=EUR, 원화 기준 환율을 보고 싶으면 base=KRW로 바꿔서 호출하면 돼요.


03 API의 데이터 포맷은



  • JSON 형식
  • XML 형식

이 많아요. API는 대부분 JSON 형식이지만 공공데이터 API는 XML이 많습니다. 둘의 형태는 아래와 같이 차이가 있어요. 포맷 형태를 구분만 할 수 있으면 포맷을 읽지 않아도 사용하는 방법이 있어요. (오호!)

<그림 2> API의 데이터 포맷


공익데이터 실험실에 참가 중인 프로젝트팀들은 공공데이터를 활용합니다. 그래서 공공데이터 API를 읽으면 볼 수 있는 데이터가 더 다양하겠지요? 공공데이터 API는 정부에서 공개하는 공공데이터를 문서가 아닌 API 형태로 공개하는 건데요, 그 이유는 실시간 데이터를 공개하기 위해서예요. 시민들의 건강을 위해 미세먼지 수치를 제공하는데 매시간 변화하는 수치를 그때마다 문서로 공개하는 건 너무 비효율적이니까요.

공공데이터 API의 주요 제공처는 공공데이터포털 서울시열린데이터광장이 있습니다. 


04 그럼 공공데이터포털에서 API를 호출하는 법, 포맷에 따라 사용하는 방법 등을 진행해보겠습니다.

 

  • 알고 싶은 데이터의 키워드로 먼저 검색을 합니다.
  • 형식에 따른 분류 중 API로 보고 싶으면 오픈 API 항목을 선택하면 됩니다.
  • 보고 싶은 데이터를 선택해서 활용 신청을 하고 세부 요소들을 선택한 뒤 활용 신청을 마무리 하면 됩니다.

공공데이터포털의 단점은 활용 신청한 데이터를 사용하려면 한두 시간의 기다림이 필요하다는 거예요. (거의 전 세계에서 유일한 기다림이라고 하네요…) 일단 활용 신청을 한 뒤 해당 데이터의 상세기능정보 우측 미리 보기를 누르면 아래 <그림3>의 하단과 같이 요청변수 창이 열립니다. 파라미터를 확인하고 하단의 미리 보기를 누르면 주소가 완성되어 API를 호출하게 돼요. 그 결과가 그 다음 <그림 4>입니다.

<그림 3> 공공데이터포털의 활용신청 상세기능정보

<그림 4> 활용신청 데이터의 미리보기


위 결과는 어떤 포맷인가요? 바로 XML 포맷입니다. 위에서 포맷만 알면 그걸 읽지 않아도 사용하는 방법이 있다고 했죠? 바로 https://json-csv.com/xml 입니다. 여기는 XML 포맷을 변화해줘요. <그림 5> 상단 좌측을 클릭해서 업로드하거나 우측에 붙여넣기를 하면, 그 아래 보이는 스프레드시트처럼 XML 데이터가 csv 파일로 보기 쉽게 변환된답니다.

<그림 5> XML 포맷을 보기 쉽게 변환하기


그리고 이 값을 엑셀이나 스프레드시트로 옮기면 됩니다. (참 쉽죠?)

아까 우리가 주소 구조를 살펴봤는데요. 방금 한 실습에서는 10개의 값만 볼 수 있는데, 호출된 API 창의 주소를 보면 ‘&numOfRows=10’으로 되어있는 걸 확인할 수 있어요. 여기서 값을 변경하면 더 많은 양의 데이터를 볼 수 있습니다.

API를 사용할 때는 제공자가 작성한 사용 방법을 확인할 필요가 있어요. 그중에서도 서비스 URL(운영환경)과 오퍼레이션 명, 파라미터 설명을 필수로 보셔야 한답니다.

서울시열린데이터광장을 예로들면 <그림 6>과 같은 내용이 파라미터에 관한 설명이에요. API 호출 시 필수로 넣어야 하는 값과 넣어도 되고 안 넣어도 되는 값과 그에 대한 설명이 있어요. 


<그림 6> 서울시열린데이터광장에서 API 호출시 요청인자

서울시공공데이터광장은 공공데이터포털과 달리 사용을 위해서는 인증키 신청이 필요합니다. 인증키를 받은 후에 보고 싶은 데이터의 서비스 URL에서 (인증키)라고 되어있는 부분에 자신이 받은 인증키를 넣으면 돼요. 이건 데이터 활용을 신청하는 사용자마다 다른 값을 가진답니다.



<그림 7> 서울시열린데이터광장의 샘플 URL과 인증키


05 여기서 잠깐 질문이 하나 생깁니다.


데이터를 통계 DB로 구축해놓은 게 있는데 그것과 달리 API로 보는 것의 장점이 뭘까요?
API는 앞서 말씀드린 것처럼 개발자들이 협력하는 방법입니다. 즉 API로 제공하면 개발에 사용되는 데이터 추출이 훨씬 간편해지는 장점이 있어요. 웹사이트에 구축된 데이터의 경우 웹사이트가 리뉴얼될때마다 데이터 추출을 위한 크롤러를 새롭게 만들어야 해요. 하지만 API는 늘 동일하게 데이터를 가져올 수 있습니다.

이 정도면 API 호출을 위한 기본 과정은 클리어! 이제 API 형식의 공공데이터를 더욱 쉽게 활용할 수 있을까요?



06 예제 후에는 팀들이 프로젝트를 진행하며 찾은 데이터의 API 활용에서 발생하는 문제를 해결하는 시간을 가졌습니다.

팀마다 보고 싶은 데이터가 있지만, API로 제공되는 데이터를 보는 데 어려움을 겪었어요. 공공데이터포털에서 제공하는 오픈 API의 파라미터값 설명이 자세하지 않아서 어떻게 데이터 요청을 해야 하는지, 값을 어떻게 입력해야 하는지 헷갈리기도 했고, 샘플코드에 문제가 있어서 에러가 나기도 했어요. 포맷의 문제로 출력값이 깨지기도 했고요. API로 호출한 데이터가 보기 어렵게 출력되는 경우도 있었지요.

그래서 즉각 서로의 데이터 주소와 인증키를 주고받으면서 문제를 풀어나갔습니다. 위에서 배운 것과 같이 XML 데이터를 csv로 변환해주는 사이트와 JSON을 좀 더 보기 좋게 만들어주는 JSON Pretty Print 등의 툴 사용법도 배웠습니다.


Bonus_ API로 데이터를 받았다면, 우리가 만든 데이터를 API로 만드는 법도 있겠지요?

스프레드시트의 publish to web 기능을 쓰면 우리의 데이터를 csv 파일로 만들 수 있어요. 좀 더 전문적인 API로 만들려면  sheety.co의 서비스를 이용하면 됩니다. 스프레드시트를 등록하면 API를 호출할 수 있는 주소를 주는데요, 웹에서 JSON이나 XML 형태로 볼 수 있어요. 다른 개발자들에게 공개하고 다양하게 활용할 수 있도록 제공할 수 있는 거지요.




Open API 활용은 계속된다

온라인으로 강의가 진행되어서 함께 실습하며 모르는 부분을 확인하고 재시도하며 익숙해지는 데는 다소 어려움도 있었어요. 그래도 잠깐이나마 프로젝트별로 작업 중인 API 호출을 실습하며  문제 파악과 해결을 시도하는 시간이었습니다.

 “API 전반에 대해 알게 되었고 직접 API를 열어보는 법, csv 변환까지 조목조목 다 알게 되었어요.”

그리고 우리에겐 A/S가 남아있습니다! 슬 님과 프로젝트 팀들은 강의가 끝난 후에도 보고 싶거나 필요한 데이터 API를 호출하는데 계속해서 도움을 주고받고 있어요. 간단한 개발과 개발을 통해 API를 활용하는 방법을 배우는 좀 더 업그레이드 된 오프라인 워크숍도 계획 중이랍니다. 

공공데이터포털이나 서울시공공데이터를 자주 사용하지만, 오픈 API는 사용할 생각도 없었던 저에게도 큰 도움이 되는 시간이었습니다. (이제는 API를 더 잘 활용하는 개발도 한 번 도전해볼 수 있겠지요?! 😂) 

우리 사회의 문제를 해결하고 싶은 시민들이 공공데이터를 통해 실마리를 풀어나갈 수 있기를 기대하며 국내 공공데이터 API가 좀 더 잘 만들어졌으면 좋겠다는 소망도 살짝 품어봅니다. 가을 스프린트 팀들에게 유용한 과정이 되었기를 바라며, 다음 강의에서 또 만나요!