공공데이터 활용을 위한 오픈 API 이해하기

이번 포스팅에서는 공공데이터 활용을 위한 오픈 API 에 대해서 알아 보겠습니다. API를 이해하려면 우선 http 구문을 이해하고, URL의 개념을 알아야 합니다. URL(Uniform Resource Locator)은 인터넷 상에서 웹 페이지의 위치를 나타내는 주소입니다. 예를 들어, 내가 살고 있는 집의 주소는 00시 00구 00로 00아파트 00동 00호로 나타낼 수 있습니다. 인터넷(온라인) 상에서 내가 찾고자 하는 정보가 어디에 있고, 어떻게 찾아가야 하는 지 알려면 인터넷 상에서의 주소를 알아야 합니다. 내가 찾고자 하는 정보가 구글에 있다고 하면, 구글을 방문해야 합니다. 그럼 구글의 주소를 알아야 하고, 그 주소를 입력해야 합니다. URL 입력창에서 http://www.google.com(구글의 주소)를 입력하면, 구글 홈페이지로 이동하게 됩니다. 우리나라에서는 집 주소를 00시 00구 00로 00아파트 00동 00호 등으로 나타냅니다. 우리나라에서 주소 표현 방식을 이렇게 정한 것이죠. 이와 유사하게 인터넷 상에서도 주소(URL)을 나타내는 규칙이 존재하는데요. 그럼 URL의 규칙에 대해서 알아 보겠습니다.


URL 규칙

URL은 ‘통신규칙://인터넷 주소/경로 이름’으로 구성되어 있습니다. 제 블로그 주소를 예로 들어 보겠습니다. 제 블로그 주소는 http://www.zzinnam.com 입니다. 통신규칙은 http를 따르고, 인터넷 주소는 www.zzinnam.com라는 것을 알 수 있죠. 접속해서 글 하나를 클릭해 보겠습니다. URL주소가 “https://zzinnam.com/알뜰교통카드플러스”로 변경되었습니다. 슬래시(/) 뒤에 “알뜰교통카드플러스” 라는 경로가 추가된 것입니다. 알뜰교통카드 플러스 신규 신용카드에 대한 정보들이 나오는 것을 확인할 수 있습니다. http라는 단어가 처음 등장하는데요. http이 무엇을 의미하는 지 알아 보겠습니다.


http

http(hypertext transfer protocol)는 하이퍼텍스트(hypertext) 문서를 교환(transfer)하기 위한 통신규약(protocol)입니다. 하이퍼텍스트(hypertext)는 하이퍼링크(참조)를 통해 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트입니다. http로 시작하는 URL주소를 입력하고, 마우스 클릭을 통해서 다른 웹사이트나 문서 등에 접근할 수 있는 이유가 이러한 통신규약 때문인 것이죠. 만약, 정보 제공자 입장에서 특정인에게만 정보를 제공하고 싶은 경우가 있습니다. 정보 제공자와 정보 이용자 사이에 추가적인 규칙을 만들어 서로 약속을 하게 됩니다.


정보 제공자가 정보 이용자에게 얘기합니다.
정보제공자 왈: “정보 이용자야. 내가 제공하는 정보를 받고 싶으면, 이렇게 이렇게 해서 정보를 요청해라. 그러면 내가 이러이러한 정보를 줄께”.
정보이용자 왈: “그래. 알았어. 이렇게 이렇게 정보를 요청했으니, 정보를 보내줘”
정보제공자 왈: “전송 했으니, 확인해 봐”
정보이용자 왈: “오. 잘 왔네. 고마워”


위의 대화 문장과 연관된 개념이 API입니다. API에 대해서 알아 보겠습니다.


API

API(Application Programming Interface)는 두 어플리케이션이 서로 통신할 수 있는 서비스 계약이라고 이해하시면 됩니다. 여기서 어플리케이션은 서버, 로컬 컴퓨터, 앱 등을 모두 포괄하는 의미입니다. 서로 통신한다는 의미는 두 어플리케이션 사이에서 요청과 응답이 발생한다는 의미입니다. 즉, 서버, 로컬 컴퓨터, 앱 등에서 서로 요청과 응답이 이루어지는 서비스 계약입니다. API 문서에는 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있습니다. 공공데이터포탈에서 받고 싶은 데이터를 찾아서 들어가 보면, 상세 API 정보가 포함되어 있는 것을 확인할 수 있습니다. 그럼 API를 활용해서 받고자 하는 데이터를 요청하는 방법에 대해서 알아 보겠습니다.


공공데이터 정보 요청 및 응답 API 이해하기

아래 요청 메세지는 공공데이터포탈에서 제공하는 금융위원회_금융회사기본정보를 가져오기 위한 예시 명령문입니다.


https://apis.data.go.kr/1160100/service/GetFnCoBasiInfoService/getFnCoOutl?serviceKey=****&pageNo=1&numOfRows=10&resultType=json&basDt=20200408&crno=1101113892240&fncoNm=%EB%A9%94%EB%A6%AC%EC%B8%A0%EC%9E%90%EC%82%B0%EC%9A%B4%EC%9A%A9


요청문이 매우 길고 복잡해 보이지만, 전혀 어렵지 않습니다. 요청문을 잘 보시면, 물음표(?)가 있습니다. 물음표 앞 부분은 http://apis.data.go.kr/1160100/service/GetFnCoBasiInfoService/getFnCoOutl 문으로 위의 URL규칙에서 설명드린 부분입니다. 그런데, 물음표 뒷 부분은 위에서 설명드리지 않은 구문입니다. 물음표 뒷 부분을 쿼리스트링(querystring)이라 합니다.


