- Published on
nextjs script strategy
- Authors

- Name
- Deokgoo Kim
- 프로덕트 엔지니어 (8년차)
- Social links
- GitHub
들어가기전
최근 개인 프로젝트 성능 개선을 위해 리소스를 lazyload를 고려하다 next/script에 strategy라는 속성을 알게되어 공부하고 정리하였습니다.
본론으로
Script Tag 속성 defer, async
script 태그에서 속성으로 async defer이 존재한다. 외부에서 파일을 가져올떄 사용하게되며 로드하는 시점, 실행하는 시점이 다르다.
따라서 defer 또는 async를 사용하는 것만으로도 시간단축의 효과를 볼 수 있다.
(다른 훌륭한 자료들이 많기 때문에 그림으로 대체)

NextJS에서는
nextjs에서 제공하는 next/Script는 script의 호출을 자유롭게 만들었습니다. 특히나 strategy라는 전략을 사용하게되면 Component 어디에서 호출을 하더라도 명시적으로 타이밍을 결정할 수 있습니다.
strategy의 선택지는 아래와 같이 3가지를 공식문서에서 다음과 같이 설명합니다.
- beforeInteractive: Load before the page is interactive
- afterInteractive: (default) Load immediately after the page becomes interactive
- lazyOnload: Load during idle time
(https://nextjs.org/docs/basic-features/script#strategy)
beforeInteractive는 head에 위치하게 되며 속성으로 defer을 사용합니다. (inline script 사용안됩니다.)
<!-- beforeInteractive -->
<head>
<script src="./script.js" defer data-nscript="beforeInteractive"></script>
</head>
afterInteractive는 head에 위치하며 기본 script태그를 사용합니다. (inline script 사용가능)
<!-- afterInteractive -->
<head>
<script src="./script.js" data-nscript="afterInteractive"></script>
</head>
lazyOnload는 페이지 라이프사이클 load 이후에 발생하며 body태그 마지막에 추가되어집니다. (inline script 사용가능)
<!-- lazyOnload -->
<body>
...
...
<script src="./script.js" data-nscript="lazyOnload"></script>
</body>
마무리
NextJS에서 제공하는 Script를 사용해서 간편하고 명확하게 script를 로드 할 수 있습니다. 특히나 analytics관련 cdn 호출, 각종 플러그인, 소셜미디어 등 잘 고려해서 사용하면 좋을것 같습니다.
관련 글
2026년 5월 31일
React Suspense 변천사와 React 19 실전 패턴
Suspense는 더 이상 로딩 스피너용이 아닙니다. React 19에서 비동기 데이터 스트리밍의 핵심이 된 Suspense의 진화 과정과 시니어 개발자를 위한 필수 디자인 패턴 3가지를 소개해보려고 합니다.
2026년 5월 5일
[대딸깍의 시대] 소프트웨어 엔지니어는 무엇을 공부해야 할까요?
AI 시대, 프롬프트 엔지니어링이 대세인 지금, 소프트웨어 엔지니어는 무엇을 공부해야 할까요? 변하지 않는 본질을 찾아가는 한 개발자의 고민과 방향성을 공유합니다.
2026년 4월 19일
JavaScript Proxy 패턴 소개
Vue.js 3 내부에서도 쓰이는 JavaScript Proxy 패턴의 탄생 배경과 실전 활용 사례를 정리했습니다.
댓글
새 글 알림 받기
실무에서 바로 써먹을 수 있는 개발 팁과 경험담을 받아보세요
개인정보는 뉴스레터 발송 목적으로만 사용되며, 언제든 구독을 해지할 수 있습니다.