[Next.js] ์ „์—ญ ๊ฐ์ฒด, .env ํƒ€์ž… ์„ค์ •ํ•˜๊ธฐ

๐Ÿ˜ฅ๋ฐœ์ƒํ•œ ๋ฌธ์ œ?

"use client";

import { useEffect } from "react";

const KakaoMap = () => {
  useEffect(() => {
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.src = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${process.env.NEXT_PUBLIC_KAKAO_MAP_API}&autoload=false`;
    document.body.appendChild(script);

    script.onload = () => {
      window.kakao.maps.load(() => {
        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); //์ง€๋„ ์ƒ์„ฑ ๋ฐ ๊ฐ์ฒด
      });
    };
  }, []);
  return <div id="map" className="w-[500px] h-[500px]"></div>;
};

export default KakaoMap;

ํ˜„์žฌ ์นด์นด์˜ค ๋งต์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์นด์นด์˜ค ๋งต API๋ฅผ Script๋กœ ๋ถˆ๋Ÿฌ์˜จ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ ํ•˜์ง€๋งŒ, window.kakao ์ฝ”๋“œ์—์„œ ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

์นด์นด์˜ค ๋งต API๋Š” ์ „์—ญ ๊ฐ์ฒด์— kakao๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์˜ ํƒ€์ž… ์„ค์ •์„ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜Ž๋ฌธ์ œ ํ•ด๊ฒฐ!

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ type.d.ts ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

//types.d.ts
declare global {
  namespace NodeJS {
    interface ProcessEnv {
      NEXT_PUBLIC_KAKAO_MAP_API: string | undefined;
    }
  }
  interface Window {
    kakao: any;
  }
}

export {};

Windowํƒ€์ž…์— kakao ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

๋ค์œผ๋กœ .env์— ์„ค์ •ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค ์—ญ์‹œ ์ด๊ณณ์—์„œ ํƒ€์ž… ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๐Ÿง ์™œ ํ•ด๊ฒฐ ๋˜๋Š” ๊ฑธ๊นŒ?

d.ts ํŒŒ์ผ์„ ํ†ตํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ๋  ๋•Œ ํƒ€์ž…์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ธ๋ฐ, export{} ์ด ๋ถ€๋ถ„์„ ํ†ตํ•ด์„œ ์ด ํŒŒ์ผ์ด module๋กœ์จ ์ž‘๋™๋˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฑ… ํ•œ๊ถŒ์„ ์ •๋…ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค.