iBetter Books
수정

Ch 01. 이 책에서 배운 것

한 걸음 물러서서 전체를 바라봅니다. 무엇을 배웠는지 정리하면, 앞으로 무엇을 더 배워야 하는지도 보입니다.

PART별 핵심 개념 정리

PART 주제 핵심 개념
PART 01 개발 환경 준비 Next.js 설치, 프로젝트 구조, App Router 기본
PART 02 렌더링 방식 SSR, CSR, SSG, ISR의 차이와 선택 기준
PART 03 라우팅과 레이아웃 파일 기반 라우팅, 중첩 레이아웃, 동적 라우트
PART 04 Server Components 서버/클라이언트 경계, "use client", 직렬화
PART 05 데이터 페칭 fetch, Server Actions, 캐싱과 재검증
PART 06 인증과 미들웨어 NextAuth.js, JWT, middleware.ts
PART 07 실전 프로젝트 풀스택 블로그 구현
PART 08 배포 Vercel, Docker, 성능 측정, 장애 대응

SSR/SSG/ISR/CSR 선택 기준 요약

가장 자주 받는 질문 중 하나입니다. "이 페이지는 어떤 방식으로 렌더링해야 하나요?"

렌더링 방식 의사결정 흐름도

Server Components 핵심 원칙

  1. 기본은 서버 컴포넌트: App Router에서 모든 컴포넌트는 기본적으로 Server Component입니다. 클라이언트 기능이 필요할 때만 "use client"를 추가합니다.

  2. 서버에서만 할 수 있는 것: 데이터베이스 직접 조회, 파일 시스템 접근, 비밀 키 사용. 이런 작업은 Server Component에서 합니다.

  3. 클라이언트에서만 할 수 있는 것: useState, useEffect, 브라우저 API, 이벤트 리스너. 이런 기능이 필요하면 "use client"를 선언합니다.

  4. 경계를 최대한 아래로: "use client" 경계는 가능한 컴포넌트 트리의 하단에 위치시킵니다. 큰 부모를 클라이언트 컴포넌트로 만들면 그 자식들도 모두 클라이언트 번들에 포함됩니다.

  5. 직렬화 규칙: Server Component에서 Client Component로 props를 전달할 때, 직렬화 가능한 값만 전달합니다. Date.toISOString()으로, 함수는 Server Actions로 전달합니다.

데이터 페칭 전략 요약

상황 방법
서버 컴포넌트에서 DB 조회 async 컴포넌트 + Prisma
외부 API 데이터 fetch + 캐싱 옵션
폼 제출, 데이터 변경 Server Actions
캐시 갱신 revalidateTag, revalidatePath
클라이언트에서 실시간 데이터 SWR, React Query
낙관적 UI 업데이트 useOptimistic

인증 아키텍처 정리

인증 아키텍처 흐름

중요한 점: 미들웨어만으로는 부족합니다. 데이터를 변경하는 Server Action에서도 반드시 권한을 확인합니다. 클라이언트는 항상 조작될 수 있습니다.

다음 챕터에서는 앞으로 어떤 것을 더 배우면 좋을지 안내합니다.