[제1장 소프트웨어 개발] 우버, 옐프, 포켓몬고의 기술적 공통점은?
구글지도와 같은 서비스를 직접 만들려면 어떻게 해야 할까? 지구상에 있는 도로, 건물, 도시, 해안선을 모조리 촬영하고 측량하기 위해 수많은 인력과 차량을 파견해야 할 것이다. 실제로 구글은 그렇게 하고 있다. 어디 그뿐인가? 회전, 확대, 축소, 길찾기 기능도 개발해야 한다. 한마디로 굉장히 어려운 일이다. 천하의 애플도 애플지도가 구글지도보다 급이 떨어진다고 욕을 먹을 정도다.
우버(Uber), 포켓몬고(Pokemon Go), 옐프(Yelp)는 각각 차를 탈 수 있는 곳, 포켓몬을 찾을 수 있는 곳, 근처 식당의 위치를 알려주기 위해 지도를 표시해야 한다. 그렇다고 천문학적인 돈과 시간을 들여서 자체 지도를 만들려고 하면 아마 본전도 못 건질 것이다.
그러면 어떻게 해야 할까? 사용해본 사람이라면 이미 해법을 알고 있을 것이다. 앱에 구글지도를 탑재하는 것이다. 맛집을 찾을 때? 옐프는 구글지도에서 현재 위치를 중앙에 두고 근처 식당을 핀으로 표시한다. 차를 타고 시내로 나가고 싶을 때? 우버는 구글지도로 목적지까지 경로를 표시하고 예상 소요 시간을 보여준다.
이게 가능한 이유는 구글이 타사 앱에서 구글지도를 표시할 수 있는 짤막한 코드를 제공하기 때문이다. 그 뿐만 아니라 지도에 아이콘을 표시하고, 목적지까지 가는 길을 계산하고, 과속 단속 구간을 찾는 코드까지 준비되어 있다. 비용도 저렴하거나 무료다. 짧은 코드만 넣으면구글 수년간 갈고닦은 기술을 가져다 쓸 수 있다니 개발자들에게는 횡재나 다름없다. 이미 존재하는 기술을 새로 만들다고 고생할 필요가 없는 것이다. 이렇게 다른 앱의 기능이나 데이터를 가져다 쓸 수 있게 해주는 코드를 응용프로그램 프로그래밍 인터페이스, 줄여서 API라고 부른다. API는 쉽게 말해 앱들 사이의 통신수단이다. 그 종류는 크게 세가지로 나뉜다.
<< API의 세 가지 유형 >>
첫번째 유형은 '기능 API'다. 기능 API는 경로 계산, 문자메시지 전송, 문장 번역 같은 작업을 전문적인 앱에 맡길 수 있게 한다. 집에 문제가 생겼을 때 직접 수리하지 않고 배관공이나 목수를 부르는 것과 같다. 기능 API는 다양하게 존재한다. 메일이나 문자메시지를 전송하는 코드를 직접 작성하자면 꽤 번거롭다. 그래서 송급 앱인 벤모(Venmo)는 송금 완료 메시지를 보낼 때 그 방면에 전문화된 API를 이용한다. 신용카드 결제를 처리하는 것 역시 쉽지 않은 작업이다. 그래서 우버는 브레인트리 API에 결재를 맡긴다. 브레인트리는 누구나 코드 몇 줄만 입력하면 페이팔의 신용카드 결제 알고리즘을 쓸 수 있게 해주는 API다.
두번째 유형은 '데이터 API'로, 다른 앱으로부터 스포츠 경기 점수, 최신 트윗, 오늘의 날씨 등 흥미로운 정보를 넘겨받을 수 있게 한다. 호텔 프런트에 전화해서 근처의 괜찮은 박물관과 식당을 추천받는 것과 같다. 스포츠 전문 방송국 채널 ESPN은 주요 리그에 속한 모든 팀의 선수 명단과 경기 점수를 전달하는 API를 제공한다. 뉴욕 지하철에서 제공하는 API를 이용하면 열차의 위치와 다음 열차의 도착 예정 시간을 알수 있다. 고양이 사진을 무작위로 전송하는 API도 있다.
세번째 유형은 '하드웨어 API'로, 기기의 고유한 기능을 이용 할 수 있게 한다. 인스타그램은 휴대폰의 카메라 API를 통해 줌, 초점, 촬영 기능을 빌려 쓴다. 구글지도는 휴대폰의 지리위치 API로 사용자의 현위치를 파악한다. 운동 앱은 휴대폰에 탑재된 가속도계와 자이로스코프라는 센서를 통해 사용자가 어느 방향으로 얼마나 빨리 움직이고 있는지 감지한다.
물론 API가 장점만 있는 것이 아니다. API를 활용하면 앱 개발이 한층 수월해지지만 앱이 API에 종속된다. 예를 들어 메일 전송 API가 다운되면 그 API를 쓰는 모든 앱이 메일을 전송할 수 없게 된다. 그리고 어디까지나 가정일 뿐이지만 혹시 구글이 승차공유 서비스를 출시한다면 경쟁사인 우버가 구글지도 API를 못 쓰게 막아버릴 수도 있다. 만일 우버에도 자체 지도 서비스가 있다면 그럴 때 구글에 휘둘리지 않을 것이다.
이렇게 사업에 타격을 입을 가능성이 있긴 해도 타사의 전문화된 API를 쓰면 필요한 기능을 직접 개발할 때보다 더 쉽고 안정적으로 서비스를 구현할 수 있고 보통은 비용도 더 적게 든다.
그러면 다시 처음으로 질문으로 돌아가보자. 우버, 옐프, 포켓몬고의 기술적 공통점은 무엇일까? 그 답은 이미 존재하는 기술을 새로 만들지 않고 API, 구체적으로 말하자면 구글지도 API를 사용한다는 점이다. 사실상 세상의 모든 앱이 API를 빼면 무용지물이라고 해도 과언이 아니다.