kakao.maps.event.addListener(map, 'center_changed', function () {
console.log('mapEvent');
let latLngparams = getInfo();
getGuideCards(latLngparams).then((data) => {
dispatch(guideCardInfo(data));
createMarker(data);
});
});
'center_changed' 이벤트를 사용하여 지도가 확대, 축소, 이동되었을 때 좌표를 얻고 좌표에 있는 가이드 카드를 얻기 위해 GET /map 서버 요청을 구현하였다.
하지만 위에서 보이는 것처럼 지도 위에서의 모든 움직임에 서버요청이 보내지게 되어 서버 부담이 우려되었다.
그래서 모든 움직임에 적용되는 이벤트가 이동, 확대, 축소 움직임이 멈추었을 때, 마지막 값만으로 좌표를 얻고, GET 요청을 보내도록 구현하였다.
처음에는 setTimeout과 같은 비동기 작업을 해주어야 겠다고 생각했지만, 카카오 api를 확인한 결과 내가 원하는 기능을 제공하는 함수를 발견하게 되었고, 이를 적용하였다.
//* 지도 이동 이벤트 발생
kakao.maps.event.addListener(map, 'dragend', function () {
let latLngparams = getInfo();
getGuideCards(latLngparams).then((data) => {
dispatch(guideCardInfo(data))
createMarker(data);
});
});
//* 지도 확대, 축소,이벤트 발생
kakao.maps.event.addListener(map, 'zoom_changed', function () {
let latLngparams = getInfo();
getGuideCards(latLngparams).then((data) => {
dispatch(guideCardInfo(data))
createMarker(data);
});
});
Datatype.Double
Datatype.Float
처음 지도페이지로 들어왔을 때 모든 가이드 카드를 보여주자는 것으로 의견이 모아졌고, 이를 구현하려고 했다.
하지만, 구현하다보니 모든 카드를 보여줄 필요가 있는가?라는 생각을 하게 되었다.
만약 수백개의 가이드 카드가 전국에 분포되어 있다면, 첫 로딩이 느려질 것이다. 모든 가이드 카드를 유저가 사용한다면 감안할 수 있지만, 유저가 자신이 원하는 지역의 가이드 카드만 원한다면 불필요한 서버 낭비로 이어지게 되는 것이다.
또한 여행자 특성상, 여행 지역이 뚜렷하게 정해져있기 때문에, 모든 카드를 불러올 필요는 더더욱 없을 것이라는 생각이 들었다.
첫 렌더링에는 서울 지역을 중심으로 카카오 지도 좌표 안에 들어오는 가이드카드만 요청한다.