너무 비싸다.
Google Map Api, Place Api의 Terms of Service
를 살펴보면, 매우 많은 제약이 걸려있는 것을 볼 수 있다. 이 중 내가 사용하려고 했던 Place API 만 하더라도, Place Id
와 위도 경도
만 30일 이내로, 네트워크 성능을 위하여 캐싱이 가능하다고 되어 있다.
즉 이름이라던지, 위치의 카테고리라던지 아무것도 저장하지 못한다. 이게 사실상 말이 안되는게, 그러면, 매번 사용자에게 보여줄 때마다(서버 측 입장)API 호출을 날리라는 말인가? 이런 관점에서 가격표를 보면, 너무 비싸다.
더군다나, 다른 소프트웨어와의 통합을 제한한다던가 너무 엄격한 제한사항 때문에 사용하기가 어렵다.
물론 뭐 포트폴리오 짠 하고 말거면 상관 없지만, 이걸로 서비스를 한다고 생각하면,,,
자세한 사항은 공식 Term을 참고하길 바란다.
Terms of Service
Specific Service
어쨋거나, 나는 이것은 프로젝트에 사용불가능하다고 판단했고, 다른 대안을 찾아나섰고, 그 결과를 정리한다.
말 그대로, 오픈소스로 전세계 사람들이 자발적으로 기여하고, 공개된 지리 데이터이다. 실제로 매주 업데이트가 되고 있으며, 다운로드도 받을 수 있다.
포켓몬 고나, 페이스북 인스타그램에 사용되기도 한다고 한다. 상당히 매력적이었다. 물론, 자원 봉사자들에 의한 것이기 때문에, Google Map 과 같은 신뢰는 없지만, 상당히 정확한 데이터가 많았고, 취지 자체도 매우 마음에 들어서, 나도 추후 애플리케이션을 개발할 때는 적극적으로 활용하고, 부정확한 정보는 함께 기여하는 형태로 가야겠다고 생각이 들었다.
공식 사이트 : https://www.openstreetmap.org/
한국 커뮤니티 : https://osm.kr/
이 OSM(OpenStreetMap)을 복합적으로 쿼리할 수 있게 해주는 API이다. 여러 공개 서버가 있으며, 원한다면 자신이 직접 서버를 띄울 수도 있다.
자체적인 쿼리 랭귀지를 가지고 있으며, Rest api를 통해 사용한다. AGPL3.0 라이센스를 가지고 있다(이건 조금,,)
https://github.com/drolbr/Overpass-API
이것은 Java 기반의 오픈소스 프로젝트로, 주소 검색, 주소 <->좌표간 변환 같은 API를 제공한다. 이 또한 코드가 공개되어 있으며, 자체 서버를 띄울 수도 있다. 내부적으로 elastic search에 지리 인덱스를 밀어 넣는 식으로 동작하는 하는 듯하다.
공개 API도 있다.
오타에 대응되며, 한국어도 비교적 잘 검색된다.
https://github.com/komoot/photon
이 또한 Java 기반의 오픈소스 프로젝트다(내가 Java 개발자라 Java 프로젝트만 가져오는데 C++도 많다.)
이는 경로 찾기, 경로 검색과 같은 길찾기 API를 제공한다. 물론 길은 OSM 기반으로 해준다.
이 또한 소스코드도 공개되어 있고, 자체 서버도 띄울 수 있다.
https://github.com/graphhopper/graphhopper
Java 기반 오픈소스 프로젝트이다. 주로 TSP나 자동차 경로 알고리즘, 배달 및 수거에 대한 알고리즘을 제공한다. (얼마 전에 직접 구현했었는데...)
사용법이 매우 직관적이고 쉬워서 프로젝트에 여기저기 적용해볼만 한것 같다.
https://github.com/graphhopper/jsprit
왠 회사 홍보냐 하겠지만, 이 서비스는 위에서 언급한 Graphhopper나 Jsprit을 기반으로 유료 API를 제공한다. 최적경로나, 여러가지 API를 제공하고, 사이트에 들어가면, 각각을 테스트해볼 수 있는 페이지도 제공한다.
중요한거는 싸다. 매우 싸다(구글에 비하면)
사실 위의 서버를 직접 띄워도 무방하나, 지도 데이터를 업데이트하거나 서버를 운영해야하는 부담이 된다면, 이 서비스 API를 활용해서 OSM을 활용해도 괜찮을 것 같다.
근데, 경로 결과는 임시캐싱만 허용한다고 되어 있다. 정책을 한번 읽어보자
뭐 일단 이런거로 사용하다가 여차하면, 자체 지도 서비스를 띄우는 것도 나쁘지 않아보인다.
https://www.graphhopper.com/
나의 경우 현재, 여행 관련 서비스 서버를 만들고 있는데, 추천 서비스를 도입하려고 하고 있다. Google같은 API의 경우 각 property에 대한 제약이 워낙 심해서, 나의 추천 속성으로 사용하기가 애매했는데, 위와같은 많은 Opersource 들이 있어서 조금이나마 길이 보이는것 같다.