Learn Next.js 공식문서 공부 내용 정리

2024. 12. 22. 00:13·웹 프로그래밍/Next.js
반응형
  • 공식문서 링크: https://nextjs.org/learn/dashboard-app
  • 공식문서 번역 블로그 링크: https://kidongg.github.io/categories/next-js-learn/

Chapter 1. Getting Started

  • `pnpm (패키지 매니저)` 사용 권장

⬇️ pnpm 설치

npm install -g pnpm

 

⬇️ Next.js 애플리케이션 생성

npx create-next-app@latest nextjs-dashboard --example "https://github.com/vercel/next-learn/tree/main/dashboard/starter-example" --use-pnpm
  • create-next-app: CLI 도구
  • --example: 스터터 예제 플래그

⬇️ Next.js  프로젝트 패키지 설치

pnpm i

 

⬇️ Next.js  프로젝트 시작

pnpm dev

 

폴더 구조

프로젝트에는 다음과 같은 폴더 구조가 포함되어 있습니다.

  • /app: 애플리케이션의 모든 경로, 컴포넌트, 로직이 포함된 폴더입니다. 대부분의 작업은 이곳에서 이루어집니다.
  • /app/lib: 재사용 가능한 유틸리티 함수와 데이터 페칭 함수와 같은 애플리케이션에서 사용되는 함수들이 포함되어 있습니다.
  • /app/ui: 카드, 테이블, 폼과 같은 애플리케이션의 UI 컴포넌트들이 포함되어 있습니다. 이 컴포넌트들은 이미 스타일링되어 있어 시간을 절약할 수 있습니다.
  • /public: 이미지와 같은 애플리케이션의 정적 파일이 포함되어 있습니다.
  • 구성 파일: `next.config.js`와 같은 구성 파일이 애플리케이션 루트에 있습니다. 이 파일들은 대부분 `create-next-app`을 사용할 때 자동으로 생성되고 구성됩니다. 이 과정에서는 해당 파일들을 수정할 필요가 없습니다.
* Prisma, Drizzle: 데이터베이스 스키마에 따라 타입 자동 생성해주는 도구

Chapter 2. CSS Styling

`app/ui` 폴더 > `global.css`

  • 해당 파일에 스타일을 작성하면, 애플리케이션의 모든 경로에 전역적으로 CSS 규칙을 추가할 수 있다.
  • 일반적으로 최상위 컴포넌트(루트)에 포함된다.
  • `app/layout.tsx` > `global.css` 파일 내부에서 전역 스타일 추가 가능
// /app/layout.tsx

import "@/app/ui/global.css";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}

 

CSS 규칙을 추가하지 않았는데 스타일이 설정된 이유: `global.css` 내부의 `@tailwind` 지시문이 포함되어 있기 때문

/* /app/ui/global.css */

@tailwind base;
@tailwind components;
@tailwind utilities;

 

스타일 처리 방법

1. tailwind: 클래스 이름을 추가해 요소의 스타일을 지정 -> 스타일 중복/충돌 방지 및 CSS 번들 크기가 커지는 일 방지 가능

// /app/page.tsx

import AcmeLogo from '@/app/ui/acme-logo';
import { ArrowRightIcon } from '@heroicons/react/24/outline';
import Link from 'next/link';

export default function Page() {
  return (
    // These are Tailwind classes:
    <main className="flex min-h-screen flex-col p-6">
      <div className="flex h-20 shrink-0 items-end rounded-lg bg-blue-500 p-4 md:h-52">
    // ...
  )
}

 

2. CSS Modules: 고유한 클래스 이름을 자동 생성하여 컴포넌트에 CSS 범위를 지정하는 방법

/* /app/ui/home.module.css */

.shape {
  height: 0;
  width: 0;
  border-bottom: 30px solid black;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
}
// /app/page.tsx

import styles from '@/app/ui/home.module.css';

//...
<div className="flex flex-col justify-center gap-6 rounded-lg bg-gray-50 px-6 py-10 md:w-2/5 md:px-20">
    <div className={styles.shape}></div>;
// ...

 

3. clsx 라이브러리: 조건부 스타일링 지정

// /app/ui/invoices/status.tsx

import clsx from 'clsx';

export default function InvoiceStatus({ status }: { status: string }) {
  return (
    <span
      className={clsx(
        'inline-flex items-center rounded-full px-2 py-1 text-sm',
        {
          'bg-gray-100 text-gray-500': status === 'pending',
          'bg-green-500 text-white': status === 'paid',
        },
      )}
    >
    // ...
)}

 

4. 그 외

  • Sass: .css와 .scss 파일을 가져와 사용 가능
  • CSS-in-JS 라이브러리: styled-jsx, styled-components, emotion 등을 활용.

Chapter 3. Optimizing Fonts and Images

Cumulative Layout Shift (누적 레이아웃 이동, CLS): Google이 웹사이트의 성능과 사용자 경험을 평가하는 데 사용하는 지표 중 하나

  • 글꼴 관련 CLS는 브라우저가 처음에는 대체 또는 시스템 글꼴로 텍스트를 렌더링했다가 사용자 정의 글꼴이 로드된 후 이를 교체하면서 발생한다 → 이 과정에서 텍스트 크기, 간격, 레이아웃이 바뀌어 주변 요소가 이동할 수 있다.

Next.js의 글꼴 최적화

  • `next/font` 모듈을 사용하면 Next.js는 애플리케이션에서 글꼴을 자동으로 최적화한다.
  • 글꼴 파일을 빌드 시 다운로드해 정적 자산과 함께 호스팅한다.
  • 사용자가 애플리케이션에 접속할 때 폰트 파일 관련 추가 네트워크 요청이 발생하지 않기 때문에 성능이 향상된다.

