[API] 공공데이터 오픈 API 사용법

민지·2024년 1월 10일
4

API

목록 보기
1/2

OPEN API

프로젝트를 진행하다보면, 방대한 양의 데이터베이스를 구축해야 하는데 스스로 일일이 만들기에는 복잡하고 너무 어렵다.
이때 open api를 사용하면 많은 데이터를 읽고 쓸 수 있는데, 이때 api의 뜻과 공공데이터 포털에서 사용하는 오픈 api 사용법을 알아보도록 하자.

배운 내용들

  • API란? open API란?
  • 공공데이터 포털에서 제공하는 open api 서비스 사용법

📌 API란? open API란?

API == Aplication Programing Interface이다.

해석을 하자면, 응용프로그램에서 데이터를 읽고 쓰기 위해 사용하는 일종의 소통창구라고 할 수 있다. 하지만 이렇게 표현하자면 이해하기가 어려워서 간단히 생각해보면, 구현내부의 동작은 모르지만, 사용법만 알면 서비스를 이용할 수 있게 하는 것이라고 할 수 있다.

가령, C++언어에서 System.out.println(); 함수를 사용할 때, 해당 함수의 정의와 구현방법은 모르지만, String을 input값으로 넣으면 콘솔창에 출력한다는 사용법은 알고 있기에 간편하게 사용할 수 있다. 이 경우에는 System.out.println()함수를 API라고 할 수 있다.

API는 크게 2가지 종류가 있다. 회사에서만 사용할 수 있는 공개되지 않는 private API와, 공공에서 사용할 수 있는 public API가 있다. public API는 open API라고도 불린다.

📌 공공데이터 포털에서 제공하는 open api 서비스 사용법

공공데이터를 사용하는 사이트는 다양하게 존재한다.
공공데이터 포털
서울 열린데이터 광장

둘 중, 서울 열린데이터 광장을 이용해보도록 하겠다.

공공데이터 중에 흥미있어 보이는 "서울시 동상 현황"을 선택했다.

1. 인증키 발급하기

해당 사이트에서 회원가입 - 로그인을 한 후, 인증키를 신청해야 한다.
인증키 신청발급
개인 인증키가 있어야 api를 사용할 수 있기에, 정보를 입력하고 인증키를 발급하자.

참고로, 현재 api는 개인적인 학습에 이용할 것이기에 사용URL이 없다. 이처럼 사용 URL이 없는 경우에는 localhost를 작성해주면 된다.

데이터를 바로 볼 수 있는 방법 - 샘플 URL


샘플 URL코드에 발급받은 개인 인증키를 넣고, 본인이 원하는 확장자(xml 또는 json)을 입력해주면, 해당 링크에서 데이터를 바로 볼 수 있다.

xml

json

2. 자바로 데이터 가져오기

[open api 이용방법] 탭에 들어가면, open API 셈플코드가 존재한다.

이클립스에 해당 코드를 복사하고, 해당 코드에서 인증키, 요청파일타입만 적고 실행해주면 된다.

근데 에러가 났다.

Error: Could not find or load main class ApiExplorer
Caused by: java.lang.NoClassDefFoundError: ApiExplorer (wrong name: testcode/ApiExplorer/ApiExplorer)

에러 원인은 클래스 경로와 패키지 구조의 불일치로 인해 발생한 것이었다. 클래스 로더가 코드에 지정된 곳에서 해당 패키지 경로에 존재하는 클래스를 찾아야 하는데, 일치하기 않아서 못 찾은 경우이다.

해결법은 간단했다. 뇌를 비우고 만들어서 그랬다.. 🤯

이클립스에서 java project를 만든 후, 패키지를 만들 때 클래스명을 APiExplorer, 패키지명을 test라고 정확히 명시해 해당 샘플코드와 맞춰주면 된다.

샘플 코드

/* Java 1.8 샘플 코드 */

package test;

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.seoul.go.kr:8088"); /*URL*/
		urlBuilder.append("/" +  URLEncoder.encode("65526b696f6f6c693833424b6f586c","UTF-8") ); /*인증키 (sample사용시에는 호출시 제한됩니다.)*/
		urlBuilder.append("/" +  URLEncoder.encode("xml","UTF-8") ); /*요청파일타입 (xml,xmlf,xls,json) */
		urlBuilder.append("/" + URLEncoder.encode("CardSubwayStatsNew","UTF-8")); /*서비스명 (대소문자 구분 필수입니다.)*/
		urlBuilder.append("/" + URLEncoder.encode("1","UTF-8")); /*요청시작위치 (sample인증키 사용시 5이내 숫자)*/
		urlBuilder.append("/" + URLEncoder.encode("5","UTF-8")); /*요청종료위치(sample인증키 사용시 5이상 숫자 선택 안 됨)*/
		// 상위 5개는 필수적으로 순서바꾸지 않고 호출해야 합니다.
		
		// 서비스별 추가 요청 인자이며 자세한 내용은 각 서비스별 '요청인자'부분에 자세히 나와 있습니다.
		urlBuilder.append("/" + URLEncoder.encode("20220301","UTF-8")); /* 서비스별 추가 요청인자들*/
		
		URL url = new URL(urlBuilder.toString());
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod("GET");
		conn.setRequestProperty("Content-type", "application/xml");
		System.out.println("Response code: " + conn.getResponseCode()); /* 연결 자체에 대한 확인이 필요하므로 추가합니다.*/
		BufferedReader rd;

		// 서비스코드가 정상이면 200~300사이의 숫자가 나옵니다.
		if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
				rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		} else {
				rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
		}
		StringBuilder sb = new StringBuilder();
		String line;
		while ((line = rd.readLine()) != null) {
				sb.append(line);
		}
		rd.close();
		conn.disconnect();
		System.out.println(sb.toString());
	}
}

실행결과

실행결과, 콘솔창을 보면 맞게 입력되었다는 Response code : 200과 함께 데이터를 xml형태로 가져온 것을 확인할 수 있다.

근데 해당 샘플코드에 대한 이해없이 그냥 넘어가면 심심하니깐.. 다음 포스팅에서는 예제코드를 공부하며 얻은 공부결과를 기록해보겠다~

profile
배운 내용을 바로바로 기록하자!

0개의 댓글