๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Next

Next.js์˜ _app๊ณผ _document ์•Œ์•„๋ณด๊ธฐ

Next.js์—๋Š” _document, _app ๋‘๊ฐœ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค

_app, _document๋Š” ํ”„๋กœ์ ํŠธ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ ๋˜์–ด์•ผํ•  ๋‚ด์šฉ๋“ค์„ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

 

App

App ์ปดํฌ๋„ŒํŠธ๋Š” ์•ฑ์ด ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ธ€๋กœ๋ฒŒ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค

 

์˜ˆ์‹œ 

  • ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‹œ์—๋„ ๋ ˆ์ด์•„์›ƒ๊ณผ ์ƒํƒœ๊ฐ’์„ ์œ ์ง€
  • componentDidCatch๋ฅผ ํ†ตํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง
  • ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
  • Global CSS ์ถ”๊ฐ€
  • Header, Footer์™€ ๊ฐ™์€ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€

 

const App = ({ Component, pageProps }) => {
  return (
    <Layout>
      <Component {...pageProps} />
	</Layout>
  );
};

export default App;

 

๊ธฐ๋ณธ์ ์ธ _app ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์ด๋ฉฐ props๋กœ Component์™€ pageProps๋ฅผ ๋ฐ›๋Š”๋‹ค

 

Component

Component๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ํŽ˜์ด์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Component๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค

 

pageProps

pageProps๋Š” getInitialProps, getStaticProps, getServerProps์ค‘ ํ•˜๋‚˜๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ์ดˆ๊ธฐ ์†์„ฑ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค

 

// index.tsx
export async function getStaticProps() {
  const path = 'Home';
    return {
      props: {
        path,
      },
    };
}

 

// _app.tsx
const App = ({ Component, pageProps }) => {
  console.log(pageProps);  // {path: 'Home'}

  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
};

 

์œ„ ์ฒ˜๋Ÿผ getStaticProps๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด _app.tsx์˜ pageProps์— ํ•ด๋‹น ๊ฐ’์ด ๋‹ด๊ธด๋‹ค

 

_document

๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” html, meta, body ํƒœ๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์„ ์ปค์Šคํ…€ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค

  • Document๋Š” ์„œ๋ฒ„์—์„œ๋งŒ ๋ Œ๋”๋ง ๋œ๋‹ค
  • onClick๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๋‚˜ ์Šคํƒ€์ผ, application ๋กœ์ง ๋“ฑ์€ ๋„ฃ์œผ๋ฉด ์•ˆ ๋œ๋‹ค
  • title๊ณผ ๊ฐ™์ด ๊ฐ ํŽ˜์ด์ง€๋ณ„๋กœ ๋ณ€๊ฒฝ์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒƒ๋“ค์€ ๊ฐ ํŽ˜์ด์ง€์— ๋„ฃ์–ด์•ผ ํ•œ๋‹ค

 

์ •๋ฆฌ 

์ •๋ฆฌํ•˜์ž๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€๋Š” _app, _document๊ฐ€ ์‹คํ–‰ ๋œ ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค

_app์ด ์‹คํ–‰๋œ ์ดํ›„์— _document๊ฐ€ ์‹คํ–‰๋œ๋‹ค

_app์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง, ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ ๋“ฑ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์‚ฌํ•ญ๋“ค์„ ๋‹ค๋ฃฌ๋‹ค.

_document๋Š” ์ •์ ์ธ ์‚ฌํ•ญ๋“ค์— ๋Œ€ํ•ด ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์„ ๋‹ค๋ฃฌ๋‹ค

 

 

Reperence

https://nextjs.org/docs/advanced-features/custom-app

https://nextjs.org/docs/advanced-features/custom-document

'Next' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Next.js Image ์•Œ์•„๋ณด๊ธฐ  (0) 2022.09.18
Next.js์˜ Pre-rendering  (1) 2022.09.11
Next.js ์•Œ์•„๋ณด๊ธฐ  (1) 2022.08.31