Chapter 1 - 3

CHAPTER 1 - NEXT JS?
Next js는 서버 사이드 렌더링 페이지나 정적으로 생성된 페이지 모두 nodejs에서 실행되기 때문에
fetch, window, document 같은 웹 브라우저 자체 제공 객체나 canvas 같은 html 요소에 접근할 수 없음 .
(대신 node에서 사용가능한 라이브러리나 api를 사용하려는 경우 서버 사이드 코드를 통해 코드를 처리하는 방식으로 지원함)
Next js는 필요에 따라 클라이언트 컴포넌트를 만들수도 서버 사이드 컴포넌트를 만들 수도 있다.Next js는 웹팩을 사용해 번들화를 시키기 때문에 SASS나 전처리기를 사용하는 CSS 프레임 워크들은 웹팩설정이 추가적으로 필요하다. (ex .emotion): SSR을 지원하는 다른 프레임 워크
이 프레임워크는 정적 사이트 생성만 지원하지만 기능 좋음
단, 동적 서버 사이드 렌더링을 지원하지않음 .
Vue js 기반 프레임워크
설정 파일에서 레이아웃, 전역 플러그인, 컴포넌트 , 라우트 등을 지정할 수 있음 .
(Next는 React와 설정을 동일하게 들고감)
Angular 기반 프레임워크 (구글에서 만들었다.)
CHAPTER 2 - 렌더링 전략
getServerSideProps()1. useEffect, useState를 사용한 CSR 이용

2. process.browser 변수를 활용하는 방법 || typeof window
SSG 장점
SSG 단점
증분 정적 재생성 (ISR)
getStaticProps 함수는 데이터를 특정 주기 기준으로 캐싱해둠으로써 동적 제공이 필요한 정적페이지를 만들 수 있도록 도와준다.정리
- 페이지를 빌드 시점에 정적 페이지로 만들지 (ssg)
- 페이지 요청 시점에 만들지(ssr)를 정할 수 있다.
- ssg와 isr 기법을 사용하면 ssr과 ssg를 함께 사용할 수 있다.
CHAPTER 3 - Next js 내장 컴포넌트
Next js는 SSR만 제공하는 프레임워크가 아니다.
SSR 이외의 내장 컴포넌트와 함수를 제공해 성능이 뛰어난 동적 웹 사이트를 쉽게 만들 수 있습니다 .
ex . 라우팅 시스템, 네비게이션, 이미지 최적화, 메타데이터 처리 등
React Router 같은 것들은 클라이언트 라우팅만 구현할 수 있다 .
서버 사이드 렌더링은 개입하지 않습니다.
Next js는 파일시스템 기반 페이지 라우팅을 사용한다.
[slug]는 경로 매개변수로 사용자가 브라우저 주소창에 입력하는 모든 값을 가질 수 있다.
동적 라우팅 규칙 : 디렉토리 안에 [slug].js 파일을 생성한다.
getServerSideProps({params}) 에서 params로
리액트 훅은 리액트 상태나 함수형 컴포의 라이프 사이클을 다룰 수 있다.
클라이언트에서 네비게이션 처리함 a 태그를 이용한 네비게이션 처리
Link는 미리 페이지를 불러올 수 있다. (preload를 통해 조작가능)

a, Link 와 달리 router.push를 통해서도 네비게이션 기능 가능
router.push는 네비 구현에 사용하기보다는 이벤트나 특정 상황이 발생했을 때만 사용하는 것이 좋다.
/Public 디렉토리 안에 있는 파일들을 의미한다. (css나 js 같은 동적 파일 제외)
특정 정적 파일들은 seo에 영향을 미침
최적화되지않은 이미지 (누적 레이아웃 이동 = cls현상 발생)
이미지 로딩 전후의 ux가 다름
(단 next.config.js 파일에 설정을 추가해야함)


config 파일에 loader 추가해서 사용 (ex. akamai, imgix, cloudinary)
단 , vercel로 배포하는 경우는 loader가 필요없다.
주의점
별도 이미지 최적화 서버를 이용하면 고유 api가 있기 때문에 주의 해야함
Head 컴포넌트를 통해 메타데이터를 동적으로 다룰수 있게 해준다.
__app.js
공통 레이아웃 처리 , 페이지 컴포넌트 렌더링 수정 가능
__document.js
html 태그 커스터마이징 (html, head, main, nextscript) 네가지는 필수