FE/React

[FE / REACT] React에서 Kakao Map API 연동하기

따봉치치 2023. 12. 7. 18:02

안녕하세요 

오늘은 React + TypeScript 환경에서 Kakao Map API 연동하는 방법에 대해서 설명해드리겠습니다.

 

1. Kakao Map API Key 발급하기

아래 사이트에서 애플리케이션 추가하기 버튼을 클릭해 추가한 뒤 API key를 발급받습니다

https://apis.map.kakao.com/web/

 

 

그럼 다음과 같이 발급받은 앱 키 중에 Javascript 키를 선택합니다.

 

2. .env 파일에 키 추가하기

REACT_APP_KAKAO_API_KEY = 발급받은 키

이런식으로 .env 파일에 발급받은 키를 넣어줍니다.

 

3. 지도를 담을 파일 생성하기

저는 KakaoMap.tsx 파일을 추가해주었습니다.

import React, { useEffect } from 'react'
import image from '../../assets/images/marker-removebg-preview.png'

declare global {
  interface Window {
    kakao: any;
  }
}

interface KakakMapProps {
  latitude : number | undefined;
  longitude : number | undefined;
}

export default function KakaoMap({latitude, longitude} : KakakMapProps) {

  useEffect(() => {
    const script = document.createElement('script');
    script.src = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${process.env.REACT_APP_KAKAO_API_KEY}&autoload=false`;
    document.head.appendChild(script);

    script.onload = () => {
      window.kakao.maps.load(() => {
        const container = document.getElementById('map');
        const options = {
          center : new window.kakao.maps.LatLng(latitude,longitude),
          level : 3
        };
        const map = new window.kakao.maps.Map(container, options);

        const imageSize = new window.kakao.maps.Size(40,44);
        const imageOption = { offset: new window.kakao.maps.Point(18, 44) };

        const markerImage = new window.kakao.maps.MarkerImage(image, imageSize, imageOption);
        const markerPosition = new window.kakao.maps.LatLng(latitude,longitude);

        const marker = new window.kakao.maps.Marker({
          position : markerPosition,
          image : markerImage,
        });

        marker.setMap(map);
      })
    }
    return () => {
      document.head.removeChild(script);
    } 
  },[]);

  return (
    <div id='map' className='w-full h-[364px]'></div>
  )
}

 

다음처럼 코드를 작성해주면 됩니다!

코드를 동작해보면 지도를 잘 받아와지는 것을 볼 수 있습니다

참고로 저는 marker를 새롭게 커스텀해주었기 때문에 해당 코드도 추가 되어있습니다.!

 

 

이상입니다 :)