ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์นด์นด์ค๋งต api๋ฅผ ์ฌ์ฉํด์ผ ๋์ ์ฐ์ตํ ๊ฒธ ์ ๋ฆฌํด ๋ณด๋ คํ๋ค.
์นด์นด์ค developers ์ฌ์ดํธ
1. ์ฐ์ ์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ์ ์ ์ํด์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ํ๋ค.
2. ๋ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ด๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ถ๊ฐํ๊ธฐ๋ฅผ ๋๋ฅธ๋ค.
3. ํ๋ซํผ ์ค์ ํ๊ธฐ๋ฅผ ๋๋ฅด๊ณ (๋๋ ์น์์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ web ํ๋ซํผ ๋ฑ๋ก์ ์ ํํ๋ค) ๋๋ฉ์ธ ์ค์ ์ํด์ค๋ค.
๐ react๋ฅผ ์ฌ์ฉํด์ ์น์ ๊ตฌํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ http: // localhost:3000๋ ์ถ๊ฐํด์ฃผ์๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ ์ฑํค๋ฅผ ๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฐ์ 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"
]
์ด๊ฑธ๋ก ๊ธฐ๋ณธ์ค์ ์ ๋๋ฌ๊ณ ๋๊ฐ์ง ๋ฐฉ์์ ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํด ๋ณด๊ฒ๋ค.
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;
}
}
์ด๋ ๊ฒ ๋ง๋ ์ปดํฌ๋ํธ๋ก ์ํ๋ ๊ณณ์์ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ฉด ์๋์ฒ๋ผ ์ ๋์ค๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
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>
);
};
๐ ๊ฒฐ๊ณผ
์ข๋ ๋ค์ํ ์์ ๋ค์ ๊ณต์ํํ์ด์ง๋ฅผ ๋ณด๋ฉฐ ์ฐ์ตํด๋ณด๊ณ ๋ ์ ๋ฆฌ ํด๋ณด๋ คํ๋ค.