let's get IT with DAVINA ๐ป
KakaoMap Api ์ ์ฉ ๋ณธ๋ฌธ
์ฑํค ๋ฐ๊ธฐ
- ์ฐ์ ์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ์ ์ ์ํด์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ํ๋ค.
- ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ด๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐํ๊ธฐ๋ฅผ ๋๋ฅธ๋ค.
- ํ๋ซํผ ์ค์ ํ๊ธฐ๋ฅผ ๋๋ฅด๊ณ (๋๋ ์น์์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ web ํ๋ซํผ ๋ฑ๋ก์ ์ ํํ๋ค) ๋๋ฉ์ธ ์ค์ ์ํด์ค๋ค.
- react๋ฅผ ์ฌ์ฉํด์ ์น์ ๊ตฌํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ http: // localhost:3000๋ ์ถ๊ฐํด์ฃผ์๋ค.
HTML์ ์ ์ฉ
- pubilc/index.html
- head or body ์๋ฌด๋ฐ๋ ์๊ด X
- ๋๋ head์ ์ ์ฉํด์ฃผ์๋ค.
<head>
<script
type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=[๋ฐ๊ธ๋ฐ์ ํค]"
></script>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
//...์๋ต
</head>
- KakaoMap.js ํ์ผ ์์ฑ
import React, { useEffect } from "react";
import styled from "styled-components";
const MapContainer = styled.div`
width: 100%;
height: 400px;
`;
const { kakao } = window;
//๋ถ๋ฌ์ค๋ ๋ถ๋ชจํ์ด์ง์์ props๋ก location={pageDetail}์ ๋ฌ
export const KakaoMap = ({ location }) => {
useEffect(() => {
var container = document.getElementById("map"); //์ง๋๋ฅผ ๋ด์ ์์ญ์ DOM ๋ ํผ๋ฐ์ค
var options = {
center: new kakao.maps.LatLng(
location.location_x,
location.location_y
), //์ง๋์ ์ค์ฌ์ขํ
level: 3,
};
var map = new kakao.maps.Map(container, options); //์ง๋ ์์ฑ ๋ฐ ๊ฐ์ฒด ๋ฆฌํด
var markerPosition = new kakao.maps.LatLng(
location.location_x,
location.location_y
); //ํด๋น ์์น ๋ง์ปค ํ์
var marker = new kakao.maps.Marker({
position: markerPosition,
});
marker.setMap(map);
}, [location]);
return (
<div>
<MapContainer id="map"></MapContainer>
</div>
);
};
env
์ฑํค๋ ๋ค๋ฅธ์ฌ๋์ด ๊ฐ์ ธ๊ฐ์ ์ ์ฉํ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ .envํ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
์ ์ผ ๋ฐ ํด๋์ .env ํ์ผ์ ์์ฑํ๊ณ ์นด์นด์ค ์ฑํค๋ฅผ ์ค์ ํด ์ค๋ค. ๋ค๋ฅธ ํ๋ ์์ํฌ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ฆฌ์กํธ๋ REACT_APP์ผ๋ก ์์ํ๋ ์ด๋ฆ์ผ๋ก ์ง์ด์ผ ํ๋ค.
๊ทธ๋ ์ง์์ผ๋ฉด create-react-app์ด ์ด๊ฒ์ ์ธ์งํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ซ Error Issue
๋ํ, kakao developers์์ ํ๋ซํผ→web→๋๋ฉ์ธ ์ฃผ์ ์ถ๊ฐํด์ค์ผํจ!
.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>
๐ซ Error Issue
“sdk.js?appkey=[๋ฐ๊ธ๋ฐ์ํค] A parser-blocking, cross site (i.e. different eTLD+1) script, http://t1.daumcdn.net/mapjsapi/js/main/4.4.8/kakao.js, is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See https://www.chromestatus.com/feature/5718547946799104 for more details.”๋ผ๋ warning์ด ๋ด์
→ ๊ฒ์ํด๋ณด๋ “ํด๋น ๋ฌธ๊ตฌ๋ document.write๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ฐ๊ธ์ ์์ ํด ๋ฌ๋ผ๋ ๋ฌธ๊ตฌ์ด๋ฉฐ API ๋ด๋ถ์์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋จ๊ณ ์์ต๋๋ค. (2G ๊ฐ์)๋๋ฆฐ ๋คํธ์ํฌ ์์์ ์คํฌ๋ฆฝํธ ๋ธ๋ฝ์ด ์ผ์ด๋ ์ ์๋ค๋ ๋ฌธ๊ตฌ์ธ๋ฐ ์ค์ ์ง๋ ๋์์๋ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ฑ ์ ์ผ๋ก ๋์ํ์ง ์๊ธฐ๋ก ํ์ต๋๋ค.”๋ผ๋ ์นด์นด์ค๋ต๋ณ์ด ์์๋ค๊ณ ํด์ ์ผ๋จ ๋ฌด์ํ๊ณ ์งํ
.gitignore์ .env ์ถ๊ฐํ๊ธฐ
๋ณดํต Github์ ๋ณธ์ธ์ ์ฝ๋๋ฅผ pushํด์ ๊ด๋ฆฌํ๋ค. ์ด ๋, .env ํ์ผ์ด ๊ฐ์ด ์ฌ๋ผ๊ฐ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๊ฐ์ธ API KEY๋ฅผ ๋๊ตฐ๊ฐ๊ฐ ๋์ ์ฉ๋๋ก ์ฌ์ฉํ ์๋ ์์ ๊ฒ์ด๋ค.
๋ฐ๋ผ์, .gitignore์ .env ํ์ผ์ ์ ๋ ฅํด์ push๋ฅผ ๋ฏธ์ฐ์ ๋ฐฉ์งํ์.
API KEY ์ฌ์ฉํ๊ธฐ
- public/index.html์์ <script> ํ๊ทธ์ src ์์ฑ์ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ
- src ํด๋์ js, jsx, ts, tsx ํ์ผ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
public/index.html
public/index.html์์ <script> ํ๊ทธ์ src ์์ฑ์ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ์๋ % ๊ธฐํธ๋ฅผ ํ์ฉํ๋ค.
%.env์ ์ ์ฅํด๋์ ์ด๋ฆ%
src/ ~.js, ~.jsx, ~.ts, ~.tsx
src ํด๋์ js, jsx, ts, tsx ํ์ผ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ process.env๋ฅผ ํ์ฉํ๋ค.
// App.js
function App() {
console.log(process.env.REACT_APP_GOOGLE_MAP_API_KEY); // API KEY ์ถ๋ ฅ
}
export default App;
'Project > ์ ๊ฐ?' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
scroll prevent (0) | 2023.02.17 |
---|---|
๋ ๋ ์ง ์ฌ์ด ๊ณ์ฐ (0) | 2023.02.09 |
button count ์กฐ์ /์ ํ (0) | 2023.02.09 |
์ฐ ๊ธฐ๋ฅ (์์๋ฆฌ์ํธ) (0) | 2023.02.08 |
[์ ๊ฐ?] ํ๋ก์ ํธ ํ๊ณ (6) | 2023.02.08 |