포스트

NextJs에서 Kakao 지도구현

NextJs에서 Kakao 지도구현

Kakao 지도 API

카카오 개발자 문서에서 참조

일반적인 Kakao지도 구현

  • 웹상에서 NextJS에서 <Head> 태그를 생성하려면 아래와 같이 생성

    1
    2
    3
    4
    5
    6
    7
    
    import Head from "next/head";
    
    const myLink = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${process.env.NEXT_PUBLIC_KAKAO_API_KEY}`;
    
    <Head>
      <script type="text/javascript" src={myLink}></script>
    </Head>;
    
  • TypeScript에서 kakao에 대한 타입을 선언시켜줘야 되기 때문에 gloabaThis 타입과 kakao를 합쳐줌
    1
    2
    3
    
    declare const window: typeof globalThis & {
      kakao: any;
    };
    
  • useEffect를 통해 컴포넌트가 렌더링 되었을때 지도에 구현

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    useEffect(() => {
      const container = document.getElementById("map"); // 지도를 담을 영역의 DOM 레퍼런스
      const options = {
        // 지도를 생성할 때 필요한 기본 옵션
        center: new window.kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표.
        level: 3 // 지도의 레벨(확대, 축소 정도)
      };
    
      const map = new window.kakao.maps.Map(container, options); // 지도 생성 및 객체 리턴
      console.log(map);
    }, []);
    
  • 전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import Head from "next/head";
import { useEffect } from "react";

declare const window: typeof globalThis & {
  kakao: any;
};

export default function KakaoMapPage() {
  useEffect(() => {
    const container = document.getElementById("map"); // 지도를 담을 영역의 DOM 레퍼런스
    const options = {
      // 지도를 생성할 때 필요한 기본 옵션
      center: new window.kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표.
      level: 3, // 지도의 레벨(확대, 축소 정도)
    };

    const map = new window.kakao.maps.Map(container, options); // 지도 생성 및 객체 리턴
  }, []);

  const myLink = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${process.env.NEXT_PUBLIC_KAKAO_API_KEY}`;

  return (
    <>
      <Head>
        <script type="text/javascript" src={myLink}></script>
      </Head>
      <div id="map"></div>
    </>
  );
}

라우팅을 통한 Kakao 지도 구현

NextJS는 SPA 이기때무넹 페이지를 구현할때 사전에 다른 페이지까지 미리 데이터를 다 받아온다.

이를 통해 버튼 클릭으로 이동했을때 빠르게 화면이 전환되는 장점을 가지고 있다.

하지만 버튼 클릭하여 kakao지도가 구현된 페이지는 빠른 전환때문에 미처 kakao 지도 라이브러리를 다 받지 못하고 구현되기 때문에 오류가 발생한다.

다음과 같은 오류를 해결 하기위해서는 페이지가 구현되고 다운을 받아오게 변경하면 된다.

  • script의 태그를 직접 만들준다.
    1
    2
    3
    
    const script = document.createElement("script");
    script.src = `//dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=${process.env.NEXT_PUBLIC_KAKAO_API_KEY}`;
    document.head.appendChild(script);
    
  • script태그가 dom데이터가 로딩 되었을때 진행 카카오 지도를 구현해주면 된다.
    1
    
    script.onload = () => {};
    
  • 전체코드
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.