이미지 최적화

  • Next.js는 이미지와 같은 정적 자산을 최상위 폴더인 /pulic 폴더에서 제공한다.
  • `/public` 폴더 아래의 파일은 애플리케이션에서 참조할 수 있다. 
  • 일반 HTML의 img 태그 사용 시와 달리, `next/image` 컴포넌트를 사용하면 이미지를 자동으로 최적화 할 수 있다.
    • 이미지가 다양한 화면 크기에서 반응하는지 확인
    • 다양한 디바이스에 맞는 이미지 크기를 지정
    • 이미지가 로드될 때 레이아웃이 이동하지 않도록 함
    • 사용자 뷰포트 외부에 있는 이미지를 lazy load 함
  • `<Image>` 컴포넌트
    • <img> 태그의 확장
    • 이미지 로드 시 레이아웃이 자동으로 이동하는 것(CLS)을 방지해준다.
    • 뷰포트가 작은 기기에 큰 이미지가 전송되지 않도록 이미지 크기를 조정한다.
    • 이미지 레이지 로딩(이미지가 뷰포트에 들어갈 때 이미지가 로드됨)을 한다.
    • 브라우저에서 WebP 및 AVIF와 같은 최신 형식을 지원하는 경우 이미지를 제공한다.

Chapter 4. Creating Layouts and Pages

Nested routing

출처: https://nextjs.org/learn/dashboard-app

  • Next.js는 폴더가 중첩 경로를 만드는 데 사용되는 파일 시스템 라우팅을 사용한다.
  • 각 폴더는 URL segement에 매핑되는 route segment를 나타낸다.

출처: https://nextjs.org/learn/dashboard-app

  • `layout.tsx` 및 `page.tsx` 파일을 사용해 각 경로에 대해 별도의 UI를 만들 수 있다.
  • `page.tsx`는 React 컴포넌트를 내보내는 특별한 Next.js 파일이며, 경로에 접근하기 위해 필요하다.
  • 중첩된 경로를 만들려면 폴더를 서로 중첩하고 그 안에 `page.tsx` 파일을 추가하면 된다.

Creating the dashboard layout

  • Next.js에서는 특별한 `layout.tsx` 파일을 사용해 여러 페이지 간에 공유되는 UI를 만들 수 있다.
  • `/dashboard` 폴더에 `layout.tsx` 라는 새 파일을 추가하고 코드를 추가하면 된다.
  • 이 경우 `/dashboard` 내의 페이지는 다음과 같이 `<Layout/>` 안에 자동으로 중첩된다.

출처: https://nextjs.org/learn/dashboard-app

  • Next.js에서 레이아웃을 사용하면, 탐색 시 페이지 컴포넌트만 업데이트되고 레이아웃은 다시 렌더링되지 않는다는 이점이 있다. 이를 Partial rendering이라고 한다. 

출처: https://nextjs.org/learn/dashboard-app

  • Root Layout: `/app/layout.tsx` 내부의 코드

Chapter 5. Navigating Between Pages

HTML <a> 태그 사용 시, 페이지 탐색을 하면 전체 페이지가 새로 고쳐진다.

<Link> 컴포넌트

  • 애플리케이션의 페이지 간에 링크를 할 수 있다.
  • 자바스크립트로 클라이언트 사이드 탐색을 수행할 수 있다.
  • <Link/> 컴포넌트를 사용하려면 `next/link`에서 링크 컴포넌트를 가져온 다음 <a> → <Link> 태그로 바꾼다.
  • 전체 새로 고침 없이 페이지 탐색이 가능하다.

Automatic code-splitting and prefetching

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로그래밍 > Next.js' 카테고리의 다른 글

[Next.js 공식문서 정리] Routing : 03. Error Handling  (0) 2025.03.29
[Next.js 공식문서 정리] Routing : 02. Linking and Navigating  (0) 2025.03.29
[Next.js 공식문서 정리] Routing : 01. Layouts and Templates  (0) 2025.03.28
[유데미 | Maximilian] Next.js 강의 내용 정리 (섹션 1: 시작하기)  (0) 2024.05.19
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 15 ~ 16: Next.js 렌더링 2 - SSG, Next.js 렌더링 3 - ISR)  (1) 2024.01.22
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 14: Next.js 렌더링 1 - SSR)  (1) 2024.01.22
'웹 프로그래밍/Next.js' 카테고리의 다른 글
  • [Next.js 공식문서 정리] Routing : 02. Linking and Navigating
  • [Next.js 공식문서 정리] Routing : 01. Layouts and Templates
  • [유데미 | Maximilian] Next.js 강의 내용 정리 (섹션 1: 시작하기)
  • [유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 15 ~ 16: Next.js 렌더링 2 - SSG, Next.js 렌더링 3 - ISR)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    공식문서
    Til
    프로그래머스
    Jiraynor Programming
    강의내용정리
    포트폴리오
    클론 프로젝트
    구현
    spring boot
    자바스크립트
    웹사이트
    AWS
    SWEA
    Next.js
    mysql
    자바
    블로그 제작
    ZeroCho
    컴퓨터네트워크
    React
    알고리즘
    파이썬
    프로젝트
    플러터
    d3
    뉴렉처
    백준
    리액트
    타입스크립트
    bfs
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
Learn Next.js 공식문서 공부 내용 정리
상단으로

티스토리툴바