공공데이터 api 예제 - gong-gongdeiteo api yeje

정부부처 및 산하기관에서 발행하는 백서, 주제별 전문가가 선정한 최신 이슈와 관련된 지식, 지역/분류체계/제공기관/활용방법 별 공공데이터 개방 현황 등이 제공됩니다.  2020년 11월 현재 6,300개의 API와 36,384개의 파일 데이터를 제공합니다.  

 

공공 데이터를 이용하는 절차는 아래와 같습니다. 

  1. 사이트 회원 가입
  2. API 분류 검색
  3. API 사용 신청 및 API key 확보
  4. API 호출 및 사용

 

1. 사이트 회원 가입

공공데이터 포털사이트에서 '회원 가입'하여 아이디를 신청합니다.  회원 가입을 위해서는 이메일 등록하고 있으며, 아래와 같이 이메일 인증을 진행해야 합니다. 

공공데이터 api 예제 - gong-gongdeiteo api yeje
공공데이터 포털 아이디 가입

 

2. API 분류 검색

공공 데이터 포털에서는 방대한 양의 데이터를 제공하고 있어 원하는 데이터를 검색을 통해서 찾아야 합니다.  데이터 포털 사이트 상단 메뉴에서 '데이터 찾기' 메뉴를 선택하고, 키워드 검색을 진행합니다.  검색 결과에서 ③ 오픈 API를 선택하고 구현하고자 하는 항목의 '활용 신청'을 진행합니다.

 

공공데이터 api 예제 - gong-gongdeiteo api yeje
오픈 API 분류 검색

 

3. API 사용 신청 및 API key 확보

API 사용을 위해서는 API Key를 할당받아야 합니다.  API 호출 시 서버에서 인증하는 수단으로 사용하고 있습니다. API Key는 하나의 서비스에 대해서 1인당 1개만 신청 가능하고, 트래픽과 사용 기한에 대한 제한이 있습니다. 코로나 감영 현황 서비스의 경우에는 1000/일, 10,000,00/총까지 사용 가능하며 2년간 유효합니다.  (※ 연장 신청도 가능할 것으로 보입니다.) 라이선스는 영리 또는 비영리 목적에 상관없이 제한이 없으며, 일부 서비스는 출처만 표시를 요구합니다. 

 

공공데이터 api 예제 - gong-gongdeiteo api yeje
API 사용 신청 및 API key 요청 방법

 

4. API 호출 및 사용

API Key 인증은 신청 후 1~2 시간 정도 소요되고 이후에는 API 호출이 가능합니다.  코로나 서비스 현황 API의 경우에는 URL은 아래와 같이 요청 변수 및 출력 결과는 데이터 포털 사이트에서 문서로 첨부되어 있습니다. 

공공데이터포털은 행정안전부에서 운영하는 공공데이터 통합제공 시스템이다. 대한민국 정부가 보유한 다양한 공공데이터를 개방하여 누구나 편리하고 손쉽게 활용할 수 있게 하는 것을 목적으로 한다. 행정안전부 공공데이터정책과에서 관련 정책을 추진하고 있다.

즉 나라에서 보유한 데이터를 여러 형태로 사용할 수 있는 친절한 서비스인거죠!

 

 

 

그럼 API는 무엇일까요?