쿼리스트링

쿼리스트링(querystring)은 사용자가 요청(입력)정보를 전달하는 방법 중의 하나로, url 주소 뒤에 “?”로 연결하여 사전에 약속된 정보를 전달하는 것을 말합니다. 이 구문에는 사용자가 어떤 특정 정보에 접근하는 지에 대한 정보가 담겨 있습니다.


형식

  • URL주소 이후에 ?를 쓰는것으로 쿼리스트링의 시작을 알립니다.
  • 정보 전달 방식은 요청정보=값 입니다.
  • 전달하고자 하는 정보가 여러개일 경우 &를 붙여 여러 정보를 넘길 수 있다.


위의 예시 명령문에서는 총 5개의 추가 요청정보와 값을 전달합니다. 각 요청정보의 의미는 금융위원회_금융회사기본정보를 설명하는 API정보에 나와 있습니다.

  • serviceKey(공공데이터포털에서 받은 인증키)=인증키 (인증키는 공공데이터포털에 회원 가입 후 부여받은 인증키입니다.)
  • pageNo(페이지번호)=1
  • numOfRows(한 페이지 나오는 결과 수) =1
  • resultType(결과를 출력하는 형식 지정)=json
  • basDt(정보의 기준년월)=20200408
  • crno(법인등록번호)=1101113892240
  • fnccmpNm(회사명)=%EB%A9%94%EB%A6%AC%EC%B8%A0%EC%9E%90%EC%82%B0%EC%9A%B4%EC%9A%A9

fnccmpNm(회사명)의 값이 이상한 기호로 표시되어 있습니다. 이 부분을 이해하려면 URL 인코딩과 디코딩 개념을 이해하셔야 합니다. URL은 ASCII 문자를 사용하여 정확한 정보를 송/수신할 수 있습니다. 하지만, URL 주소에는 ASCII 문자 이외에 값(ex. 한글 등)을 포함하기 때문에 이 값을 ASCII 형식으로 변환해 주어야 합니다.

  • URL 인코딩: ASCII 문자 이외에 값(ex. 한글 등)을 ASCII 형식으로 변환
  • URL 디코딩: ASCII 형식으로 변환된 값을 원래 값으로 변환

위에 있는 %EB%A9%94%EB%A6%AC%EC%B8%A0%EC%9E%90%EC%82%B0%EC%9A%B4%EC%9A%A9 값을 디코딩하면, 메리츠자산운영입니다. 반대로 메리츠자산운영을 인코딩하면, %EB%A9%94%EB%A6%AC%EC%B8%A0%EC%9E%90%EC%82%B0%EC%9A%B4%EC%9A%A9 값이 됩니다.
아래 링크를 통해 쉽게 확인해 보실 수 있습니다.

URL 인코딩 디코딩 값 확인하러 가기

URL 인코딩은 ASCII 문자를 “%” 다음에 두 개의 16진수로 대체합니다. 공백은 (+) 기호 혹은 %20으로 변환합니다.


출력결과 확인

위의 명령예시문을 URL주소 입력창에 입력하면, 아래와 같은 출력결과가 나옵니다.


{“response”:{“body”:{“items”:{“item”:[{“basDt”:”20200408″,”crno”:”1101113892240″,”fncoNm”:”메리츠자산운용”,”fncoEnsnNm”:”Meritz Asset Management”,”isinCd”:””,”isinCdNm”:””,”fncoRprNm”:”***”,”corpRegMrktDcd”:”E”,”corpRegMrktDcdNm”:”기타”,”bzno”:”1078708658″,”fncoAdr”:”서울특별시 종로구 북촌로 104 계동빌딩”,”fncoZpcd”:”03051″,”fncoHmpgUrl”:””,”fncoTlno”:”02-6320-3000″,”fncoFxno”:”02-6320-3009″,”sicCd”:””,”sicNm”:”64201″,”fncoEstbDt”:”20080506″,”fncoStacMm”:”12″,”fncoXchgLstgDt”:””,”fncoXchgLstgAbolDt”:””,”fncoKosdaqLstgDt”:””,”fncoKosdaqLstgAbolDt”:””,”fncoKrxLstgDt”:””,”fncoKrxLstgAbolDt”:””,”fncoSmenpYn”:””,”mntrFcnFncoCd”:””,”mntrFcnFncoCdNm”:””,”fncoEmpeCnt”:”0″,”empeAvgCnwkTermCtt”:””,”fncoEmpeAvgSlryAmt”:”0″,”actnAudpnNm”:””,”audtRptOpnnCtt”:””,”fncoMainBizNm”:””,”fssCorpUnqNo”:”00685935″,”fssCorpChgDtm”:”2020/03/23″}]},”numOfRows”:10,”pageNo”:1,”totalCount”:1},”header”:{“resultCode”:”00″,”resultMsg”:”NORMAL SERVICE.”}}}


요청정보에서 결과를 출력하는 형식을 json으로 지정했기 때문에, 위와 같은 형태로 출력결과가 나온 것입니다. json에 대해서 자세히 알고 싶으신 분은 아래 사이트를 참고하시면 됩니다.

JSON 이해하기


이번 포스팅에서는 공공데이터 활용을 위한 오픈 API 이해하는데 필요한 여러 정보들에 대해서 살펴 보았습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다