[์ ์งํ๊ฒ ๋ฐฐ์๋ณด๋ Next js] Next.js์ ๋ ๋ฒ์งธ ํต์ฌ Pre-Rendering
ํด๋น ๋ธ๋ก๊ทธ ์๋ฆฌ์ฆ๋ ์ ์งํ๊ฒ ๋ฐฐ์๋ณด๋ Next js ์๋ฆฌ์ฆ๋ก์จ ์ด 8๋ถ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
Next.js๊ณต์ ํํ์ด์ง์์ ์ด์ผ๊ธฐํ๋ ๋ด์ฉ์ ์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ด๊ฒ ๊ตฌ์ฑํ์์ต๋๋ค.
0. ๋ชฉ์ฐจ
1. create-next-app์ผ๋ก next ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ํ๊ธฐ
2. create-next-app์์ ๋ง๋ ์ฒซ ๋ฒ์งธ ํต์ฌ pages. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ผ์ฐํ
3. ํ์ด์ง๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ Link-Component ๊ทธ๋ฆฌ๊ณ Pre-Fetch
Dynamic Routing๊ณผ Link๋ฅผ ์ด์ฉํด ๊ฐ๋จํ ๊ฒ์ํ์ ๋ง๋ค์ด๋ณด์.
4. Next.js์์ head ํ๊ทธ๋ฅผ ์กฐ์ํ๋ ๋ฉ์ง ๋ฐฉ๋ฒ
๋ฒ์ธ & ์ค์ต) ์ด๋ฏธ์ง์ ๋์์์ ์ ์ฅํ๊ณ ์ฌ์ฉํด๋ณด์.
5. ์น์ ๋ฐ์ ๊ณผ์ ์ผ๋ก ๋ณด๋ SSG์ SSR
6. next์ ๋ ๋ฒ์งธ ํต์ฌ Pre-Rendering
7. SSG๋ก ๊ฒ์ ์์ง ์ต์ ํ ๋ ธ๋ฆฌ๊ธฐ
8. ์ ์งํ๊ฒ ๋ฐฐ์๋ณด๋ Next.js ์๋ฆฌ์ฆ๋ฅผ ๋ง์น๋ฉฐ..
SPA์ ํน์ฑ์ ๋จผ์ ์๊ฐํด๋ณด์.
SPA๋ ์ฒ์์ด ๋๋ฆฌ๊ณ ๊ทธ ๋ค์๋ถํฐ ๋น ๋ฅด๋ค.
SPA ์์๋ ์ฌ์ฉ์๊ฐ ์ค์ ์ปจํ
์ธ ๋ฅผ ๋ณด๋ ค๋ฉด ์๋ฒ๋ก ์์ฒญ์ ํ ๋ค์ html, js, assets ํ์ผ์ ๋ค ๋ค์ด ๋ฐ๊ธฐ ์ ๊น์ง ๋๊ธฐํด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค ๋ค์ด๋ฐ๊ณ ๋๋ค Javascript ๋ฅผ ์ด์ฉํด์ ๋งค ํ๋ฉด์ ์ปจํ
์ธ ๋ฅผ ๋์ ์ผ๋ก ๋ฐ๊พผ๋ค.
ํ์ง๋ง ์ด๋ฐ ๊ฒ๋ค์ด SPA๋ฅผ ๋๋ฆฌ๊ฒ ํ๋ ์ด์ ๊ฐ ๋๋๋ฐ, ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ SSR์ํด HTML ํ์ผ์ ๋ฐํํด์ค ์๋ฒ๋ฅผ ๋ฌ์ผํ๋ค.
ํ์ง๋ง NextJs์์๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ Pre-Rendering ์ผ๋ก SSR๋ณด๋ค ๋ณต์กํ์ง ์์ ๋น์ฉ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
Pre-Rendering
ํ๋ฆฌ ๋ ๋๋ง์ next js ์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ด๋ค.
next์์ ๋ชจ๋ ํ์ด์ง๊ฐ ์ฌ์ฉ์์๊ฒ ์ ํด์ง๊ธฐ ์ ์ HTML์ ๋ฏธ๋ฆฌ ์์ฑํด์ ํ๋ฆฌ ๋ ๋๋ง์ ์ํํ๋ค.
์ฐ๋ฆฌ๊ฐ create-react-app
์ผ๋ก ๋ง๋ ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ผ ๊ฒฝ์ฐ js ๊ธฐ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ณด์ด์ง ์๊ฒ ๋๋๋ฐ, ํ๋ฆฌ ๋ ๋๋ง๋ next ์ฑ์ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ js ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ผ๋ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ๋ next๋ก ๋ง๋ ๋ฆฌ์กํธ ์ฑ์ธ๋ฐ, js ๊ธฐ๋ฅ์ ๋๋๋ผ๋ ๋์ํ๋๊ฒ์ ๋ณผ ์ ์๋ค.
Pre-Rendering์ ๊ณผ์
Pre-Rendering์๋ 2๊ฐ์ง ๊ณผ์ ์ด ์๋ค.
- initial load
- hydration
initial load html
js ๋์๋ง ์๋ html์ ๋จผ์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๋ฐ, ์์ง js ํ์ผ์ด ๋ก๋๋๊ธฐ ์ ์ด๋ฏ๋ก <Link>
์ ๊ฐ์ ์ปดํฌ๋ํธ๋ ๋์ํ์ง ์๋๋ค.
hydration
initial load ์์ html ์ ๋ก๋ํ ๋ค js ํ์ผ์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ html์ ์ฐ๊ฒฐ์ํค๋ ๊ณผ์ ์ด๋ค.
์ฌ๊ธฐ์ js๋ html์ด๋ ์ฐ๊ฒฐํ๋ค.
ํด๋น ๊ณผ์ ์์ react ์ปดํฌ๋ํธ๋ ์ด๊ธฐํ๋๊ณ ์ฌ์ฉ์์ ์ํธ์์ฉํ ์ค๋น๋ฅผ ๋ง์น๋ค.
๋ง์ฝ Pre-Rendering์ด ์๋ค๋ฉด?
๋ง์ฝ Pre-Rendering์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด JS ์ ์ฒด๊ฐ ๋ก๋๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ด Load์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง์ง ์๊ฒ ๋๋ค.
์ฆ ์ฐ๋ฆฌ๋ ์ ์ฒด ํ์ด์ง๊ฐ ๋ก๋๋๊ธฐ ์ ๊น์ง ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค๋ ๋ป์ด ๋๊ณ ๊ฒฐ๊ตญ UX๋ ๋ฎ์ ํ๊ฐ๋ฅผ ๋ฐ๊ฒ๋ ์ ์๋ค.
Pre-Rendering์ 2๊ฐ์ง SSG์ SSR
์ด๋ ์ด ์ ๋ฒ์ธ์์ ์ค๋ช ํ์ง๋ง ํน์ ๋ชจ๋ฅผ ์ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ SSG SSR CSR์ ๋ํด์ ๋ชจ๋ฅธ๋ค๋ฉด ํด๋น ๋งํฌ๋ฅผ ๋ค์ด๊ฐ ํ์ธํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
Next.js ์์๋ 2๊ฐ์ง Pre-Rendering ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.
- Static Site Generation : html ์ ๋น๋ ํ์์ ์์ฑํ๊ณ ๊ฐ ์์ฒญ์ ๋ฐ๋ผ์ ์ฌ์ฌ์ฉํ๋ค. (SSG)
- Server Side Rendering : html์ ๊ฐ ๋ฆฌํ์คํธ๊ฐ ์ผ์ด๋ ๋ ๋ง๋ค ์์ฑ (SSR)
Static Site Generation
SSG๋ ๋์ผํ HTML์ ๋งค ์์ฒญ๋ง๋ค ์์ฑํด์ ์ฐ๋ SSR์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ํ์ํ ๊ธฐ๋ฒ์ด๋ค.
Next.js ๋ด๋ถ์ ์กด์ฌํ๋ Pre-Render ๋ฉ์๋๊ฐ ์ต์ด์ HTML์ Buildํ ๋ ๋์ํ๋ค.
๊ทธ๋ฆฌ๊ณ Pre-Render๋ HTML ํ์ผ์ ์์ฒญ์ ๋ฐ๋ผ ์ฌ์ฌ์ฉ๋๋ค.
Server Side Rendering
์์์ ํ ๋ง ๋๋ฌธ์ SSR์ด SSG๋ณด๋ค ๋ ๋นํจ์จ์ ์ผ๋ก ๋น์ถฐ์ง ์ ์๋ค.
ํ์ง๋ง SSR์ HTML์ ๊ฐ ๋ฆฌํ์คํธ๊ฐ ์ผ์ด๋ ์์ ๋ง๋ค ์์ฑ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ SSR์ ์จ์ผํ๋ ๋ถ๋ถ์ ๋ช
๋ฐฑํ ์กด์ฌํ๋ค.
์ฃผ๋ก ์ฌ์ฉ์๋ง๋ค ํ์ด์ง์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ํ์ด์ง์์ ์ฌ์ฉ๋๋ค.
์ด๋ค ์ํฉ์์ ์จ์ผํ ๊น
next ๊ณต์ ํํ์ด์ง ์์๋ ๊ฐ๋ฅํ static generation์ ์ถ์ฒํ๋ค.
๋งค ์์ฒญ๋ง๋ค data๊ฐ ์์ฃผ ์
๋ฐ์ดํธ ๋๋ ์ด๋ฅผํ
๋ฉด ์์ฒญ๋ง๋ค ์ฝํ
์ธ ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๋ SSR์ ์ ํํด์ผ ํ๊ณ , ๊ทธ๊ฒ์ด ์๋๋ผ๋ฉด SSG๋ฅผ ์ ํํ๋๋ก ํ์.