https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-nextjs?srsltid=AfmBOop98SToIvyP4ZLiwetJfX_FMn0dbu097kRsUWsuX9BOUxCY1Ihi
위 내용을 바탕으로 강의를 수강하며 정리하였습니다.
App Router의 데이터 페칭
서버 컴포넌트라는 개념이 없고, 모든 컴포넌트가 전부 클라이언트 컴포넌트로써 동작함
▼ 개발자가 직접 아래와 같이 경우를 나누어 개발해야 했음
▼ App Router의 서버 컴포넌트 구조
vscode로 열기
vscode에서 .../onebite-next/ 폴더로 열기
터미널에서 section04 폴더 생성
vscode에서 /onebite-next/section04 폴더 생성
파일 옮기기
/onebite-next/section03 폴더에 있는 코드 중 아래 사진에 해당하는 코드만 선택하여 /onebite-next/section04 폴더로 옮기기
필요한 모듈 다운로드
생성된 /section04/ 폴더로 vscode에서 다시 열기
→ vscode 터미널을 열어서 npm i 명령어 실행
개발 모드로 넥스트 앱 실행
생성된 /section04/ 폴더로 vscode에서 다시 열기
→ vscode의 터미널 열기
→ npm run dev 명령어 실행
→ http://localhost:3000/ 로 이동하면 확인 가능
→ (종료 시에는) Ctrl+D나 Ctrl+C 입력
백엔드 서버 열기
vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start 명령어 실행
/src/app/(with-searchbar)/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section04/chapter01/src/app/(with-searchbar)/page.tsx
- 로직에 따라 컴포넌트를 분리해서 생성
API 주소를 환경 변수로써 등록한 후 필요한 파일에서 불러다가 쓰도록 수정: /section04/.env 코드 생성
NEXT_PUBLIC_API_SERVER_URL=http://localhost:12345 //NEXT_PUBLIC_ 접두사를 붙이지 않으면 Next.js가 자동으로 해당 환경 변수를 서버 측에서만 활용할 수 있게 프라이빗으로 설정해버림
/src/app/(with-searchbar)/search/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section04/chapter01/src/app/(with-searchbar)/search/page.tsx
/src/app/book/[id]/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section04/chapter01/src/book/[id]/page.tsx
fetch 메서드를 활용해 불러온 데이터를 next 서버에 보관하는 기능
영구적으로 데이터를 보관하거나 특정 시간을 주기로 갱신 시키는 것도 가능
불필요한 데이터 요청의 수를 줄여서 웹 서비스의 성능을 크게 개선할 수 있음
▼ 예시
fetch() 메서드를 필수로 사용해야만 가능함no-store 옵션
- next.js 15 버전 이상부터는 따로 설정해주지 않아도 기본값으로 no-store 옵션이 설정됨force-cache 옵션

revalidate 옵션


next tag 옵션
- On-Demand ISR과 같은 방식vscode로 section04 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 모드 서버 열기
vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start로 백엔드 서버 열기
no-store 옵션 설정해보기/src/app/(with-searchbar)/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section04/chapter02/src/app/(with-searchbar)/page.tsx
데이터 패칭이 발생할 때마다 로그 출력하도록 설정: /section04/next.config.mjs 코드 수정
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
logging: {fetches: {fullUrl: true,},},
};
export default nextConfig;
force-cache 옵션 설정해보기/src/app/(with-searchbar)/page.tsx 코드 수정revalidate 옵션 설정해보기/src/app/(with-searchbar)/page.tsx 코드 수정
"요청을 기억한다"
하나의 페이지를 서버 측에서 렌더링하는 과정에서, 레이아웃 컴포넌트나 페이지 컴포넌트처럼 하나의 페이지를 이루고 있는 여러 개의 컴포넌트에서 발생하는 다양한 API 요청들 중에 중복적으로 발생하는 요청들을 캐싱해서 단 한 번만 요청할 수 있도록 (중복된 요청을 다시 발송하지 않을 수 있도록) 자동으로 데이터 패칭을 최적화 해주는 기능
▼ 리퀘스트 메모이제이션 vs. 데이터 캐시
중복된 API 요청은 안 보내면 그만인데, 굳이 리퀘스트 메모이제이션 기능을 제공하는 이유는 뭘까?
→ App Router에서 React Server Component의 도입으로 데이터를 패칭하는 패턴이 변화했기 때문 = 서로 다른 컴포넌트에서 동일한 데이터를 필요로 하는 예외적인 경우가 생길 수밖에 없음
vscode로 section04 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 모드 서버 열기
vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start로 백엔드 서버 열기