inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Next.js 시작하기(feat. 지도 서비스 개발)

next/script로 네이버 지도 불러오기

useEffect의 clean up 함수를 실행해야 하는 이유가 무엇일까요??

해결된 질문

655

수수수

작성한 질문수 9

1

안녕하세요 강사님!

유익한 강의 아주 잘 듣고 있습니다.

혹시 컴포넌트 unmount 시 맵 객체를 destroy 해야 하는 이유를 알 수 있을까요?

destroy를 하지 않아도 코드 동작에는 큰 문제가 없는 것 같습니다. 혹시 메모리 상의 문제나 다른 문제가 있어서 이 코드를 작성해야 하는걸까요??

next/script로 네이버 지도 불러오기 강의 (8:40)

useEffect(() => {
    return () => {
      mapRef.current?.destroy();
    }
  })

 

예를 들면, setInterval의 경우 Unmount시 clearInterval을 하지 않을 경우 계속 백그라운드에서 실행되기 때문에 clearInterval을 해줘야한다고 바로 이해가 됐습니다. 하지만 위의 경우 꼭 맵 객체를 destroy 해야하는걸까요??

 

 

seo next.js vercel csr ssg ssr

답변 1

1

박용주

안녕하세요! 질문 감사합니다 :)

말씀하신대로 이 프로젝트에서는 "한 페이지 안에서 여러 번 지도를 추가 OR 삭제하는 동작"은 없기 때문에, destroy를 안해도 기능상 큰 문제는 없습니다.

공식문서에서 destroy() 는 모든 이벤트 및 지도 요소를 제거한다고 설명되어 있습니다(https://navermaps.github.io/maps.js.ncp/docs/naver.maps.Map.html#destroy__anchor).

destroy를 지우고 빌드한 후 개발자도구의 performance 테스트를 해보면, 실제로 memory leak이 발생하는 것을 확인할 수 있습니다.
image-> destroy()를 실행할 경우 '/' 페이지와 '/feedback' 페이지를 왔다갔다해도 listeners 수(노란색 선)가 똑같이 하락합니다.(노란선이 빨간선과 겹치도록 바닥에 붙어있음)

image-> destroy()를 실행하지 않으면 페이지를 이동할 때마다 listeners가 점점 늘어남을 알 수 있습니다. (오른쪽으로 갈수록 노란색 선의 저점이 조금씩 올라감)

따라서 이 질문에선 메모리 상의 문제가 있다고 답변드리는게 맞을 것 같습니다.(미미하지만)

하지만 한 페이지에서 지도를 여러 번 생성 + 삭제하는 프로젝트일 경우 destory를 하지 않아 치명적인 버그가 발생할 수 있습니다. 따라서 특별한 이유가 없다면 지도를 생성한 뒤에는 destroy를 함께 작성해주는 것이 안전합니다.

감사합니다!

1

수수수

와... 너무 명확하게 이해됐습니다!

친절하고 상세한 답변 너무 감사드립니다!!!

3

박용주

저도 좋은 질문 감사드립니다ㅎㅎ

API 라우터를 사용해야 하는 경우에 대해

1

150

1

키보드 어떤 거 사용하시나요

1

352

1

next.js 멀티플 런타임 관련해서 질문 올립니다..

1

358

2

아주 기초적인 질문입니다.

1

322

1

서버사이드 렌더링을 할 때, 서버는 어디에 있는 건가요?

1

1170

2

수업을 듣다가 SSR에 관하여..

1

551

2

interface 와 type

1

376

1

엘리맨트들의 자식관계가 어떻게 이렇게 되나 궁금합니다.

1

384

1

onLoad함수 (script태그의 onLoad X)

1

426

1

dynamic에 대한 질문

1

447

1

SSR vs SSG

1

476

2

NoSSR 관련한 질문입니다:)

1

376

1

a tag 질문 !

1

327

2

8분 20초 배포 관련

1

324

2

안녕하세요! 구글 서치 콘솔에 등록하는 도중 다음 오류가 뜹니다

0

2678

2

emotion styles 파일이 빌드시 경고로 뜹니다.

1

438

1

naver map 이 출력되지 않습니다.

1

481

1

페이지에 site맵 존재시 next Link는 csr 처럼 싹가져오게 되나요?

1

264

2

Failed to load resource: the server responded with a status of 404 ()

1

1034

2

VSCode 익스텐션 궁금합니다.

1

356

1

상태관리 질문 있습니다!

1

449

1

swr에 대한 질문입니다. (용어 관련)

1

372

1

swr 질문입니다!

1

337

1

안녕하세요. span 태그의 부모에 display: flex 를 적용하는데 왜 적용되는지 아무리 생각해도 이해가 되지 않아 질문드립니다.

1

679

2