WEB/Next.js

Learn Next.js 챕터 1, 2

hatso 2024. 1. 22. 16:36

개요

  • 스타일링 : Next.js에서 응용프로그램 스타일을 지정하는 다양한 방법.
  • 최적화 : 이미지, 링크 및 글꼴을 최적화하는 방법.
  • 라우팅 : 파일 시스템 라우팅을 사용하여 중첩 레이아웃 및 페이지를 만드는 방법
  • 데이터 가져오기 : Vercel에서 데이터베이스를 설정하는 방법 및 가져오기 및 스트리밍 모범 사례.
  • 검색 및 페이지 지정 : URL Search Params를 이용한 Search 및 Pagination 구현 방법
  • 데이터를 변형하는 중 : React Server Actions를 사용하여 데이터를 변경하고 Next.js 캐시를 다시 확인하는 방법.
  • 404 오류를 찾을 수 없습니다.
  • 양식 점증 및 접근성 : 서버 측 양식 검증 방법 및 접근성 향상을 위한 팁
  • 인증 : 및 미들웨어를 사용하여 응용프로그램에 인증을 추가하는 방법.
  • 메타데이터 : 메타데이터 추가 및 소셜 공유를 위한 애플리케이션 준비 방법.

Next.js 공식 홈페이지에서 제공하는 학습 코스를 활용하여 학습할 것입니다.

이 코스는 대부분의 코드가 이미 작성되어 있어, Next.js의 주요 기능을 학습하는데 집중할 수 있도록 구성되어 있습니다.

 

제공받은 폴더구조를 보면서 Next.js가 지향하는 코드 구조는 어떤지 생각해 봅니다.

 

/app 폴더에서 주로 작업하게 됩니다.

/app/lib  재사용 가능 유틸리티 기능 및 데이터 가져오기 기능과 같이 응용 프로그램에서 사용되는 기능이 포함되어 있습니다.

/app/ui 카드, 테이블, 양식 등 응용 프로그램에 대한 모든 UI 구성 요소가 포함되어 있습니다. 시간을 적양하기 위해 이렇게 구성 요소를 미리 지정했다고 합니다.

/public 이미지와 같은 응용 프로그램의 모든 정적 자산을 포함합니다.

/scripts 이후 장에서 데이터베이스를 채우는 데 사용할 시드 스크립트가 들어 있습니다.

next.config.js 는 애플리케이션의 root에 있습니다. 이러한 파일의 대부분은 다음을 사용하여 새 프로젝트를 시작할 때 생성되고 미리 구성됩니다. create-next-app를 이용하여 세팅할 수 있습니다.

 

CSS 스타일링

Tailwind

/app/layout.tsx 파일에 /app/ui 폴더 안의 global.css파일을 importing 시켜서 global style을 적용합니다.

 

Next.js에서는 TSX markup에서 유틸리티 클래스를 직접 빠르게 작성할 수 있도록 하여 개발 프로세스를 가속화하는 CSS 프레임 워크인 tailwind를 사용하는 걸 권장하는 것 같습니다.

create-next-app으로 새 프로젝트를 시작하면 Tailwind를 사용할지 묻는다고 합니다.

 

Tailwind의 장점

  1. 각 클래스는 각 요소에 단일 적용됩니다.
  2. 요소를 추가하거나 삭제해도 별도의 스타일 충돌이 없습니다.
  3. 애플리케이션 확장에 따라 CSS 번들의 크기가 증가하는 것에 대해 걱정할 필요가 없습니다.

CSS Modules

CSS Module을 사용하면 자동으로 고유 클래스 이름을 생성하여 CSS 구성 요소 범위를 지정할 수 있어 스타일 충돌에 대한 걱정이 없습니다.

// /app/page.tsx
import styles from '@/app/ui/home.module.css';
<div className={styles.shape} />;

 

clsx

클래스 이름을 쉽게 전환할 수 있는 라이브러리입니다.

https://github.com/lukeed/clsx

 

GitHub - lukeed/clsx: A tiny (239B) utility for constructing `className` strings conditionally.

A tiny (239B) utility for constructing `className` strings conditionally. - GitHub - lukeed/clsx: A tiny (239B) utility for constructing `className` strings conditionally.

github.com

설명서를 참고하기 위한 북마크입니다.

// /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',
        },
      )}
    >
    // ...
)}

status의 상태는 'pending' 또는 'paid'입니다. 이때 status의 값에 따라 스타일을 적용할 수 있는 것입니다.

 

다른 스타일링 방법

Next.js 애플리케이션의 스타일을 지정할 수 있는 방법은 앞에서 설명한 방법 외에도 다음과 같은 방법을 사용할 수 있습니다.

  • import 한 .css 과 .scss 파일들.
  • CSS-in-JS libraries : styled-jsx, styled-components, and emotion