[코드스테이츠 PMB 11기] 오픈 API
카카오 맵은 다들 아시는 그 지도 앱이 맞다. 근데 갑자기 카카오 맵으로 웬 비? 싶으실 것 같다. SNS에서 유행했었던 방법인데 지도 앱에서 내가 날씨를 알고 싶은 지역의 CCTV 영상을 보면 현재 그 지역에 비가 오는지 햇빛이 쨍쨍한지 알 수 있다.
구체적인 기온, 습도와 같은 정보는 알 수 없지만 당장 비가 오는지 안 오는지를 직관적으로 알 수 있는 방법이라서 나도 어딘가 이동을 할 때 유용하게 사용하곤 했다. 그렇다면 카카오 맵은 어떻게 CCTV 영상을 보여줄까? 카카오가 전국 곳곳에 CCTV를 설치할 수도 있겠지만 그렇게 하면 설치하는데 비용과 시간이 많이 들고, 일일이 관리하기도 어려울 것이다. 그래서 카카오 맵은 국토교통부에서 제공하는 CCTV 화상자료 API를 이용하여 CCTV 자료를 제공하고 있다.
여러 PM 관련된 아티클들을 보다 보면 개발 관련 언어들을 심심치 않게 볼 수 있다. 그중 진짜 마음에 걸렸던 단어가 있었는데 바로 API이다. 왜 마음에 걸렸나?라고 생각해보면 서버나 네트워크 이런 단어들은 그래도 실생활에서 접하는 단어인 것에 반해 API는 너무 ☆개발★자의 영역 같았달까... 문과생들은 어떤 느낌인지 공감할 것이라 믿는다...
물론 플래터님은 적어도 이런 뜻은 아닐 것이라고 말씀하셨지만, 저 삼행시만큼 나의 상황을 적절하게 표현할 수 없었다... 으앙 일단 뿌셔보자 API!!!
API는 Application Programming Interface의 줄임말로 그대로 해석하자면 앱을 프로그래밍하는데 필요한 인터페이스이다. 여기서 인터페이스는 상호 정보 소통을 돕기 위해 경계에 존재하는 시스템을 의미한다. 무슨 소리인지 모르겠다구요?(저도요..) 이해를 위해 예시를 더 찾아보았다.
어떤 사람이 레스토랑에 갔다고 가정해보자. 점원이 가져다준 메뉴판을 보면서 스테이크를 고르면, 점원이 주문을 받아 요리사에 요청을 할 것이다. 그러면 요리사는 스테이크를 만들어 점원에게 주고, 손님 점원이 가져다준 음식을 먹을 수 있게 된다. 여기서 점원의 역할을 한 번 살펴보면 점원은 손님에게 메뉴를 알려주고, 주방에 주문받은 요리를 요청한다. 그다음 주방에서 완성된 요리를 손님께 다시 전달하기까지 이렇게 API는 점원과 같은 역할을 한다.
API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다.
쉽게 말해, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있다.
API도 쉽지 않은데... REST API란 무엇일까? Representational State Transfer의 약어로, HTTP 요청을 보낼 때 어떤 URI에 어떤 메소드를 사용할지 정한 규칙이다. API를 아무리 잘 설계한다고 하더라도 각자 필요한 방식에 맞게 다양하게 설계하면 유지 보수하는데 어려움이 있을 수 있다. 이런 문제를 해결하기 위해 일정한 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 만들어 사용하기로 하였는데 그중 대표적인 방식이 RESTful API이다.
오픈 API는 말 그대로 오픈된 API로 누구나 사용할 수 있도록 공유하는 API이다. 오픈 API를 사용하게 되면 직접 개발하느라 시간과 비용을 들이지 않고 그 기능을 사용할 수 있다. 그렇다면 API를 오픈하는 이유는 무엇일까? 잘 만들어진 API를 공유하고 그 기능을 사람들이 많이 사용할수록 서비스의 저변이 넓어지기 때문이다. 그래서 대기업들은 시장 확대를 목적으로, 비영리기관에서는 공공의 목적으로 오픈 API를 제공한다.
조코딩에서 가져온 API가이드를 적용해보면, 카카오 맵은 국토교통부에 요청을 하고, 국토교통부는 카카오 맵에 응답하는 방식으로 데이터를 주고받을 것이다. 이것을 기반으로 요청/응답으로 나누어 살펴보겠다
cctv 영상, 실시간 영상, 영상, 정지 영상에 따라 각각 어떤 식으로 주소가 구성되는지를 샘플 url을 통해 보여주고 있다.
이 API의 요청 변수들을 살펴보자. 요청 변수는 카카오 맵이 국토교통부의 오픈 API를 호출할 때 함께 서버로 전송해야 하는 값이다. 요청 변수의 이름이 틀리거나 필수 요청 변수가 누락되면 원하는 정보가 오지 않을 수 있다.
요청한 데이터에 대한 출력 결과 필드에서는 어떻게 표기되는지를 알려주고 있다.
앞에서 요청 변수에 getType을 보면 출력 결과 형식이 xml, json이라고 나와있다. 여기서 어떻게 요청하느냐에 따라 각각 다른 형태로 응답이 오는 것... 일 것이다.(잘 모르겠다)
XML과 JSON은 데이터를 주고받을 때 사용하는 일정한 형식이다. XML은 HTML과 호환성이 높지만 용량이 너무 무겁다는 단점을 가지고 있어 최근에는 JSON을 많이 사용하고 있다.
국가교통정보센터에서는 응답에 대한 샘플 XML을 제공하고 있었다. 자세히 보면 위에서 본 출력 결과 필드의 변수들로 구성되어있다는 것을 확인할 수 있다.
이렇게 API를 활용해서 카카오 맵에서 바로 국토교통부가 제공하는 CCTV 영상을 확인할 수 있을 것이다!!!
다른 과제하신 분들을 보니까 api 내부를 정말 뜯어서 막아아ㅓ막ㅁㄱ분석하셨던데 난 진짜 봐도 봐도 모르겠다... aㅏ... api의 역할 자체는 알겠는데 그 이상은ㅠㅠ다들 정말 똑똑하신 분들이 많은 것 같다... 아임... 개발 무지렁이... 자존감 바닥... 아냐 쫄지 말고 공부하자... 할 수 있다 진짜 할 수 있을 것이다...울고싶다...ㅋㅋ큐ㅠㅠ
참고자료