Learn Next.js 챕터 1, 2
개요
- 스타일링 : 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의 장점
- 각 클래스는 각 요소에 단일 적용됩니다.
- 요소를 추가하거나 삭제해도 별도의 스타일 충돌이 없습니다.
- 애플리케이션 확장에 따라 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