_app.js

서버로 요청이 들어왔을 때 가장 먼저 실행되는 컴포넌트이고, 페이지에 적용될 공통적인 레이아웃의 역할을 한다.

function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}

export default MyApp

_document.js

_app 다음에 실행되어서 공통적으로 활용할 <head>나 <body> 태그 안에 들어갈 내용들, 즉 공통적으로 적용할 HTML 마크업을 커스텀할 때 활용한다.

_document는 언제나 서버 쪽에서 실행된다. 따라서 브라우저 api나 이벤트 핸들러를 사용할 수가 없다. 또한 getStaticProps와 getServerSideProps를 통해서 데이터를 불러올 수가 없다.

// 기본적인 _document의 형태

import Document, { Html, Head, Main, NextScript } from 'next/document'

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx)
    return { ...initialProps }
  }

  render() {
    return (
      <Html>
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  }
}

export default MyDocument

Next.js의 _document와 _app에 대하여