๐Ÿ—บ ์นด์นด์˜ค๋งต api ์‚ฌ์šฉ๋ฒ• ( 1 )

jaehanยท2022๋…„ 9์›” 26์ผ
3

React

๋ชฉ๋ก ๋ณด๊ธฐ
17/33
post-thumbnail

ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์นด์นด์˜ค๋งต api๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋˜์„œ ์—ฐ์Šตํ•  ๊ฒธ ์ •๋ฆฌํ•ด ๋ณด๋ คํ•œ๋‹ค.

๐Ÿ—บ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

์•ฑํ‚ค ๋ฐ›๊ธฐ

์นด์นด์˜ค developers ์‚ฌ์ดํŠธ

1. ์šฐ์„  ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ด์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.
2. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋“ค์–ด๊ฐ€์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถ”๊ฐ€ํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅธ๋‹ค.
3. ํ”Œ๋žซํผ ์„ค์ •ํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๊ณ  (๋‚˜๋Š” ์›น์—์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— web ํ”Œ๋žซํผ ๋“ฑ๋ก์„ ์„ ํƒํ–ˆ๋‹ค) ๋„๋ฉ”์ธ ์„ค์ •์„ํ•ด์ค€๋‹ค.
๐Ÿ“Œ react๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์›น์„ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— http: // localhost:3000๋„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ์•ฑํ‚ค๋ฅผ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

react์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

๊ธฐ๋ณธ ์„ค์ •

์šฐ์„  react typescript ํ”„๋กœ์ ํ‹€๋ฅด ์ƒ์„ฑํ•ด ์ค€๋‹ค.

npx craete-react-app kakao-map --template typescript

ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์•ฑํ‚ค ์ค‘์— javascript ํ‚ค ๋ฅผ ๋ณต์‚ฌํ•ด์„œ

public ํด๋”์˜ index.html ํŒŒ์ผ์˜ < body > ํƒœ๊ทธ ๊ฐ€์žฅ ์•„๋ž˜์— ๋ถ™ํ˜€๋„ฃ๊ธฐ ํ•ด์ค€๋‹ค.

public / index.html

<body>
    <script
      type="text/javascript"
      src="//dapi.kakao.com/v2/maps/sdk.js?appkey=[์นด์นด์˜ค ์•ฑํ‚ค]"
    ></script>
  </body>

๐Ÿ“Œ ์•ฑํ‚ค๋Š” ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด ๊ฐ€์ ธ๊ฐ€์„œ ์•…์šฉํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— .envํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ œ์ผ ๋ฐ– ํด๋”์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์นด์นด์˜ค ์•ฑํ‚ค๋ฅผ ์„ค์ •ํ•ด ์ค€๋‹ค ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ฆฌ์•กํŠธ๋Š” REACT_APP์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์ง€์–ด์•ผ ํ•œ๋‹ค.

.env

REACT_APP_KAKAO_MAP_KEY=[์นด์นด์˜ค ์•ฑํ‚ค]

๐Ÿ‘‡ .env๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ”๋€ ์ฝ”๋“œ

<body>
    <script
      type="text/javascript"
      src="//dapi.kakao.com/v2/maps/sdk.js?appkey=%REACT_APP_KAKAO_MAP_KEY%"
    ></script>
  </body>

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚œ typescript๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์ง€์ •์„ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด

# npm
$ npm install kakao.maps.d.ts --save-dev

์„ ๋ฐ›์•„์ฃผ๊ณ 

tsconfig.json์˜ compilerOptions์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

  "types": [
      ...,
      "kakao.maps.d.ts"
    ]

์ด๊ฑธ๋กœ ๊ธฐ๋ณธ์„ค์ •์€ ๋๋‚ฌ๊ณ  ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณด๊ฒŸ๋‹ค.

1. html ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

src/kakao-map.tsx

import { useEffect } from "react";

export const KakaoMap = () => {
  useEffect(() => {
    let container = document.getElementById("map");
    let options = {
      center: new window.kakao.maps.LatLng(
        37.558090961074825,
        126.99847210567884
      ),
      level: 3,
    };

    let map = new window.kakao.maps.Map(container, options);
  }, []);
  return <div id="map" style={{ width: "500px", height: "500px" }} />;
};

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์„ค๋ช…ํ•˜์ž๋ฉด ์šฐ์„  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค€๋’ค์— map์ด๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ < div > ๋ฅผ ์ƒ์„ฑํ•ด ์ค€๋‹ค.

๐Ÿ“Œ width์™€ height๋ฅผ ์„ค์ •ํ•ด ์ค˜์•ผ ํ™”๋ฉด์— ๋‚˜์˜จ๋‹ค

useEffect๋‚ด๋ถ€์—์„œ divํƒœ๊ทธ์— ์นด์นด์˜ค ๋งต api๋ฅผ ์‚ฝ์ž…ํ•ด ์ค€๋‹ค.

๋‘๊ฐœ์˜ ์ˆซ์ž๋Š” ์ฒ˜์Œ ์ง€๋„์˜ ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์œ„๋„์™€ ๊ฒฝ๋„์ด๊ณ  level์€ ํ™•๋Œ€ ์ •๋„์ด๋‹ค.

๐Ÿ“Œ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜ฌํ…๋ฐ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๋‚˜ App.tsx์— kakao map์„ ์„ ์–ธ ํ•ด ์ฃผ์–ด์•ผํ•œ๋‹ค.

App.tsx

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

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋กœ ์›ํ•˜๋Š” ๊ณณ์—์„œ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. react-kakao-maps-sdk ์‚ฌ์šฉ

react-kakao-maps-sdk๋ผ๋Š” ์ข€๋” ํŽธํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด์„œ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค.

๊ณต์‹ ๋ฌธ์„œ

Install

npm install react-kakao-maps-sdk

์•„๊นŒ์ฒ˜๋Ÿผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๋ฐ < Map > ๋งŒ ๋ถˆ๋Ÿฌ์™€ ์ฃผ๋ฉด ๋œ๋‹ค.

src/kakao-map.tsx

import { Map } from "react-kakao-maps-sdk";

export const KakaoMap = () => {
  return (
    <Map
      center={{ lat: 37.558090961074825, lng: 126.99847210567884 }}
      style={{ width: "500px", height: "500px" }}
    >
    </Map>
  );
};

๋”ฑ๋ด๋„ ์•„๊นŒ ์ฝ”๋“œ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ณ  ํŽธํ•œ๊ฑฐ ๊ฐ™๋‹ค. ๋‚ด๋ถ€ ์˜ต์…˜์€ ์•„๊นŒ์™€ ๋˜‘๊ฐ™๊ณ  < MapMarker > ๊ฐ™์€ ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ๋งˆ์ปค๋ฅผ ์ฐ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

import { Map, MapMarker } from "react-kakao-maps-sdk";

export const SdkMap = () => {
  return (
    <Map
      center={{ lat: 37.558090961074825, lng: 126.99847210567884 }}
      style={{ width: "500px", height: "500px" }}
    >
      <MapMarker
        position={{ lat: 37.558090961074825, lng: 126.99847210567884 }}
      >
        <div style={{ color: "#000" }}>Hello World!</div>
      </MapMarker>
    </Map>
  );
};

๐Ÿ‘‡ ๊ฒฐ๊ณผ

์ข€๋” ๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋“ค์€ ๊ณต์‹ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉฐ ์—ฐ์Šตํ•ด๋ณด๊ณ  ๋” ์ •๋ฆฌ ํ•ด๋ณด๋ คํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€