_document 파일
_document 파일은 페이지 컴포넌트를 그릴 때 필요한 HTML 부가 정보를 입력하는 컴포넌트입니다. 커스텀 문서(Custom Document) 컴포넌트라고도 합니다. 이 컴포넌트로 페이지 컴포넌트의 html, head, body 등의 태그 정보를 업데이트할 수 있습니다.
커스텀 문서 컴포넌트를 사용하기 위해서는 pages
폴더 밑에 _document.jsx
을 생성하면 됩니다.
pages/_document.jsx
import { Html, Head, Main, NextScript } from 'next/document'
export default function Document() {
return (
<Html lang="en">
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
이 파일은 서버에서만 렌더링 되기 때문에 onClick
과 같은 이벤트 핸들러는 사용할 수 없습니다. 그리고 위 와 같이 <Html>
, <Head>
, <Main>
, <NextScript>
컴포넌트는 페이지를 그리기 위해 꼭 포함되어야 합니다.
Head 컴포넌트 관련 주의 사항
커스텀 문서 컴포넌트에서 <Head>
컴포넌트를 작성할 때 주의할 점이 있습니다. _document.jsx
파일에서 쓰이는 Head
컴포넌트는 페이지 컴포넌트에서 사용되는 Head
컴포넌트와 다릅니다.
// `_document.jsx` 파일에서 사용될 Head 컴포넌트
import { Head } from 'next/document'
// 페이지 컴포넌트에서 사용될 Head 컴포넌트
import { Head } from 'next/head'
_document.jsx
파일의 Head
컴포넌트는 모든 페이지에 공통으로 들어갈 내용이 포함되어야 합니다. 각 페이지 컴포넌트 별로 다르게 정의될 title
, meta
태그와 같은 내용은 각 페이지에 import { Head } from 'next/head'
를 추가하여 정의합니다.
커스텀 문서 컴포넌트 주의 사항
- 커스텀 문서 컴포넌트에는 애플리케이션 로직이나 CSS 스타일을 넣으면 안됩니다. 만약 로직이나 스타일을 넣어야 한다면 대신 레이아웃 컴포넌트를 활용합니다.
- 커스텀 문서 컴포넌트는 커스텀 앱 컴포넌트와 마찬가지로 getStaticProps, getServerSideProps 등의 데이터 호출 메서드를 사용할 수 없습니다.