Next.js란?
- React와 같은 Single Page Application에 SSR을 적용하기 위한 프레임워크
- 그 외에도 Code Splitting, Image Optimization, Pre-fetching 등을 지원한다.
- Next는 단순히 SPA를 SSR 방식으로 전환하는 것이 아닌, 부분적으로 적용하는 것.
첫 페이지 로딩만 SSR 방식으로 렌더링을 하고,
나머지는 CSR 방식을 사용한다면 두 장점을 모두 흡수할 수 있다.
CSR + (SSR 또는 SSG) 전략
Static-Site-Generation
HTML을 빌드 타임에 각 페이지별로 생성하고,
해당 페이지로 요청이 올 경우 이미 생성된 HTML 문서를 반환한다. (기본값)
SSG를 특정 데이터와 같이 해야하는 경우 getStaticProps 함수를 사용한다.
동적 경로를 사용하고 싶은 경우 getStaticPaths 함수를 사용한다.
빌드 시, JS 파일과 HTML이 미리 생성된다.
언제 쓰는가
- 성능이 중요한 경우 (CDN을 통해 더 빠른 응답)
- 정적으로 생성하여 각 요청에 동일한 문서를 반환할 수 있는 경우
(마케팅 페이지, 블로그 게시물, 제품의 목록 등)

Server-Side-Rendering
요청이 올 때마다 해당하는 HTML 문서를 그때 그때 생성하여 반환한다.
빌드 시, JS 파일만 있고 HTML은 없다.
언제 쓰는가
- 항상 최신 상태를 유지해야 하는 경우 (요청에 따라 응답 내용이 시시각각 변하는 경우)
- 요청마다 다른 내용 또는 형식의 HTML 문서가 반환되는 경우
(제품의 상세 페이지 / 분석 차트 등)

Client-Side-Rendering
만약 데이터의 변동이 매우 빈번하다면,
굳이 pre-rendering을 하지 말고 기존 React에서처럼 data-fetching을 통해 CSR에서 렌더링하라.
언제 쓰는가
- 데이터의 변동이 매우 빈번한 경우
- SEO 적용 또는 데이터 pre-rendering이 불필요한 경우
- 유저 페이지
개인적인 영역이면서 특정 유저에게 귀속되며,
외부 노출이 필요하거나 SEO를 적용할 필요가 거의 없다.
또한, 유저의 수정을 통해 즉각적으로 화면이 변동하는 페이지.
기타
CSR 방식
CSR 방식에서는 우선 빈 HTML 문서를 반환하고,
그 후 React로 코딩한 여러 컴포넌트들을 번들링하여 전달하며,
브라우저는 해당 js 파일을 전달받은 이후에 유저에게 보여줄 화면을 렌더링한다.
즉, CSR 방식에서는 번들링된 JS 파일을 전달 받아야 정상적인 렌더링이 가능하다.