Next.js

[Next.js] Next.js의 작동원리 / 주요 기능 / 파일 구조

킹우현 2023. 8. 12. 15:32

Next.js는 React 기반의 자바스크립트 프레임워크입니다. 성능, SEO 및 애플리케이션 개발에 효율적이며, Routing, Server Side Rendering(SSR), Static Site Generator(SSG), Image에 관한 기능이 미리 내장되어 있으므로 React와 같이 이러한 기능을 개별적으로 설치, 설정할 필요없이 설치 직후부터 사용할 수 있습니다.

Next.js 작동원리

No-Pre-rendering of React.js / Pre-rendering of next.js

  1. Next.js는, 기본적으로 서버측에서 React코드를 실행한다.
  2. React.js를 서버측에서 pre-rendering하여 html을 생성하고, 브라우저로 보내준다.
  3. 그 후, 브라우저에서 React를 사용해 웹페이지를 완성한다. 👉🏻초기 렌더링 속도가 빠르고 SEO에 유리하다 !

주요 기능

  • 직관적인 페이지 기반 Routing 시스템( 동적 경로 지원 포함 )
  • 사전 렌더링, 정적 생성(SSG) 및 서버 측 렌더링(SSR) 모두 페이지 단위로 지원된다.
  • 자동 코드 분할(빠른 로딩)
  • 최적화된 프리페치를 통한 클라이언트 측 라우팅
  • 내장 CSS 및 Sass 지원 및 모든 CSS-in-JS 라이브러리 지원
  • Fast Refresh를 지원한다. ( 빠른 리프레쉬 )
  • Serverless Functions로 API 엔드포인트를 빌드하기 위한 API 경로

파일 구조

pages 디렉토리

페이지의 라우팅를 담당하는 컴포넌트(폴더/파일구조로 url 결정)

public 디렉토리

정적 파일들을 관리하는 폴더입니다. css 파일, font 파일, 이미지 파일을 관리할 수 있습니다.

styles 디렉토리

스타일 파일을 관리하는 폴더입니다. 공통적으로 사용되는 스타일을 관리할 수 있습니다.

모듈(module) css는 컴포넌트 종속적으로 스타일링하기 위한 파일이며, 확장자 앞에 module을 붙여줘야 합니다.

_app.tsx

import type { AppProps } from "next/app"
import { AppLayout } from "@components"
import "@styles/globals.scss"

export default function MyApp({ Component, pageProps }: AppProps) {
  return (
    <AppLayout>
      <Component {...pageProps} />
    </AppLayout>
  )
}

Next.js 실행 시 가장 먼저 실행되는 파일로, App구성 요소를 사용하여 모든 페이지를 초기화합니다.

따라서 _app.js(tsx)을 만들어 기본 App 구성 요소를 덮어 쓸 수 있습니다. 즉, 모든 페이지에서 필요한 처리를 여기에 작성할 수 있습니다. ( 핵심은 모든 페이지에서 공통으로 사용함 )  

 

그 밖에도 다음과 같은 작업을 할 수 있습니다.

  • 페이지 간의 공통 레이아웃 적용
  • Global CSS 정의
  • 각 Route 구성요소 래핑
  • Redux Provider 설정

_document.tsx

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

export default function Document() {
  return (
    <Html>
      <Head>
        <meta name="description" content="Generated by create next app" />
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

_app.tsx 다음으로 실행되는 파일로, index.html과 동일한 역할을 합니다. html, body와 같은 기본 태그들의 속성들을 지정하여 애플리케이션의 구조를 만들어 주는 파일입니다.

next.config.js

Next.js는 Webpack을 기본 번들러로 사용하는데, Webpack에 관한 설정을 해줄 수 있습니다.