
/about → about.html
/profile → profile.html
UX가 저하됩니다.SPA ((Single Page Application))이 등장합니다.Javascript를 이용해 동적으로 페이지, 컴포넌트 등을 랜더링 하는 방식Client의 사이드에서 랜더링을 한다'라는 개념은 기존 프론트엔드 개발자들에게 획기적 방법으로 소개root라는 id를 가진 div만 다운로드 ⇒ javascript Bundle 을 통해 UI가 완성UX가 크게 향상 div만 불러오기 때문에 Javascript의 평가, 실행이 될 때까지 하얀 화면이 유저에게 노출됨Code Spilitting(Lazy-Loading) 방법 제시번들된 코드를 여러 코드로 나눠 당장 필요한 코드가 아니면 나중에 불러옴
import React from 'react';
import ReactDOM from 'react-dom';
function App() {
return <h1>Hello, Client Side Rendering!</h1>;
}
// index.js
ReactDOM.render(<App />, document.getElementById('root'));

// app router 버전은 본 예제에서 다룹니다.
// 아래 예제는 편하게 훑어보세요 :)
import React from 'react';
function HomePage({ data }) {
return <div>{data}</div>;
}
export async function getStaticProps() {
const res = await fetch('https://...'); // 외부 API 호출
const data = await res.json();
return { props: { data } };
}
export default HomePage;

import React from 'react';
function HomePage({ data }) {
return <div>{data}</div>;
}
export async function getStaticProps() {
const res = await fetch('https://...'); // 외부 API 호출
const data = await res.json();
return {
props: { data },
revalidate: 60, // 1초 후에 페이지 재생성
};
}
export default HomePage;

import React from 'react';
function HomePage({ data }) {
return <div>{data}</div>;
}
export async function getServerSideProps() {
const res = await fetch('https://...'); // 외부 API 호출
const data = await res.json();
return { props: { data } };
}
export default HomePage;
| 분류 | CSR | SSR | SSG | ISR |
|---|---|---|---|---|
| 빌드시간 | 짧다 | 짧다 | 길다 | 길다 |
| SEO | 나쁨 | 좋음 | 좋음 | 좋음 |
| 페이지 요청에 따른 응답 시간 | 보통 | 길다 | 짧다 | 짧다 |
| 최신 정보인가? | 맞음 | 맞음 | 아님 | 아닐 수 있음 |
🎉 TTV, TTI 그리고 Hydration
우리가 Next.js를 이해할 때는 위의 세가지 개념이 중요하다.
이 개념을 아는지 모르는 지에 따라서 렌더링 패턴을 이해하고 쓸 수 있느냐가 결정되기 때문.
웹 페이지가 사용자와 완전히 상호작용할 수 있는 상태가 될 때까지 걸리는 시간을 의미.
페이지가 로딩되고 나서 사용자 입력에 즉각 반응할 수 있는 시점까지의 시간을 측정하는 중요한 성능 지표.
TTI가 빠르면 사용자는 페이지가 빨리 반응한다고 느끼며, TTI가 느리면 페이지가 렌더링된 후에도 반응이 지연되는 것처럼 느껴진다.
TTI 최적화 방법
CSR
SSR
SSG, ISR도 SSR과 마찬가지로 hydration 과정이 존재.