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) 네가지는 필수