먼저 여기에에서는 구글맵을 이용하기위한 가장 기본적인 단계인 구글맵 API 키 발급하는 방법에 대해서 살펴봅니다.
1. 구글맵(Google 지도) 서비스 정책의 변화
이전에는 구글맵은 유료와 무료로 나누어졌었으며, 무료로도 어느 정도 서비스를 구축할 수 있을 정도의 지도 관련 데이타를 제공했었습니다.
그러나 2018년 6월 11일자로 구글은 기존 유료와 무료 서비스로 나누어졌던 서비스를 전부 유료 서비스로 단일화하고 서비스도 세가지로 단순화했습니다.
브랜드를 Google 지도 플랫폼(Google Maps Platform)으로 통일
제공 서비스를 지도(Map), 경로(Route) 그리고 지역 정보(Places)의 세가지 핵심 서비스 중심으로 통일
사용자를 구글맵 플랫폼에 결제 계정을 등록하거나 ‘구글 클라우드 플랫폼’ 결제 계정이 있는 사용자만 사용할 수 있음 따라서 구글 계정을 만들려면 신용카드가 있어야 함. 하지만 신용카드 정보를 제공했다고 자동으로 결제되지는 않고 유료 서비스 이용에 동의해야 함 신용카드 정보 제공 요구는 계정 자동 등록을 막기 위한 장치에 더 가까움
기본적으로 유료이지만 무료로 Google 지도 플랫폼을 사용할 수 있도록 월 $200 크레딧을 제공 단 예전에 비해 무료 사용 범위가 크게 줄어 듬. 예전엔 하루 10만쿼리 에 해당하는 웹서비스 및 2만 5000건의 지도 로드 서비스를 무료로 제공했지만 지금은 월 28,500건 정도로 축소됨(이는 일 900여회)
만약 구글맵 일간 페이지뷰가 약 900회(위에서 이야기한 월 28,500회)를 초과하면 지도 표시가 중단되기 때문에 비용을 내야 함
참고로 구글맵 가격표에서 확인할 수 있듯이, 단순한 구글맵 Embed는 비용을 받지 않으며 서비스가 고도화 될수록 비용이 올라감 . Embed Advanced/Dynamic Street View는 무료 사용을 월 14,000건으로 제한하며 100,000건까지는 월 $14를 받음 . Dynamic Maps은 무료 사용량을 28,000건으로 제한하며, 100,000건까지 $7을 청구 등등
참고로 우리나라에서 구글 지도 데이타는 SK텔레콤으로부터 제공받아 보여주고 있음 가끔 구글맵 업데이트가 느린 것은 한국 정부가 정밀 지도를 구글에 제공하지 않았기 때문이 아니라 구글과 SK텔레콤간의 문제라고 함
2. 구글 맵 서비스 이용을 위한 API 발급 방법
사이트에 구글맵을 삽입하려면 구글맵 API키를 발급 받아야 합니다. 앞서 이야기 한대로 여기서는 이 구글맵 API 키 발급 과정에 대해서 알아봅니다.
2.1. 구글맵 플랫폼 사이트
구글맵 API 키 발급받기 위해서는 구글맵 플랫폼 사이트를 방문해야 합니다. 당연하지만요.
이는 Fortune에서 주관하는 Fortune Brainstorm Tech 2019에 출연한 AWAY 공동 창업자이자 최고 브랜드 책임자인 젠 루비오 (Jen Rubio)는 그들의 성공 요인중의 하나를 아마존에서 그들의 상품을 판매하지 않기로 결정했다는 점에서 찾고 있습니다.
어웨이는 당시 브랜드 강화에 도움이 될것이라고 여겨지던 아마존을 활용하지 않았습니다. 즉 아마존의 유통망을 이용하지 않고 독자적인 유통망을 개척하면서 경쟁자와 차별화되는 경제적 해자를 만들 수 있었다고 젠 루비오 (Jen Rubio)는 밝혔습니다.
경제적 해자 Economic Moat
브랜드 차별점 (differentiator)
“정말로 브랜드나 상품을 좋아하기 때문에 그리고 끌린다고 생각해요. 그것이 바로 차별점(differentiator)이라고 봐요. 그렇지 못한 것들은 그냥 아마존에서나 살만한 것이죠. 그러고 저는 그 중간 지대락는 없다고 생각해요. 그래서 저는 우리만의 무기를 고수하고, 아마존 플랫폼에 의지하지 않는 것이 중요하다고 생각해요.”
“I really do think that you will have brands that you go to because you love the brand or the product, and that’s a differentiator, and everything else is a commodity that you’ll buy on Amazon. And I really don’t think there will be a middle space. So I think really just sticking to our guns, and not going on the [Amazon] platform was important for us.”
아마존은 고객 데이타를 공유하지 않기 때문에 브랜드 구축이 어렵다.
젠 루비오 (Jen Rubio)는 아마존이 아마존에서 구입하는 고객에 대한 데이타를 업체와 공유하지 않는다는 사실은 누가 우리 브랜드 도는 상품을 구매하는지에 대한 통찰을 얻지 못하게 만든다고 이야기합니다.
그리고 어웨이(AWAY)와 같은 소비자와 직거래하는 브랜드에게 있어서 고객 데이타는 매우 중요하다고 강조합니다. “우리에게 있어서 가장 중요한 것은 고객 관계이고, 어웨이(AWAY)는 고객 관계를 만듬으로써 브랜드 빌딩이 가능했습니다.”
“고객 지표를 수집하고 분석할 수 있게되면 어웨이(AWAY)이와 같은 브랜드가 다음 단계 마케팅 목표를 잡는데 도움이 됩니다. 진정으로 이야기하건데 이러한 고객 관계는 페이스북에서 광고를 더욱 쉽게 만들 수 있었습니다.”
일정 조건이 될때까지 아마존을 이용하지 않을 것
어웨이(AWAY)는 브랜드 빌딩을 위해서 영원히 아마존을 활용하지 않을까?
젠 루비오 (Jen Rubio)는 그들 브랜드 관리를 위한 조건이 성숙할때까지는 아마존을 이용하지 않겠다고 합니다.
“아마존을 절대로 이용하지 않겠다고 이야기하는 것은 아니예요. 다만 현재처럼 아마존이 제공하는 조건으로는 아마존에 들어가지 않는다는 것은 분명히 약속드릴 수 있습니다. 지금 아마존은 분명 고객이 많응 대규모 플랫폼이지만 거기에 대규모 판매하는 매스 브랜드로는 진입하지 않을 것입니다.”
WPSolr은 강력한 검색 플랫폼인 Elasticsearch 나 Apache Solr를 이용해 검색 결과를 정교화할 수 있으며, 그 형태는 아마존이나 이베이와 같은 초대형 쇼핑몰과 비슷한 방식으로 검색을 할 수 있게 만들며, 더 나아가 대규모 데이타베이스하에서도 엄청나게 빠른 속도로 검색이 가능하다고 주장하고 있습니다.
1.1. 주요 특징
WPSolr는 대규모 사이트에서의 검색 솔류션을 지향합니다. 위에서 잠깐 언급했듯이 규모가 있는 워드프레스 사이트 또는 우커머스 사이트에서 몇백만개의 검색 결과를 순식간에 검색한다고 쥬장하죠.
사용자가 검색 때문에 스트레스를 받지 않토록 아마존이나 이베이와 같은 쉬우면서도 강력한 검색이 가능합니다.
굉장히 다양한 플러그인들고 호환, 작동합니다. 우커머스, Advanced custom fields, WPML 및 Polylang, TablePress, bbPress, PDF Embedder, Google doc Embedder 등
1.2. 가격
유감스럽게도 이 WPSolr 플러그인은 무료로 상요할 수는 없습니다. 물론 일정기간 테스트 사용 기간은 있지만 말입니다.
다들 뛰어난 검색 엔진이기는 하지만 대규모 사이트에 적합하는 WPSol는 아무래도 부담스럽고, Relevanssi는 위에서 언급한대로 동양 언어와 궁합이 좋지 않다고하므로 라이브 서치 SearchWP Live Ajax Search과 궁합을 고려해서 우선 SearchWP를 사용하면서 그 사용성을 검증해보려고 합니다..
<?php// if your form is generated using get_search_form() you do not need to do this// as SearchWP Live Search does it automatically out of the box?>
<form action="" method="get">
<p>
<label for="s"><?php _e( 'Search' , 'mytextdomain' ); ?></label>
<input type="text" name="s" id="s" value="" data-swplive="true" /> <!-- data-swplive="true" enables SearchWP Live Search -->
</p>
<p>
<button type="submit"><?php _e( 'Search' , 'mytextdomain' ); ?></button>
</p>
</form>Code language:PHP(php)
이를 간단하게 수정하는 방법은 functions.php 파일에 아래 명령을 추가하는 것입니다.
아래 코드에서 return 2가 몇번째 글자부터 검색 결과를 반영할 것이냐를 지정합니다. 2이니 두번째 글자가 입력되면 검색결과를 보여다오라고 지정하는 것입니다..
functionmy_searchwp_minimum_word_length(){
// index and search for words with at least two charactersreturn2;
}
add_filter( 'searchwp_minimum_word_length', 'my_searchwp_minimum_word_length' );Code language:PHP(php)
이 방법 외 아래서 소개하는 초기 세팅 명령에서 지정할 수도 있습니다.
5. 몇개의 검색 결과를 보여줄 것인지?
마찬가지로 몇개의 검색 결과를 보여줄 것인지를 지정할 수 있습니다. 기본적으로는 7개만 보여줍니다.
아래 코드 양식으로 functions.php 파일에 추가합니다. return 다음의 수치가 보옂고 싶은 줄 수 입니다. 아래는 20개를 보여주겠다고 지정했습니다.
검색 결과를 보여주는 창 크기 제어 방법 ‘width’ => ‘css’, 또는 ‘width’ => ‘auto’,
아래는 제가 적용한 코드입니다.
functionmy_searchwp_live_search_configs( $configs ){
// override some defaults
$configs['default'] = array(
'engine' => 'default', // search engine to use (if SearchWP is available)'input' => array(
'delay' => 200, // wait 500ms before triggering a search'min_chars' => 1, // wait for at least 3 characters before triggering a search
),
'results' => array(
'position' => 'bottom', // 검색창 아래(bottom) where to position the results (bottom|top)'width' => 'auto', // whether the width should automatically match the input (auto|css)'offset' => array(
'x' => 0, // x offset (in pixels)'y' => 5// y offset (in pixels)
),
),
'spinner' => array( // powered by http://fgnass.github.io/spin.js/'lines' => 10, // number of lines in the spinner'length' => 8, // length of each line'width' => 4, // line thickness'radius' => 8, // radius of inner circle'corners' => 1, // corner roundness (0..1)'rotate' => 0, // rotation offset'direction' => 1, // 1: clockwise, -1: counterclockwise'color' => '#000', // #rgb or #rrggbb or array of colors'speed' => 1, // rounds per second'trail' => 60, // afterglow percentage'shadow' => false, // whether to render a shadow'hwaccel' => false, // whether to use hardware acceleration'className' => 'spinner', // CSS class assigned to spinner'zIndex' => 2000000000, // z-index of spinner'top' => '50%', // top position (relative to parent)'left' => '50%', // left position (relative to parent)
),
);
// add an additional config called 'my_config'
$configs['my_config'] = array(
'engine' => 'supplemental', // search engine to use (if SearchWP is available)'input' => array(
'delay' => 200, // wait 500ms before triggering a search'min_chars' => 1, // wait for at least 3 characters before triggering a search
),
'results' => array(
'position' => 'top', // where to position the results (bottom|top)'width' => 'css', // whether the width should automatically match the input (auto|css)'offset' => array(
'x' => 0, // x offset (in pixels)'y' => 0// y offset (in pixels)
),
),
'spinner' => array( // powered by http://fgnass.github.io/spin.js/'lines' => 8, // number of lines in the spinner'length' => 6, // length of each line'width' => 5, // line thickness'radius' => 6, // radius of inner circle'corners' => 1, // corner roundness (0..1)'rotate' => 0, // rotation offset'direction' => 1, // 1: clockwise, -1: counterclockwise'color' => '#000', // #rgb or #rrggbb or array of colors'speed' => 1, // rounds per second'trail' => 60, // afterglow percentage'shadow' => false, // whether to render a shadow'hwaccel' => false, // whether to use hardware acceleration'className' => 'spinner', // CSS class assigned to spinner'zIndex' => 2000000000, // z-index of spinner'top' => '50%', // top position (relative to parent)'left' => '50%', // left position (relative to parent)
),
);
return $configs;
}
add_filter( 'searchwp_live_search_configs', 'my_searchwp_live_search_configs' );Code language:PHP(php)