[Next] _app๊ณผ _document

๊น€์ง„์˜ยท2023๋…„ 4์›” 16์ผ
0

NextJS

๋ชฉ๋ก ๋ณด๊ธฐ
3/3
post-thumbnail

๐Ÿ“‹ _app๊ณผ _document

Next.js ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค.
๋ฐ”๋กœ _app๊ณผ _document์ด๋‹ค.

์ด ๋‘ ๊ธฐ๋ณธ ํŽ˜์ด์ง€์˜ ์—ญํ• ์€ ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณด์ž.


๐Ÿ“Œ 1. _app

_app์€ ์„œ๋ฒ„๋กœ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋ฉฐ, ํŽ˜์ด์ง€์— ์ ์šฉํ•  ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ์˜ ์—ญํ• ์„ ํ•œ๋‹ค.

React์˜ Router.tsx (App.tsx) ์ปดํฌ๋„ŒํŠธ์™€ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Next.js uses the App component to initialize pages. You can override it and control the page initialization and:

  • Persist layouts between page changes
  • Keeping state when navigating pages
  • Inject additional data into pages
  • Add global CSS
    -Next.js ๊ณต์‹ ๋ฌธ์„œ

๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์€ ์ด๋Ÿฌํ•˜๋‹ค.

  • ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ์—๋„ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
  • ํŽ˜์ด์ง€ ์ „ํ™˜ ํ›„์—๋„ state๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
  • ํŽ˜์ด์ง€์— ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ๊ธ€๋กœ๋ฒŒํ•œ CSS๋ฅผ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

๐Ÿ“Œ 2. _document

A custom Document can update the <html> and <body> tags used to render a Page. This file is only rendered on the server, so event handlers like onClick cannot be used in _document. -Next.js ๊ณต์‹ ๋ฌธ์„œ

_document๋Š” _app ๋‹ค์Œ์— ์‹คํ–‰ ๋˜๋ฉฐ, ๊ณตํ†ต์ ์œผ๋กœ ํ™œ์šฉ ํ•  ๋ฉ”ํƒ€ ํƒœ๊ทธ ํ˜น์€ body ํƒœ๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ๋“ค์„ ์ปค์Šคํ…€ ํ•  ๋•Œ ์“ฐ์ธ๋‹ค.
๋˜ ์ด ํŒŒ์ผ์€ ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— onClick๊ฐ™์€ ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

React์˜ index.html๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

_document๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ๋‹ค.

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

export default function Document() {
  return (
    <Html>
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

๋˜ ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•˜๋Š” Head๋Š” next/head๊ฐ€ ์•„๋‹Œ next/document๋ชจ๋“ˆ์—์„œ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ๋‹ค.


๐Ÿ“Œ 3. ์š”์•ฝ

  • _app์€ ํŽ˜์ด์ง€์— ์ ์šฉํ•  ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ React์˜ Router.tsx (App.tsx) ์ปดํฌ๋„ŒํŠธ์™€ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • _document๋Š” ๊ณตํ†ต์ ์œผ๋กœ ํ™œ์šฉ ํ•  ๋ฉ”ํƒ€ ํƒœ๊ทธ ํ˜น์€ body ํƒœ๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ๋“ค์„ ์ปค์Šคํ…€ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ React์˜ index.html๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€