Next.js
Next.js๋ ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ์น ํ๋ ์์ํฌ๋ก, ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ ์ง์ํ๋ค.
๋ผ์ฐํ ๋ฐฉ์
- ํ์ด์ง ๋ผ์ฐํ
(Page routing):
pages
๋๋ ํ ๋ฆฌ ํ์์ ์๋ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ URL ๊ฒฝ๋ก๋ก ๋งคํํ๋ ๋ผ์ฐํ ๋ฐฉ์์ด๋ค. - ์ฑ ๋ผ์ฐํ (App routing): ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ, ์คํธ๋ฆฌ๋ฐ ๋ฑ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๋ก์ด ๋ผ์ฐํ ๋ฐฉ์์ด๋ค.
๋ ๋๋ง ๋ฐฉ์
SSR (Server-Side Rendering)
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ํ์ด์ง๋ฅผ ๋งค๋ฒ ์๋กญ๊ฒ ์์ฑํด ์์ฑ๋ HTML์ ์๋ตํ๋ ์ฌ์ ๋ ๋๋ง ๋ฐฉ์์ด๋ค. ์ต์ ๋ฐ์ดํฐ์ ๋ฐ์์ด ์ค์ํ ํ์ด์ง์ ์ ํฉํ์ง๋ง, ๋งค ์์ฒญ๋ง๋ค ํ์ด์ง๋ฅผ ์๋กญ๊ฒ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ๋ถํ๋ฅผ ์ ๋ฐํ๊ฑฐ๋ ์๋ต ์๋๊ฐ ๋ฆ์ด์ง ์ ์๋ค.
SSR์ ์ ์ฉํ๋ ค๋ฉด ํ์ด์ง ์ปดํฌ๋ํธ์์ getServerSideProps
ํจ์๋ฅผ ์ ์ธํ๊ณ ๋ด๋ณด๋ด๋ฉด ๋๋ค. getServerSideProps
ํจ์๋ ์ฌ์ ๋ ๋๋ง์์ ํ์ด์ง ์ปดํฌ๋ํธ๋ณด๋ค ๋จผ์ ์คํ๋์ด ์๋ฒ์์ ํ์ด์ง ์ปดํฌ๋ํธ์ ํ์ํ ๋ก์ง์ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์ง ์ปดํฌ๋ํธ์ ํ๋กํผํฐ๋ก ์ ๋ฌํ๋ค.
export function getServerSideProps() {
const data = "Hello, world!";
return { props: { data } };
}
export default function Home({ data }) {
console.log(data); // "Hello, world!"
return (...);
}
SSG (Static Site Generation)
์ ์ ์ฌ์ดํธ ์์ฑ์ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ ์์ฑ๋ HTML์ ์์ฑํด๋๋ ์ฌ์ ๋ ๋๋ง ๋ฐฉ์์ด๋ค. ๋ฐํ์์์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ผ๋ฉด ๋น๋ ํ์์ ๋ฏธ๋ฆฌ ์์ฑํด๋ HTML์ ์๋ตํ๊ธฐ ๋๋ฌธ์ ์ง์ฐ์์ด ์๋ตํ ์ ์๋ค. ๋ค๋ง, ๋์ค์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๋๋๋ผ๋ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ ์์ฑํด๋ HTML์ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์, ์ต์ ๋ฐ์ดํฐ์ ๋ฐ์์ด ์ค์ํ ํ์ด์ง์๋ ์ ํฉํ์ง ์๋ค. ๋ง์ฝ SSG ๋ฐฉ์์ผ๋ก ํ์ด์ง๋ฅผ ์์ฑํ ๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด ์ ๋ฐ์ดํธํด์ผ ํ๋ค.
SSG๋ฅผ ์ ์ฉํ๋ ค๋ฉด ํ์ด์ง ์ปดํฌ๋ํธ์์ getStaticProps
ํจ์๋ฅผ ์ ์ธํ๊ณ ๋ด๋ณด๋ด๋ฉด ๋๋ค. getStaticProps
ํจ์๋ ๋น๋ ํ์์ ์คํ๋์ด ํ์ด์ง ์ปดํฌ๋ํธ์ ํ์ํ ๋ก์ง์ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์ง ์ปดํฌ๋ํธ์ ํ๋กํผํฐ๋ก ์ ๋ฌํ๋ค.
export function getStaticProps() {
const data = "Hello, world!";
return { props: { data } };
}
export default function Home({ data }) {
console.log(data); // "Hello, world!"
return (...);
}
๊ฐ๋ฐ ๋ชจ๋์์๋ ์ฝ๋ ์์ ์ฌํญ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๊ธฐ ์ํด SSG ๋ฐฉ์์์๋ ์ ์ ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ํ์ด์ง๋ฅผ ๋งค๋ฒ ์๋กญ๊ฒ ์์ฑํ๋ค.
ISR (Incremental Static Regeneration)
์ฆ๋ถ ์ ์ ์ฌ์์ฑ์ SSG ๋ฐฉ์์ผ๋ก ๋น๋ ํ์์ ์์ฑํ ์ ์ ํ์ด์ง๋ฅผ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ๋ค์ ์์ฑํด ์ต์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋ ๋ ๋๋ง ๋ฐฉ์์ด๋ค. ์ผ์ ์๊ฐ์ด ์ง๋๊ธฐ ์ ๊น์ง๋ ๋น๋ ํ์์ ์์ฑํด ์บ์ํด๋ HTML์ ์๋ตํ๊ณ , ์๊ฐ์ด ์ง๋ ์บ์๊ฐ ๋ง๋ฃ๋๋ฉด, ๋ง๋ฃ๋ HTML์ ์๋ตํ๋ ๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ HTML์ ์์ฑํด ์บ์ํ๋ค. ๋น ๋ฅธ ์๋ต๊ณผ ์ต์ ๋ฐ์ดํฐ์ ๋ฐ์์ ๋์์ ๋ฌ์ฑํ ์ ์๋ ๋ฐฉ์์ด๋ค.
ISR์ ์ฌ์ฉํ๋ ค๋ฉด ํ์ด์ง ์ปดํฌ๋ํธ์์ getStaticProps
ํจ์์ revalidate
์ต์
์ ์ค์ ํ๋ฉด ๋๋ค. revalidate
์ต์
์ ํ์ด์ง๊ฐ ์บ์๋ ํ ๋ค์ ์์ฑ๋๊ธฐ๊น์ง์ ์๊ฐ์ ์ด ๋จ์๋ก ์ง์ ํ๋ค.
export function getStaticProps() {
const data = "Hello, world!";
return { props: { data }, revalidate: 10 }; // 10์ด๋ง๋ค ์ฌ์์ฑ
}
export default function Home({ data }) {
console.log(data); // "Hello, world!"
return (...);
}
ISR์ ๋ฐ์ดํฐ์ ๊ฐฑ์ ์์ ์ ์์ธกํ๊ธฐ ์ด๋ ต๋ค. ๋ง์ฝ revalidate
์ฃผ๊ธฐ๊ฐ 60์ด๋ผ๋ฉด, ์ฌ์ฉ์๋ ์ต๋ 60์ด ๋์์ ๋ง๋ฃ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ฒ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ ๋๋ง ๋ฐฉ์์ด ์ฃผ๋ฌธํ ์ฌ์์ฑ(On-demand ISR)์ผ๋ก, ์ผ์ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ํ์ด์ง๋ฅผ ์ฌ์์ฑํ๋ ๋์ API๋ฅผ ํตํด ํ์ด์ง๋ฅผ ์ฌ์์ฑํ ์ ์๋ค.