next js 렌더링 이해를 위한 핵심 개념
1. SSG (Static Site Generation)
특징
1. 빌드 시점에 정적 페이지 생성 = 빌드 타임에 한 번 생성, 그 이후에는 재생성하지 않음
2. 빠른 초기 로딩 속도 = html이 미리 생성되어 있기 때문
3. cdn 활용 가능 = 정적 파일 cdn 배포해 전 세계 어디서든 빠르게 접근 가능
(아무 옵션도 주지 않음)
용도
변하지 않는 데이터 = 블로그, 마케팅 페이지, 문서 등 변동 없는 콘텐츠에 적합
// src/pages/index.js
export async function getStaticProps() {
// 빌드 시점에 데이터를 가져옴
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return { props: { data } };
}
export default function Home({ data }) {
// 정적 페이지에 데이터를 렌더링
return (
<div>
<h1>Static Site Generation</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
2. ISR (Incremental Static Regeneration)
특징
1. 주기적으로 정적 페이지 재생성 = 일정 시간마다 페이지 재생성해 최신 데이터 반영
2. 초기 로딩 속도 빠름 = 정적 페이지 제공하므로
3. seo에 유리 = 정적 페이지 제공하므로 seo에 유리
4. 데이터 업데이트 가능
(가끔 한번씩만 갱신하라는 옵션 줌)
용도
가끔씩 업데이트 되는 데이터 = 브로그 게시물, 뉴스 기사 등 정기적으로 업데이트 되는 콘텐츠에 적합
// src/pages/index.js
export async function getStaticProps() {
// 빌드 시점에 데이터를 가져옴
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return {
props: { data },
revalidate: 60, // 60초마다 페이지 재생성
};
}
export default function Home({ data }) {
// 정적 페이지에 데이터를 렌더링
return (
<div>
<h1>Incremental Static Regeneration</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
3. SSR (Server Side Rendering)
특징
1. 요청 시마다 페이지 생성 = 클라이언트 요청이 있을 때마다 서버에서 html 페이지를 생성하여 응답
2. 최신 데이터 제공
3. seo에 유리 = 서버에서 렌더링된 html을 제공하므로
4. 초기 로딩 속도 느림 = 요청 시마다 서버에서 페이지를 생성하므로
(매번 갱신하라는 옵션 줌)
용도
실시간으로 변하는 데이터 = 사용자 개인화 페이지, 대시보드 등 실시간 데이터가 중요한 페이지에 적합
// src/pages/index.js
export async function getServerSideProps() {
// 요청 시마다 데이터를 가져옴
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return { props: { data } };
}
export default function Home({ data }) {
// 서버에서 가져온 데이터를 렌더링
return (
<div>
<h1>Server Side Rendering</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
4. CSR (Client Side Rendering)
특징
1. 브라우저에서 페이지 렌더링 = 모든 렌더링이 클라이언트 측에서 이루어짐
2. 초기 로딩 속도 느림 = 클라이언트에서 자바스크립트 다운, 실행해야 하므로
3. 서버 부하 감소
4. seo에 불리 = 초기 html이 비어 있을 수 있음
용도
사용자와의 상호작용이 많은 페이지 = 대시보드, 애플리케이션 인터페이스 등 클라이언트 측 상호작용이 중요한 경우에 적합
// src/pages/index.js
import { useEffect, useState } from 'react';
export default function Home() {
const [data, setData] = useState(null);
useEffect(() => {
// 클라이언트 측에서 데이터를 가져옴
fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => setData(data));
}, []);
return (
<div>
<h1>Client Side Rendering</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
'TIL' 카테고리의 다른 글
CORS 정리 (0) | 2024.08.05 |
---|---|
24. 08. 01 TIL (0) | 2024.08.01 |
인증, 인가 (0) | 2024.07.30 |
zustand 사용하기 2 (0) | 2024.07.29 |
24. 07. 26 TIL (0) | 2024.07.26 |