페이지에 공통적으로 적용될 내용을 작성하는 공간
서버 요청이 들어왔을 때 가장 먼저 실행되는 컴포넌트.
페이지에 적용할 공통 레이아웃의 역할을 한다
전역적으로 사용하는 공통 데이터 등을 다루는 곳이다
_app.js 다음에 실행되며, 공통적으로 활용할 <head>
(예 : 메타 태그) 나 <body>
태그 안에 들어갈 내용들을 커스텀할 때 사용한다.
즉, 모든 문서에 공통적으로 적용될 내용을 넣는다.
만약 <title>
이나 open graph등 페이지별로 다르게 적용되어야 하는 내용들은 각 페이지별로 처리해야 한다.
쉽게 정리하면, 공통적으로 적용할 HTML 마크업을 커스텀 하는 공간으로 볼 수 있다.
_app.js는 동적인 것중에 공통 적용할 사항들을 기재,
_document.js는 정적인 것중에 공통 적용할 사항들을 기재한다.
facebook pixel 스크립트를 예시로 _app.js와 _document.js의 사용을 비교해보잣
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', <YOUR_PIXEL_ID>);
fbq('track', 'PageView');
</script>
스크립트의 경우 pixel에서 트래킹 용으로, 동적으로 사용되는 함수이기에 => _app.js에다가 저장한다
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=<YOUR_PIXXEL_ID>&ev=PageView&noscript=1"
/></noscript>
위의 noscript의 경우, facebook이랑 연결용으로만 한번 사용되는 용도로 사용되기에, _document.js에다가 기재한다.
(가이드에서 head에 넣으라고 하는것 중 function이 아닌것들은 다 _document에다가 기재한다.
역으로, function인 것들은 가이드에서 head에 넣으라하던, body에 넣으라하던 다 _app.js에다가 기재한다)
next.js github에 정말 많은 예제들이 있으니, 예제를 보고 작성해보자
(google analytics, google tagmanager등 웬만한 굵직한 서비스는 다 예제를 지원해준다)