https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-nextjs?srsltid=AfmBOop98SToIvyP4ZLiwetJfX_FMn0dbu097kRsUWsuX9BOUxCY1Ihi
위 내용을 바탕으로 강의를 수강하며 정리하였습니다.
Next.js 앱에서 백엔드 서버로부터 데이터를 불러오는 것
리액트 앱에서는...
1. 불러온 데이터를 보관할 State 생성
2. 데이터 페칭 함수 생성
3. 컴포넌트 마운트 시점에 fetchData 호출
4. 데이터 로딩중일 때의 예외 처리
▼ 백엔드 서버로부터 현재 페이지에 필요한 데이터를 미리 불러오도록 설정 가능
▼ React App의 데이터 페칭 vs. Next App의 데이터 페칭
Next.js에서 제공하는 사전 렌더링 방식
가장 기본적인 사전 렌더링 방식
요청이 들어올 때마다 사전 렌더링 진행 → 페이지 내부의 데이터를 항상 최신으로 유지 가능
데이터 요청이 늦어질 경우 그 뒤에 동작하는 모든 과정도 같이 느려짐
SSR 공식 문서
https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering
section02 폴더 열기npm run dev로 서버 열기/src/pages/index.tsx 페이지가 SSR 방식으로 동작하도록 코드 수정
index.tsx의 Home() 컴포넌트보다 먼저 실행되어 컴포넌트에 필요한 데이터를 불러오는 함수 정의props라는 객체 프로퍼티를 포함하는 단 하나의 객체여야만 함console.log() 함수가 있어도 vscode의 터미널에서만 확인 가능props 데이터를 전달 받는 페이지 컴포넌트의 props 타입은 어떻게 정의해야 하지?InferGetServerSidePropsType이라는 Next.js에서 제공하는 내장 타입서버에서 window.location을 실행하면?
window가 Undefined가 되어버려서, 결국 Undefined.location을 호출하는 게 되어버림브라우저 측에서만 실행되는 코드 작성을 하고 싶다면?
useEffect를 이용하는 것
다시 듣기
vscode로 section02 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 서버 열기
vscode로 onebite-books-server 폴더 열기
→ vscode 터미널을 열어서 npm run start로 백엔드 서버 열기
/src/lib/ 폴더 새로 생성/src/lib/fetch-books.ts 코드 생성src/lib/fetch-random-books.ts 코드 생성/src/pages/index.tsx 코드 수정/src/lib/fetch-one-books.ts 코드 생성
SSR 방식의 단점을 해결하는 새로운 사전 렌더링 방식
명령어로 빌드할 때, 즉 빌드 타임에 미리 페이지를 사전 렌더링 → 페이지를 딱 한 번만 생성
사전 렌더링에 많은 시간이 소요되는 페이지이더라도 사용자의 요청에는 매우 빠른 속도로 응답 가능
빌드 타임 이후에는 페이지를 새롭게 사전 렌더링 하지 않기 때문에, 최신 데이터를 반영하기에는 어려움 → 정적 페이지에 적합
vscode로 section02 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 서버 열기
vscode로 onebite-books-server 폴더 열기
→ vscode 터미널을 열어서 npm run start로 백엔드 서버 열기
/src/pages/index.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter14/src/pages/index.tsx
개발 서버를 열었을 경우, 수정이 있을 때마다 사전 렌더링 방식에 상관 없이 바로바로 다시 사전 렌더링 진행
→ 프로덕션 서버에서 열어서 확인 가능
→ 따로 사전 렌더링 방식을 설정하지 않았을 경우 SSG 방식으로 자동으로 실행
/src/pages/search/index.tsx 코드 수정
SSG 방식에는 쿼리 스트링 값을 꺼내오는 방법은 사용 불가능 (= 검색 결과를 서버로부터 불러오는 동작은 수행 불가)
→ useEffect()를 통해 백엔드에 직접 요청해서 사용 가능
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter14/src/pages/search/index.tsx
vscode로 section02 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 서버 열기
vscode로 onebite-books-server 폴더 열기
→ vscode 터미널을 열어서 npm run start로 백엔드 서버 열기
/src/pages/book/[id].tsx 코드 수정
동적 경로를 가진 페이지를 Next.js 서버 측에서 빌드타임에 SSG 방식으로 사전 렌더링하여 미리 생성해두기 위해서는...
선수 과정으로 해당 페이지에 어떠한 URL 파라미터들이 존재할 수 있는지, 그러므로 어떤 경로들이 존재할 수 있는지 설명하는 과정이 필수적으로 요구됨

강의 다시 듣고 정리
증분 정적 재생성 방식
ISR 공식 문서
https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering
vscode로 section02 폴더 열기
→ vscode 터미널을 열어서 npm run start로 프로덕션 서버 열기
vscode로 onebite-books-server 폴더 열기
→ vscode 터미널을 열어서 npm run start로 백엔드 서버 열기
/src/pages/index.tsx 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter17/src/pages/index.tsx
ISR의 한계
주문형 재 검증

vscode로 section02 폴더 열기
→ vscode 터미널을 열어서 npm run start로 프로덕션 서버 열기
vscode로 onebite-books-server 폴더 열기
→ vscode 터미널을 열어서 npm run start로 백엔드 서버 열기
/src/pages/index.tsx 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter18/src/pages/index.tsx
지금까지 제작한 한입북스 서비스를 실제로 배포하기 위해, 사전 준비 단계로 페이지 별로 다양한 메타 태그들을 설정해서 아주 기본적인 SEO를 설정하기
= 아주 기본적인 검색엔진 최적화
수업 자료로 올려주신 파일 다운로드 후 압축 해제
→ 썸네일 파일과 파비콘 파일을 /public/ 폴더 아래에 삽입
https://github.com/onebite-nextjs/vod__onebite-next-codes/tree/main/section02/chapter19/public
vscode로 section02 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 서버 열기
/src/pages/index.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter19/src/pages/index.tsx
/src/pages/search/index.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter19/src/pages/search/index.tsx
/src/pages/book/[id].tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section02/chapter19/src/pages/book/[id].tsx
페이지가 로딩 중인 상황이라도(fallback 상태일 지라도) 기본적인 메타 태그들은 설정되도록 코드를 짜야 함
나는 코드 다시 수정해서 재시도 해보기...
프론트엔드 어플리케이션을 배포할 때는 클라우드 서비스를 통해 배포하는 경우가 많음
→ 파이어베이스, 넷니파이 등등...
Next.js는 보통 Vercel을 통해 배포함
npm install -g vercel 실행vercel 명령어 입력y 입력n 입력onebite-books-page로 입력n 입력n 입력/onebite-books-server/로 새 창을 하나 열어서 vscode 터미널을 새로 열기vercel 입력y 입력n 입력src/lib/ 아래에 있는 fetch 파일에 각각 백엔드 서버로부터 데이터를 불러오는 함수의 url을 수정section2/를 기준으로 폴더 열고 터미널 열기vercel --prod 명령어 실행
파일 시스템 기반의 간편한 페이지 라우팅 제공

다양한 방식의 사전 렌더링 제공
페이지별 레이아웃 설정이 번거롭다
데이터 페칭이 데이터 컴포넌트에 집중된다
불필요한 컴포넌트들도 JS Bundle에 포함된다