๐ค Next.js๋ ๋ฌด์์ธ๊ฐ?
- React๋ฅผ ์ํด ๋ง๋ ์คํ์์ค JS ์น ํ๋ ์์ํฌ
- SSR, SSG, ISR๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค.
- ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๋ณด์๊ฐ ์ฌ์ด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
๐๏ธ Next.js์ ํ์ ๋ฐฐ๊ฒฝ
- ๊ณผ๊ฑฐ์ ์น ํ์ด์ง๋ค์ ๋๋ถ๋ถ SSR ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ผ๋ฉฐ ํ์ด์ง๊ฐ ์ฌ๋ฌ ๊ฐ๋ก ๊ตฌ์ฑ๋ Multi-page-form์ ์ฌ์ฉํ๋ค.
- ํ์ง๋ง ์ค๋งํธํฐ์ ๋ฑ์ฅ์ผ๋ก, ๋ชจ๋ฐ์ผ์ ์ต์ ํ๋ ํํ์ ์น ํ์ด์ง์ ํ์์ฑ์ด ๋๋๋์๋ค.
CSR์ด ๊ฐ๋ฅํ SPA์ ๋ฑ์ฅ!
- SPA๋ ๊ธฐ์กด์ ์น ํ์ด์ง์๋ ๋ค๋ฅด๊ฒ ํ ๊ฐ์ ํ์ด์ง์์ ์ฌ๋ฌ ๋์์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- SPA๋ฅผ ์ง์ํ๋ React, Angular, Vue์ ๊ฐ์ ์ต์ JS ํ๋ ์์ํฌ๋ค์ ๋ฑ์ฅ์ผ๋ก ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๋ถ์ผ๋ ๋ณํ์ ๊ธ๋ฌผ์ด์ ํ๊ธฐ ์์ํ๋ค.
- ๊ทธ ์ค์์๋ React๋ ์น, ์ฑ, ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐ, VR ๊ตฌํ ๋ฑ ๋ค์ํ ๋ชฉ์ ์ผ๋ก์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ฌ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์๋ค.
ํ์ง๋ง
React๋ ๊ธฐ๋ณธ์ ์ผ๋ก Client-Side์์๋ง ์๋ํ๋ค๋ ๋ฌธ์ ์ ์ด ์์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก React๋ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์์๋ง ์คํ(CSR)๋๋ฏ๋ก React๋ฅผ ์ฌ์ฉํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ SEO์ ํจ๊ณผ๋ฅผ ๋ณด๊ธฐ ์ด๋ ต๋ค.
- ์ฒซ ํ๋ฉด์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋๋ก ํํํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์คํ ์ด๊ธฐ์ ์ฑ๋ฅ ๋ถ๋ด์ด ์๊ธด๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ฒด ์น ์ฑ ๋ฒ๋ค ๋ค์ด๋ก๋ โก๏ธ ๋ค์ด๋ก๋ํ ๋ด์ฉ ๋ถ์ โก๏ธ ์ฝ๋ ์คํ โก๏ธ ๊ฒฐ๊ณผ ๋์ถํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
- ์์ฃผ ํฐ ์น ์ฑ์ ๊ฒฝ์ฐ ์ฒซ ํ๋ฉด ๋ ๋๋ง์ ์ ์ด๊ฐ ์์๋๊ธฐ๋ ํ๋ค.
- ๋ฌผ๋ก React์์ SSR์ ๊ตฌํ์ด ์์ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋์ง๋ง, ๊ต์ฅํ ๋ณต์กํ ๊ณผ์ ์ ํ์๋ก ํ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Next.js๊ฐ ํ์ํ๊ฒ ๋์๋ค.
- ์น ์ฑ์ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ ๋๋งํด๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ฐ๊ตฌ์ ๊ฒฐ๊ณผ๋ก, Vercel์ด Next.js๋ฅผ ๋ง๋ค์๋ค.
๐ง React๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Next.js์์ ์ด๋ป๊ฒ SSR์ ๊ตฌํํ ์ ์์๊น?
๐ Next.js์ ์๋ ์๋ฆฌ
- ์ฌ์ฉ์๊ฐ ์ฒ์ ์๋ฒ์ ํ์ด์ง ์ ์์ ์์ฒญํ๋ฉด, SSR ๋ฐฉ์์ผ๋ก ๋ ๋๋ง ๋ HTML ์ ์ก
- ๋ธ๋ผ์ฐ์ ์์ JS ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ , React๋ฅผ ์คํ
- ์ฌ์ฉ์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก ์ํธ์์ฉํ๋ฉฐ, ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ ์ ์๋ฒ๊ฐ ์๋ CSR์ ๋ฐฉ์์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ ์ฒ๋ฆฌ
๐ค Next.js, ์ ์ฌ์ฉํ ๊น?
๐ Next.js์์์ ๊ฒ์ ์์ง ์ต์ ํ (SEO)
- Next.js๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ์ค ํ๋๊ฐ SSR์ ๊ตฌํ์ด๊ณ , SSR์ SEO์ ์ค์ํ ์ญํ ์ ํ๋ค.
- ์ฆ, SEO๊ฐ Next.js๋ฅผ ์ฌ์ฉํ๋ ํฐ ์ด์ ๋ผ๊ณ ๋ณผ ์ ์๋ค.
๐ง SEO, ์ ํ์ํ๊ฐ!
- ๋จ์ ๋ธ๋ก๊ทธ ํฌ์คํ
๋ถํฐ ๋๊ท๋ชจ ์จ๋ผ์ธ ์ผํ๋ชฐ๊น์ง, ํ์ด์ง๋ฅผ ์ด์ฌํ ๋ง๋ ๋ค๊ณ ํด๋ ์ฌ์ฉํ๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ฌด์ฉ์ง๋ฌผ์ผ ๊ฒ์ด๋ค.
- ๋ธ๋ผ์ฐ์ ์ ํ์ด์ง์ ๋
ธ์ถ ๋น๋๋ฅผ ๋์ฌ์ผ ์ฌ์ฉ์ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ๋ ๋ง์ ์์ต ์ฐฝ์ถ์ ๊ธฐ๋ํ ์ ์๋ค.
- ์ฆ, ์๋น์ค๋ ๋ง์ผํ
์ ์ธ ์ธก๋ฉด์์ ๊ฒ์ ์์ง์ ๋ํ ์ต์ ํ๋ฅผ ํ ์ ์๋ SEO๋ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ด๋ค.
๐ง SEO, ์ SSR์์ ๋ ์ ์๋ํ๋!
- ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋งํ ๋, ๊ฒ์ ์์ง ๋ด๋ค์ JS ํ์ผ์ ํด์ํ ์ ์์ด HTML ํ์ผ์์ ํฌ๋กค๋ง์ ํ๊ฒ ๋๋ค.
- ํฌ๋กค๋ง: ์น ํ์ด์ง๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด๋ด๋ ํ์
- CSR ๋ฐฉ์์ ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ ๊น์ง HTML์ ์๋ฌด ๊ฒ๋ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์๊ณ , ์ด ๋๋ฌธ์ ๊ฒ์ ์์ง์ ๋
ธ์ถ์ด ์ด๋ ค์์ง๋ค.
- SSR ๋ฐฉ์์ ์๋ฒ ์ธก์์ ํ๋ฉด์ ๊ทธ๋ ค์ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ HTML ์์ ์ด๋ฏธ ์ปจํ
์ธ ๋ค์ ํฌํจํ๊ณ ์๋ ์ํ์ด๋ฏ๋ก, ํฌ๋กค๋ฌ ๋ด๋ค์ ๋ฐ์ดํฐ ์์ง์ด ์ฉ์ดํด์ง๋ค.
๐ง ๊ทธ๋ ๋ค๋ฉด Next.js๋ ์ ์ข์๊ฑฐ์ง?
- Next.js๋ ์ฌ์ฉ์์ ์ ์ ์์ฒญ์ ๋ฐ์ผ๋ฉด, ์๋ฒ์์ ์ด๊ธฐ์ SSR ๋ฐฉ์์ผ๋ก ๋ ๋๋ง ๋ HTML์ ๋ณด๋ด๊ณ , ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋ฅผ JS ํ์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ์ React์์ ์คํํ๊ธฐ ๋๋ฌธ์ SEO์ ์ํํ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ด์ ๋ง๋ถ์ฌ ํ์ด์ง ์ด๋ ์์๋ CSR์ ๋ฐฉ์์ผ๋ก, ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก SPA๋ก์์ ์ฅ์ ๋ ์ ์งํ ์ ์๋ค!
๐พ Next.js์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค
์ฝ๋ ๋ถํ
- ์ผ๋ฐ์ ์ธ React SPA์์๋ ์ด๊ธฐ ๋ ๋๋ง ์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ด๋ ค๋ฐ๋๋ค.
- ์ด๋ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ , ์ฉ๋์ด ์ปค์ง๋ฉด ๋ก๋ฉ ์๋๊ฐ ์ง์ฐ๋๋ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
- Next.js๋ ํ์์ ๋ฐ๋ผ ํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ์ฌ๋ฌ ๊ฐ๋ก ํ์ผ์ ๋ถ๋ฆฌํ๋ ์ฝ๋ ๋ถํ ์ ํตํด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ์๋ค.
- ๋ค์ ๋งํด, Next.js๋ ์น ํ์ด์ง์ ์ฒซ ํ๋ฉด ๋ก๋ฉ ์ JS payload ๋ฒ๋ค ๋ฉ์ด๋ฆฌ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ์กฐ๊ฐ๋ด์ฌ ์ฒ์์ ๊ฐ์ฅ ํ์ํ ๋ถ๋ถ๋ง ์ ์กํด์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ์ด๋ฅผ ํตํด ์ดํ๋ฆฌ์ผ์ด์
๋ก๋ฉ ํ์์ ์ค์ผ ์ ์๋ค.
- webpack, parcel ๋ฑ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ์์๋ ์ง์ํ๊ณ ์๋ ๊ธฐ๋ฅ์ด์ง๋ง
next.js ์ฌ์ฉ ์ ๋ณ๋์ ์ค์ ์ด ์๋๋ผ๋ ์๋์ผ๋ก ํ๋ก์ ํธ์ ์ ์ฉ๋๋ค.
- dynamic import๋ฅผ ํตํด ๋ชจ๋์ด ํธ์ถ๋ ๋๋ง ํด๋น ๋ชจ๋์ด import ๋๊ฒ ํ๋ค.
(์ด๋ฏธ์ง ์ถ์ฒ)
- ์์ ์์ ์ด๋ฏธ์ง์์, pages ํด๋ ์์๋ ๊ฐ page์ ๋ํ ๋ผ์ฐํธ๊ฐ ๋ค์ด๊ฐ๋ค.
- components ํด๋์๋ React ์ปดํฌ๋ํธ๋ค์ด ๋ค์ด๊ฐ๋ค.
- ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ๋๊ณ ์ฌ์ฉ์๊ฐ ์ฒ์ ํ์ด์ง์ ์ ์ํ๋ ์ํฉ์์๋ index page๋ง, ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ ์ ํด๋น ํ์ด์ง๋ง ๋ถ๋ฌ์ค๊ฒ ํ ์ ์๋ค.
pre-reloading
- Next.js๋ pre-rendering์ ํตํด ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ๋ ๋๋ง๋ ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ด๋ฅผ ํตํด UX๋ฅผ ๊ฐ์ ํ๊ณ , SEO์๋ ํนํ๋ ์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๋ค๋ฅธ ๋ฌธ์์์ ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ์ง๋ง, SSR, SSG๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ์ฌ์ง์ด๋ SSR๊ณผ CSR์ ํผํฉ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ผํ๋ค.
Next.js์์์ SSR, SSG ์์ธํ ์์๋ณด๊ธฐ
Next.js์์์ CSR ์์ธํ ์์๋ณด๊ธฐ
ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
- ์ง๊ด์ ์ธ ํ์ด์ง ๊ธฐ๋ฐ ๋ผ์ฐํ
์์คํ
์ ์ ๊ณตํ๋ค.
- ํ๋ก์ ํธ์ ๊ฐ์ฅ ๋ฐ๊นฅ ํด๋์์ ์ปดํฌ๋ํธ export ์ ํด๋๋ช
์ด ํ์ด์ง์ route๊ฐ ๋๋ค.
- ์_1:
/pages/index.tsx
โก๏ธ /
- ์_2:
/pages/components/buttons
โก๏ธ /components/buttons
- dynamic route๋ฅผ ์ง์ํ๋ค.
Next.js์ ๋ผ์ฐํ
์์คํ
์์ธํ ์์๋ณด๊ธฐ
๊ทธ ์ธ์ ์ฅ์ ๋ค
TS์ ๋ํ ๊ธฐ๋ณธ ์ง์, ์๋ polyfill ์ ์ฉ, ์ด๋ฏธ์ง ์ต์ ํ, ์ฑ๋ฅ ๋ถ์
built-in-css, fast refresh, API routes ๋ฑ๋ฑ.
๐ค Next.js์ ๋น์ทํ ํ๋ ์์ํฌ
- Next.js ์ธ์๋ JS ์์ญ์์ SSR์ ์ง์ํ๋ ํ๋ ์์ํฌ๋ค์ด ์กด์ฌํ๋ค.
Gatsby
- ์ ์ ์น ์ฌ์ดํธ ์์ฑ๋ง์ ์ง์ํ๋ ํ๋ ์์ํฌ
- ๋ชจ๋ ํ์ด์ง๋ฅผ ๋น๋ ์์ ์ ๋ฏธ๋ฆฌ ๋ ๋๋งํ์ฌ ์ ์ ์ฝํ
์ธ ํํ๋ก ๋ง๋ ๋ค.
- ์ด๋ค ์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ๋ก๋ ์ ๊ณตํ ์ ์๋ค.
- CDN: ๋ฐ์ดํฐ ์ฌ์ฉ๋ ๋ง์ ์ฑ์ ์น ํ์ด์ง ๋ก๋ ์๋๋ฅผ ๋์ด๋ ์ํธ ์ฐ๊ฒฐ๋ ์๋ฒ ๋คํธ์ํฌ
- ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๋ก, ์น ์ฝํ
์ธ ๋ฅผ ์ฌ์ฉ์์ ๊ฐ๊น์ด ๊ณณ์์ ์ ์กํจ์ผ๋ก์จ ์ ์ก ์๋๋ฅผ ๋์ผ ์ ์๋ค.
- ์ ์ ์น ์ฌ์ดํธ๋ง์ ์ง์ํ๋ฏ๋ก ๋์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ง์ํ๋ ํ๋ ์์ํฌ๋ค์ ๋นํด ์ฑ๋ฅ์ด ๋ฐ์ด๋์ง๋ง, ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ณํ๋ ๋ณต์กํ ์น ์ฌ์ดํธ ๊ฐ๋ฐ์๋ ์ฌ์ฉํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
Razzle
- SSR์ด ๊ฐ๋ฅํ JS ์ฑ์ ๋ง๋ค ์ ์๋ ํ๋ ์์ํฌ
- CRA๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๋ฉด์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๋ณต์กํ ์ฑ ์ค์ ์ ๋จ์ํ๊ฒ ์ถ์ํํ ์ ์๋ค.
- ์ฌ์ฉํ ํ๋ ์์ํฌ์ ๊ดํ ์ง์์ด ์์ด๋ ์ฌ์ฉํ ์ ์๋ค.
- React, Vue, Angular, ... ์ด๋ค ํ๋ ์์ํฌ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Nuxt.js
- Vue๋ฅผ ์ฌ์ฉํ ์น ์ฑ ๊ฐ๋ฐ์์ React์ Next.js์ ํด๋นํ๋ ํ๋ ์์ํฌ
Angular Universal
- Angular์ ์ฌ์ฉํ ์น ์ฑ ๊ฐ๋ฐ์์ React์ Next.js์ ํด๋นํ๋ ํ๋ ์์ํฌ
๐ References
์ฐธ๊ณ ์๋ฃ ๋ชจ์