API(Application Programming Interface 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

쉽게 설명하면 누군가가 만든 프로그램을 사용하는 것을 말하죠..

즉 공공데이터API란 나라에서 보유한 데이터 프로그램을 허가를 받아 각자의 인증키로 사용할 수 있는 것을 뜻합니다!

 

 

 

 

실무에서도 굉장히 많이 사용되고 있고, 회사 면접 시에도 공공데이터 사용여부에 대해 많이들 물어본다고 하네요.

개발자라면 반드시 알아야할 사항 중 하나가 아닐까 생각됩니다! 

차근차근 확인해보도록 하죠!

 

 


 

 

 

 

우선 공공데이터포털사이트로 접속합니다.

https://data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

이미 많은 신입 개발자들이 포트폴리오를 만들면서 어떤 프로젝트에서는 OPEN API를 사용해봤을거라 생각되지만 정리하는 겸, 사용해보지 않은 분들도 가볍게 경험할 겸해서 OPEN API를 사용하는 방법에 대해 정리한다.

(2020.06.03 - 페이지 화면도 많이 바뀌었지만 검색창이나 신청버튼 등이 그대로 있으므로 참고해도 무방하다.)


공공데이터 포털 OPEN API 사용 프로세스

1. 공공데이터 포털에 접속, 로그인한다. (https://www.data.go.kr/)


2. 원하는 자료를 검색한다.

  여기서는 오늘날 제일 핫(?)한 미세먼지 데이터를 가져와서 대기오염 정보를 받아 볼 예정이다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

[미세먼지 검색화면]

공공데이터 api 예제 - gong-gongdeiteo api yeje

[미세먼지 검색결과]

검색결과를 보면 파일데이터 9건, 오픈API 5건이 있다. 그 중 내가 원하는 API를 선택하면된다. 여기서는 한국환경공단_대기오염정보 조회 서비스를 사용할 것이다.


3. 활용 신청하기, 사용 문서 다운로드하기

공공데이터 api 예제 - gong-gongdeiteo api yeje

위에 보이는 사진에서 "활용신청" 버튼을 눌러서 활용을 신청하면 된다.

그 전에 참고문서 부분에 있는 문서 파일을 다운로드하는 것이 좋다. 이 문서에 API에 대한 자세한 내용이 있다.

그리고 간단하게 다른 내용을 보는 것도 좋다.

End Point는 저 URL로 request를 보내라는 것으로 이해하면되고 API 유형은 REST, 데이터 기본 포맷은 XML이다 정도 확인하고 넘어간다. (XML만 제공되는 것은 아니다. 밑에서 JSON으로도 받음)


4. 개발 계정 신청하기

공공데이터 api 예제 - gong-gongdeiteo api yeje

[개발 계정 신청화면]

( *** 이미 대기오염정보조회 API는 신청을 해놔서 화면을 보여줄 수 없으므로 대기 중금속 정보 API를 신청하는 화면으로 대체했다. 상세기능정보만 다르기 때문에 똑같이 확인만하면 된다.) 

"심의 여부"가 "자동 승인"이므로 신청완료만하면 바로 API를 사용할 수 있다.

단, 아래에 상세기능 정보에서 일일 트래픽이 1000(대기오염정보API에서는 500)이므로 1000회 조회를 하면 더 오늘은 더 이상 사용할 수 없다.

더 많은 트래픽이 필요하다면 추가 신청과 승인절차를 기다리면 사용할 수 있게 된다.

승인일로부터 24개월이 가능한 점 확인을 하고, 시스템 유형은 일반적으로 일반으로 두면 된다.

그리고 상세기능정보에서 자신이 원하는 API 자료를 선택해서 필요한 것만 받을 수 있다.

위에서는 그냥 다 체크한다.


5. 마이페이지> 오픈API > 개발계정 API키 받기

마이페이지에 오픈 API에 개발계정이라는 탭으로 가면 활용에 1건이 되어있을 것이다. (이전에 사용하던 API가 있다면 더 있을 수 있음)

거기서 "대기오염정보 조회 서비스API"를 눌러보면 키 받는 버튼이 있다.

이 버튼을 눌러서 키를 받는다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

위 사진에서는 일반 인증키 재발급이라고 나와있지만 처음할 때는 일반키 발급(?) 이라고 써있을 것이다.

그것을 눌러 키를 받으면 검은색으로 칠해진 부분인 일반 인증키부분에 키 값이 발급될 것이다.

그러면 해당키를 사용해서 API서버에 요청하면 결과값을 받을 수 있다.

또한 3번에서 받은 참고문서를 여기서도 받을 수 있다.


6. 어떻게 사용하는지 문서 확인하기

이제 사용에 필요한 API key는 얻었으니 어디에 어떻게 보내는지만 알면 된다.

그 방법은 문서에 잘 나와있다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

[목차화면]

목차에서 사용가능한 서비스 목록을 확인한다.

위 사진에서는 2.2. 대기오염정보조회 서비스를 이용할 예정이니 해당 페이지로 가서 확인해보면된다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

해당 페이지로가면 서비스 인증방법이 서비스 key만 있으면 된다고 동그라미 표시가 되어있고 교환 데이터표준으로 XML과 JSON을 제공한다고 되어있다.

그 위에 밑줄을 못 쳤는데 제일 중요한 것인 인터페이스 표준으로 REST의 GET 방식으로 요청하라고 나와있다.

또한 메시지 교환 유형이 Request-Response이라는 것을 알 수 있고 실시간 정보지만 매 초당이 아니라 10분마다 측정된 값이 반영되는 것을 알 수 있다.

끝으로 JSON방식으로 응답을 받고 싶으면 &_returnType=json 을 추가하면 된다고 한다.

(밑에서 테스트할 때 해당 파라미터값을 넣어서 json으로 받아 본다.)

공공데이터 api 예제 - gong-gongdeiteo api yeje

[요청/응답 메시지]

중간에 이렇게 메시지 sample이 있다.

저 메시지 부분에서 서비스키만 내가 아까 받은 api키를 넣고 해당 URL로 요청하면 응답을 받을 수 있다.

각 파라미터에 대한 이해도 아래 사진처럼 문서에서 알 수 있다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

[파라미터 확인]

파라미터에 대한 설명이 나와있다. 일단 우리가 관심있는 것은 stationName으로 측정소명을 내가 알고싶어하는 위치의 측정소로 변경하는 것이고 dataTerm도 최근 1일간의 데이턴지, 1개월간의 데이턴지, 3개월간의 데이턴지 정하는 것이다.

측정소는 해당 API에서도 알 수 있지만 에어코리아의 측정소 정보에서 간단히 파악할 수도 있다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

[에어코리아 미세먼지 측정소정보]

지도에서 원하는 지역(ex 인천, 경기, 서울, ...)을 클릭하고 옆에 나오는 측정소 명으로 입력해서 테스트해보면 된다.


7. 브라우저를 이용한 테스트

이제 보낼 메시지도 알았고 메시지의 의미(파라미터)도 알았고 api key 까지 얻었으니 모든 준비가 되었다.

이제 어떤 프로그래밍 언어로 짠 프로그램이든 그냥 브라우저에서 테스트만 해보든 요청할 것만 남았다.

공공데이터 api 예제 - gong-gongdeiteo api yeje

공공데이터 api 예제 - gong-gongdeiteo api yeje

[브라우저 테스트 json, 브라우저 테스트 xml]

공공데이터 api 예제 - gong-gongdeiteo api yeje

공공데이터 api 예제 - gong-gongdeiteo api yeje

[자바 소스 json, 자바 소스 xml]

보다시피 브라우저의 URL창에다가 직접 메시지(GET방식)를 날려도 응답이 오는 것을 확인할 수 있고, 자바로 간단하게 소스를 만들어서 요청해도 받아지는 것을 확인할 수 있다.

자바 뿐만아니라 다양한 프로그래밍 언어에서 혹은 프레임워크에서 위와 유사한 방식으로 API를 호출하고 결과를 리턴할 수 있을 것이다.

끝으로 API호출하는 샘플 자바소스를 제공한다. (요새는 심지어 OPEN API 페이지에서 공식적으로 여러 언어로 지원한다... 내 원래 샘플코드를 삭제하고 가이드에 있는 코드를 가져왔다. 심지어 여러 언러(java, javascript, c++, php, curl object-c, python, nodejs)로도 샘플 코드를 지원한다.)

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

32

33

34

35

36

37

38

39

40

/* Java 샘플 코드 */

 

 

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.io.BufferedReader;

import java.io.IOException;

 

public class ApiExplorer {

    public static void main(String[] args) throws IOException {

        StringBuilder urlBuilder = new StringBuilder("http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"