VWorld로 보는 API
우리는 날씨를 보기 위해 시리, 빅스비를 부르거나 직접 뉴스를 보는 등 다양한 행동을 합니다. 이때 날씨의 정보는 어떻게 불러와지는 걸까요? 우리가 날씨를 보기 위해 사용하는 다양한 웹사이트들, 앱들은 기상청 서버로부터 실시간으로 날씨정보를 요청해서 받아옵니다. 즉, 미리 작성된 소프트웨어를 통해 기상청 서버 정보들이 기상청 서버와 앱들 사이에서 요청되고 전송되는 것입니다.
이처럼 기계와 기계, 소프트웨어와 소프트웨어 사이에서 수많은 요청과 정보 교환이 이루어집니다. 이들 사이에서도 소통할 수 있는 창구가 필요한데 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 API라고 합니다. 제품 개발을 할 때, 성공적인 제품 개발을 위해서, 개발자와 원활하게 소통하기 위해서 알아야 하는 것은 API입니다.
프로그램과 프로그램을 연결시켜주는 매개체, API
API는 Application Programming Interface의 약자로 직역하자면 애플리케이션을 프로그래밍할 때 쓰이는 인터페이스이다.
여기서 인터페이스란 상호 정보 소통을 돕기 위해 경계에 존재하는 시스템이다. 예를 들자면 우리가 은행에서 돈을 맡기거나 찾아야 할 때 보통은 은행에 직접 방문하여 내가 필요한 업무를 담당하는 창구로 간다. 필요에 따라서는 ATM 기기를 활용하기도 하는데 여기서 창구에 있는 직원, ATM 기기를 인터페이스라고 할 수 있다. 즉, 은행과 나와의 상호 정보 소통을 돕기 위해 경계에 존재하는 것들이다.
클라이언트가 주소로 어떤 요청을 보낸다면 그 주소에 있는 API에서 응답을 하여 요청을 받아준다. 예를 들어 로그인 확인에 대한 요청을 보내면 서버가 로그인의 기능을 수행하고 응답하여 잘 되었는지, 문제가 있는지를 알려준다. 하지만 알아둬야 할 것은 API를 통해 요청과 응답을 주고받을 때는 데이터도 같이 담긴다는 것이다. 로그인 요청을 할 때 ID 데이터와 비밀번호 데이터가 필요하다는 것이다.
이러한 과정을 거치기에 클라이언트와 서버가 통신할 때 프로그림의 기반이 되는 API는 상당히 중요하다. 하지만 어떤 제품 개발을 위해서 그 모든 것을 개발자가 다 만들 수 없다는 걸 프레임워크와 라이브러리를 통해 알 수 있다. 그래서 외부의 좋은 기능이나 데이터를 사용하기 위해 공개된 API를 Open API라고 한다.
Open API(오픈 API)란?
하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스를 말한다. 네이버, 카카오 같은 대기업부터 시작해서 개인 Open API까지 굉장히 다양하게 존재한다. 이런 기업과 사람들이 API를 오픈하는 이유는 자사 서비스의 기능을 다양한 서비스에 활용할 수 있도록 하여 서비스의 저변을 넓히고 시장을 확대하기 위한 목적이기 때문이다.
이러한 Open API와 같은 공용 API를 보면 RESTful API라는 단어를 종종 볼 수 있다. 이 API는 API를 REST한 것인데 여기서 REST는 'REpresentational State Transfer'의 줄임말이다.
REST는 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고받는 모든 것을 의미한다. 즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 뜻한다.
클라이언트 소프트웨어는 서버에 요청을 보낼 때 이 과정에서 RESTful API는 기본적인 데이터 처리 기능에 CRUD 표현 방식을 사용하고 있다. CRUD라고 불리는 이 네 가지 요청은 데이터를 다룰 때 기준이 되는 요청으로 소프트웨어에서 굉장히 중요하다.
CRUD는 프로그래밍을 할 때 기본적인 규칙으로 굉장히 중요하기 때문에 개발자들은 데이터를 항상 이 관점에서 생각한다.
공개되어 있는 오픈 API
API Store: 국내외 다양한 API를 소개하는 서비스
https://www.apistore.co.kr//main.do
공공데이터포털: 국가에서 제공하는 데이터 제공용 서비스
VWorld: 네이버 지도나 다음 지도와 같은 지도 정보 사용 가능
https://www.vworld.kr/v4po_main.do
영화관입장권통합전산망: 영화진흥위원회 영화관입장권통합전산망에서 제공하는 서비스 사용 가능
https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do
커리어넷: 한국직업능력개발원에서 제공하는 진로정보와 관련 콘텐츠 사용 가능
https://www.career.go.kr/cnet/front/openapi/openApiMainCenter.do
이처럼 현재 공개되어 있는 오픈 API는 다양하다. 주요 국내 대기업부터 해외 대기업, 공공 기관까지 다양한데 그중 영화진흥위원회 오픈 API를 다뤄보자.
VWorld 오픈 API
https://www.vworld.kr/v4po_main.do
VWorld 오픈API는 VWorld 2D/3D 기반의 다양한 국가공간정보 및 검색 기능을 외부에 웹 서비스 형태로 공개하여 사용자가 원하는 지도 콘텐츠를 만들 수 있는 웹 개발 프로그램이다.
오픈 플랫폼에서 지도 서비스와 데이터를 개발자에게 제공하면 이걸 토대로 개발자는 부동산, 교통, 날씨 및 생활정보 등 다양한 정보를 보여주는 새로운 서비스를 만들 수 있다.
앞서 언급한 CRUD에서 get만 있다고 생각하면 된다. VWorld는 현재 공공데이터로 수정 및 삭제가 불가능하기 때문이다. 사실 CRUD가 다 있어야 한다고 생각했는데 생각을 틀어보니까 데이터를 제공하는 곳에서 수정 및 삭제를 할 수 있지만 개발자가 하는 것은 불가능하기 때문이다.
1. 오픈API 인증키 요청/발급: 지도를 만들기 위한 인증키를 발급
2. 오픈API 이용방법 학습: 오픈API 활용을 위한 가이드와 예제 학습
3. 오픈API 코드작성: 나만의 지도를 2D/3D로 디자인하고 콘텐츠 개발
4. 테스트 및 오류 수정: 테스트를 통해 완성도 높은 지도 제작
5. 내 지도 생성: 내 지도를 보고 개인 홈페이지에 생성
2D/3D 지도 API
배경지도 API
WMS/WFS API
데이터 API
지도검색 API
Geocoder API
범례이미지 API
Static Map API
해당 기능들을 이용하여 다양한 지도를 제작할 수 있다. 예를 들어 3D 지도 API를 통해 문화유산의 이동경로를 추적할 수 있고 데이터 API를 통해서 한 지역의 데이터를 나타낼 수 있다. 만들려는 프로덕트나 서비스 등의 방향성에 따라 VWorld에서 제공하는 오픈 API를 다양하게 이용 가능하다.
이 중 우리가 가장 흔하게 활용하는 지도검색의 API를 다뤄보자.
지도검색 API
지도검색API는 검색엔진을 이용한 주소 및 명칭(장소) 검색 API이다. VWorld에서 제공하는 POI, 지적도의 지번주소, 도로명 주소 건물 정보 등을 오픈 포맷인 JSON/XML 형태의 API를 제공한다. RESTful API 활용 방식으로 사용자의 접근성이 향상된다.
http://api.vworld.kr/req/search?key=인증키&[검색API 요청파라미터]
http://api.vworld.kr/req/search?service=search&request=search&version=2.0&crs=EPSG:900913&bbox=14140071.146077,4494339.6527027,14160071.146077,4496339.6527027&size=10&page=1&query=판교로&type=road&format=json&errorformat=json&key=[KEY]
지도검색 API를 삽입하기 위해서는 URL에 검색API 요청파라미터를 삽입하면 된다. 위 예제에서 쓰인 파라미터를 기반으로 전반적인 지도검색 API를 파악할 수 있다.
*O/1의 앞에 O는 Option(선택-입력을 안 해도 되는 파라미터, 입력을 안 하면 기본값 설정) / 뒤에 1은 값을 한 개만 입력 가능
O/n은 Option이고, 값을 여러 개 입력 가능
M/1은 Mandatory(필수입력), 값은 1개만 입력 가능
출처 및 자료
REST API가 뭔가요? (https://www.youtube.com/watch?v=iOueE9AXDQQ)
그랩의 IT 뉴스레터 (https://maily.so/grabnews/posts/b2341a)
REST란? REST API와 RESTful API의 차이점 (https://dev-coco.tistory.com/97)
누구나 쉽게 사용할 수 있는 공공데이터 모음 (https://yeti.tistory.com/55)
공간정보오픈플랫폼 (https://www.vworld.kr/v4po_main.do)
검색 API 2.0 레퍼런스 (https://www.vworld.kr/dev/v4dv_search2_s001.do)