[NEXT JS] 외부 JS파일 사용하기

이번에 네이버에서 제공하는 맵 API를 이용해보려 하는데, 예제가 기본적으로 HTML로 되어있고, 외부 JS파일을 script태그로 불러오는 형식으로 예문이 짜여져 있었습니다.

아래는 네이버 Dynamic Map API를 사용한 HTML 예제입니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>간단한 지도 표시하기</title>
    <script type="text/javascript" src="https://oapi.map.naver.com/openapi/v3/maps.js?ncpClientId=YOUR_CLIENT_ID"></script>
</head>
<body>
<div id="map" style="width:100%;height:400px;"></div>

<script>
var mapOptions = {
    center: new naver.maps.LatLng(37.3595704, 127.105399),
    zoom: 10
};

var map = new naver.maps.Map('map', mapOptions);
</script>
</body>
</html>

위 코드의 script를 보면 다음과 같습니다.

<script type="text/javascript" src="https://oapi.map.naver.com/openapi/v3/maps.js?ncpClientId=YOUR_CLIENT_ID"></script>

이 코드와 같이 외부 JS파일을 불러오는 것을 알 수 있었습니다.

그렇다면 React환경인 NextJS에서는 이 파일을 어떻게 불러올 수 있을까요?

😎NextJS에서 제공하는 Script를 이용한다

import Script from 'next/script'

export default function Dashboard() {
  return (
    <>
      <Script src="https://example.com/script.js" />
    </>
  )
}

Nextjs 제공하는 Script컴포넌트를 이용하여 위와 같이 JS파일을 불러올 수 있습니다.

하지만 제가 구현하고자 하는 기능에선 Script파일이 제대로 작동하지 않았습니다. script를 불러오고나서 js함수를 실행시키고자 하였는데, 이러한 과정에서 순서가 잘 못된 것 같았습니다. 물론 어찌저찌 해결할 순 있었겠지만, 보다 보기좋게 만들기 위해서 다음과 같은 방법을 사용했습니다.

😎useEffect 내부 자바스크립트 코드를 사용하여 script태그 삽입하기

export default function Dashboard() {
    useEffect(()=>{
        const script = document.createElement("script");
    script.type = "text/javascript";
    script.src = url;
    document.head.appendChild(script);

        script.onload = () => {
            //파일을 불러오고 나서 실행할 코드를 작성해주세요.
        }
    },[])
  return ...

위와 같은 방법은 바닐라 JS를 이용한 코드로, script를 불러오고 나서, 곧바로 JS코드를 사용할 수 있다는 장점이 있습니다. 개인적으로 훨씬 가독성이 좋다고 생각되었는데, 컴포넌트 관리를 잘한다면 Scirpt 컴포넌트를 사용하는게 더 깔끔할 거란 생각입니다.