์๋ ํ์ธ์ NextJS ์น ํ๋ ์ ์ํฌ์ ๋ํด ๋ฐํํ๊ฒ ๋ ๊น๋๊ฑด์ ๋๋ค
โ๏ธ NextJS ๋ ? โ
NextJS ๋ ๋ฌด์์ผ๊น์? NextJS ๊ณต์ ์น์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด
React Framework For the WEB
์น์ ์ํ ๋ฆฌ์กํธ ํ๋ ์์ํฌ ๋ผ๊ณ ๋์ด ์์ต๋๋ค
๋ฆฌ์กํธ๊ฐ ํ๋ ์์ํฌ๊ฐ ์๋๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ผ๋๊ฒ์ ์๋ง ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๊ฒฝํํด ๋ณธ ์ฌ๋๋ค์ ํ๋ฒ์ฉ ๋ค์ด๋ณด์ จ์ ๊ฒ๋๋ค
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Client Side Routing ์ ์ํด์๋ React Router DOM ์, ์ฌ์ ๋ ๋๋ง๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํด์๋ React Snap ์ด๋ SSR ํ๋ฌ๊ทธ์ธ๊ณผ ๊ฐ์ ์ถ๊ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผํ๊ณ , Code Splitting ์ ์ํด์๋ React.lazy ๋ ๋ฒ๋ค๋ฌ ์ค์ ์ ์ถ๊ฐ๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค
NextJS ๋ ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ์น ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ํต์ฌ ๊ธฐ๋ฅ๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ๊ทธ์ค์์ ์ ๋ ๋ ๋๋ง ํจํด
์ ์ค์ ์ ๋ง์ถ์ด ๋ฐํ๋ฅผ ํ๋๋ก ํ๊ฒ ์ต๋๋ค
โ๏ธ Rendering? ๋ ๋๋ง์ด๋? โ
๊ทธ๋ ๋ค๋ฉด NextJS ์ ๋ ๋๋ง ํจํด์ ์์ธํ ์์๋ณด๊ธฐ์ ์์, ๋ ๋๋ง(Rendering) ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค
์ฐ๋ฆฌ๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์ ํ๋ธ์ ์ ์ํ๋ ์ํฉ์ ๊ฐ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค
Client - Server ์ํคํ ์ณ์์ ํด๋ผ์ด์ธํธ๊ฐ ์น์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, WAS (Web Application Server) ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๋์ ์ปจํ ์ธ ๋ฅผ ๋ก๋ํ๊ณ , ์ถ๊ฐ์ ์ผ๋ก ์์ฒญ์ ๋ง๋ HTML, CSS, JS ๋ฑ๊ณผ ๊ฐ์ ์ ์ ์์์ ์๋ต์ผ๋ก ๋ณด๋ ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ HTML, CSS, JS ๋ฅผ ํด์ํ์ฌ ํ๋ฉด์ ์นํ์ด์ง๋ฅผ ๊ทธ๋ฆฌ๊ฒ๋๋๋ฐ, ์ด ๊ณผ์ ์ Rendering ๋ ๋๋ง
์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค
๊ทธ๋ ๋ค๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ ๋๋ง์ ์ด๋ค ์์๋๋ก ์งํํ๋์ง ๊ฐ๋ตํ๊ฒ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋งํ๋ ๊ณผ์ ์ Critical Rendering Path
๋ผ๊ณ ๋ถ๋ฆ
๋๋ค
Construction ๋จ๊ณ โ
๋จผ์ ๋ธ๋ผ์ฐ์ ๋
- HTML ์ ๋ฐ์ ํ์ฑ์ ์งํํ๊ณ , DOM Tree ์์ฑ์ ์์ํฉ๋๋ค
- ์ดํ
<style/>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ ์ ์ค๋จํ๊ณ , CSS ๋ฅผ ํ์ฑํ์ฌ CSSOM Tree ๋ฅผ ์์ฑํฉ๋๋ค.- CSSOM Tree ๊ฐ ์์ฑ๋๋ฉด, DOM ์์ฑ์ ์ฌ๊ฐํ๊ณ
<script/>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ๋ค์ DOM ์์ฑ์ ์ค๋จํ๊ณ , ์ ์ด๊ถํ๊ธฐ JS ์์ง์ผ๋ก ๋์ด๊ฐ๋๋ค. ์ด๋ DOM API (document.querySelector
์ ๊ฐ์ ํจ์) ๊ฐ DOM ์ ์กฐ์ํ๊ณ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค- JS ๋ ํ์ฑ๋์ด ์ถ์๊ตฌ๋ฌธํธ๋ฆฌ AST Tree ๊ฐ ๋ง๋ค์ด์ง๊ณ , JS ๋ฅผ ์คํํ๊ฒ ๋ฉ๋๋ค
- ์ดํ DOM ํธ๋ฆฌ๋ฅผ ๋ง์ ์์ฑ์ํค๊ณ , DOM Tree, CSSOMTree ๋ฅผ ํฉ์ณ Render Tree ๋ฅผ ์์ฑํฉ๋๋ค
์ฌ๊ธฐ ๊น์ง์ ๊ณผ์ ์ construction
๋จ๊ณ๋ผ๊ณ ํฉ๋๋ค
Operation ๋จ๊ณ โ
๋ค์์ผ๋ก Render Tree ์ ๋ ธ๋๋ฅผ ํ์ํ ์์น๋ฅผ ๊ฒฐ์ ํ๋ Layout ๋จ๊ณ์, Render Tree ๋ฅผ ์ํํ๋ฉฐ Node ๋ฅผ ๊ทธ๋ฆฌ๋ Paint ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ,
z-index ๊ฐ ๋ฎ์ ์์๋ถํฐ ์ฐจ๋ก๋ก ๋ ์ด์ด๋ฅผ ๊ตฌ์ฑํ๋ composition ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ํ๋ฉด์ ๋ณด์ฌ์ง๊ฒ ๋ฉ๋๋ค
โ๏ธ Core Web Vitals โ
๋ ๋๋ง ํจํด์ UX ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ข์, ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ ๋ ๋๋ง ํจํด์ ๋ฌด์์ผ๊น์?
๋ณธ๊ฒฉ์ ์ผ๋ก ๋ ๋๋ง ํจํด๋ค์ ๋ํด ์์๋ณด๊ธฐ์ ์์์, ๊ตฌ๊ธ์์ ์ ์ํ๋ ์น ํ์ด์ง๋ค์ ์ฌ์ฉ์ ๊ฒฝํ์ ํ๊ฐํ๋ ์งํ์ธ Core Web Vitals ์ ๋ํด ์ ๊น ์์๋ณด๊ฒ ์ต๋๋ค
โ๏ธ Rendering Patterns โ
์ง๊ธ๋ถํฐ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ ๋๋ง ํจํด๋ค์ ๋ํด ์น์ด ๋ฐ์ ํ๊ฒ ๋ ์์๋๋ก ์์๋ณด๊ฒ ์ต๋๋ค
Static Site โ
๊ฐ์ฅ ๋จผ์ Static Site ์ ๋๋ค.
์ด๊ธฐ์ ์น์ ์ ์ ์ธ ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๋๊ฒ์ ๊ทธ์ณค์ต๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ํน์ ํ์ด์ง์ ์ ์ํ๋ฉด, ์ ์ ์ธ HTML, CSS, JS ๋ฅผ ์ ๊ณตํฉ๋๋ค. AWS S3 ๋ฒํท๊ณผ ๊ฐ์ ์ ์ฅ์์ ์ฌ๋ฆฌ๊ฑฐ๋, NginX ๋ฑ์ ์ฌ์ฉํด ์ ์ ์ธ ํ์ด์ง๋ ์๋น๋ฉ๋๋ค
Static Site ๋ฅผ Core Web Vitals ๊ด์ ์์ ๋ณด๋ฉด,
์ํธ์์ฉํ ์ ์๋ ์๊ฐ์ธ TTI ์ ๋ธ๋ผ์ฐ์ ์์ ์ฒ์ ๊ทธ๋ ค์ง๋ FCP ์์ ์๊ฐ์ด ๋์ผํ ์ฅ์ ์ด ์๊ณ , ๊ฒ์์์ง ํฌ๋กค๋ง ๋ด์ด, ํ์ด์ง๋ฅผ ์ ์์ ์ผ๋ก ์์งํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒ์์์ง ์ต์ ํ SEO ์ ์ข์ต๋๋ค
ํ์ง๋ง, ๋์ ๋ฐ์ดํฐ์ ์ทจ์ฝํ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
Server Side Rendering (SSR) โ
๋ค์์ผ๋ก๋ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ๋๋ค.
ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ด ๋ค์ด์ฌ ๋ ๋ง๋ค, ์๋ฒ์์ HTML ๊ณผ Data ๊ฐ ๋์ ์ผ๋ก ๋ง๋ค์ด์ง๋๋ค.
์์ฒญ์ ๋ฐ๋ผ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ์์ฑ๋ HTML ์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํฉ๋๋ค. JSP, TimeLeaf, HandleBars ๋ฑ๊ณผ ๊ฐ์ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํด ๊ตฌํํ ์ ์์ต๋๋ค.
Static Site ์ ๋์ผํ๊ฒ TTI ์ FCP ๊ฐ ๋์ผํ๋ค๋ ์ ๊ณผ SEO ์ ์ข๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํ์ง๋ง ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฝ์ ํ, ์๋ต์ผ๋ก ๋ณด๋ด๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ TTFP ๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๊ณ , ์๋ก์ด ํ์ด์ง๋ฅผ ์ ์ํ ๋ ๋ง๋ค, ์๋ก์ด HTML ์ ์์ฒญํ๊ณ ํ๋ฉด์ด ๊น๋ฐ์ฌ UX ์ ์ข์ง ๋ชปํ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค
Client Side Rendering (CSR) ์ Single Page Application (SPA) โ
์ฒ์์๋ ์ ๋๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์ด ๋์๋๋ฐ, AJAX ๋ผ๋ ๊ธฐ์ ์ด ๋์ค๊ฒ ๋๋ฉด์ ์๋ก๊ณ ์นจ ์์ด ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด์ก๊ณ ,
์ด์ ๋ฐ๋ผ React, Angular, Vue ์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฐ์ ํ์ฌ ์ฑ๊ณผ๊ฐ์ ๋ถ๋๋ฌ์ด ํ๋ฉด ์ ํ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค
ํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด, HTML ๊ณผ CSS ๋ฅผ ๋ฐ๊ณ , ๋น๋๋ JS ๋ฒ๋ค ํ์ผ์ ์๋ต์ผ๋ก ๋ฐ์ต๋๋ค
์ดํ, ํด๋ผ์ด์ธํธ ์ธก์์ JS (React) ๋ฅผ ์ฌ์ฉํด DOM ์์๋ฅผ ์ฝ์ ํ๊ณ ์กฐ์ํ๋ฉฐ ๋ ๋๋ง์ ์งํํ๊ณ , AJAX ์์ฒญ์๋ณด๋ด์ ์๋ฒ๋ก๋ถํฐ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ต๋๋ค
์ฑ์ฒ๋ผ ๋ถ๋๋ฌ์ด ์ ํ๊ณผ ์ํธ์์ฉ์ผ๋ก UX ์ ์ข์ง๋ง, ๊ฒ์์์ง ํฌ๋กค๋ง ๋ด์ด ํ ๋น HTML ์ ํฌ๋กค๋งํ๊ธฐ ๋๋ฌธ์ ๊ฒ์์์ง ์ต์ ํ SEO ์ ์ข์ง ๋ชปํฉ๋๋ค ๋ํ, JS ๋ฒ๋ค ํ์ผ์ด ํฌ๋ค๋ฉด, TTFP ๊ฐ ๋๋ ค์ง๊ณ , FCP ์ TTI ์ ์ฐจ์ด๊ฐ ํฌ๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์๊ฐ ํ์ด์ง๊ฐ ๋ก๋๋์๋์ง ์ธ์งํ์ง ๋ชปํ๋ ๋จ์ ์ด ์์ต๋๋ค
SSR with Hydration โ
๋ค์์ผ๋ก ์์๋ณผ ํจํด์ NextJS ์์ ์ง์ํ๋ ๋ ๋๋ง ํจํด๋ค์ ๋๋ค.
๋จผ์ SSR with Hydration ์ ๋๋ค.
์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, ์์ ๋ดค๋ SSR ๊ณผ ์ ์ฌํ๊ฒ ๋์ํฉ๋๋ค
NextJS ๋ด๋ถ์ ์ผ๋ก ์๋ฒ์ฌ์ด๋์์ ๋ฆฌ์กํธ๋ฅผ ์ด์ฉํด ๋ ๋๋ง์ ์งํํ๊ณ , API ์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ, ์์ฑ๋ HTML ์ ์๋ต์ผ๋ก ์ ๊ณตํฉ๋๋ค
์ฌ๊ธฐ๊น์ง๋ SSR ๊ณผ ๋์ผํฉ๋๋ค
์ดํ, ์ถ๊ฐ์ ์ผ๋ก React ์ฝ๋๊ฐ ํด๋ผ์ด์ธํธ๋ก ํจ๊ป ์ ์ก๋์ด Hydration
์ด ์งํ๋ฉ๋๋ค
Hydration ์ด๋, ์๋ฒ์์ ์ฌ์ ๋ ๋๋ง๋์ด ๋ง๋ค์ด์ง HTML ์ React ๊ฐ ์ฐ๊ฒฐ๋์ด, ์ดํ๋ก๋ Client Side Rendering ์ผ๋ก ์ ํ๋์ด ์คํ๋ฉ๋๋ค
SSG with Hydration โ
SSG with Hydration (Static Site Generation with Hydration) ์ SSR with Hydration ๊ณผ ์ ์ฌํ๋,
์์ฒญ๋ง๋ค ์๋ฒ์์ ๋ ๋๋ง์ ์งํํ๋ ๊ฒ์ด ์๋, ๋น๋์๊ฐ์ ๋ณํ์ง ์๋ ๋ถ๋ถ์ HTML ๋ก ์์ฑํด๋๊ณ
์ดํ, React ์ฝ๋๊ฐ ์ฐ๊ฒฐ๋๋ Hydration ์ด ์งํ๋๊ณ , API ์์ฒญ์ AJAX ๋ฅผ ํตํด ์งํ๋ฉ๋๋ค
๋ ๋ ๋๋ง ํจํด ๋ชจ๋ ๊ฒ์์์ง ์ต์ ํ์ ์ข์ง๋ง, TTFB ๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค
Incremental Static Regeneration (ISR) โ
๋ง์ง๋ง์ผ๋ก ISR ์ฆ๋ถ์ ์ ์์ฑ์ด ์์ต๋๋ค
SSR with Hydration ๊ณผ SSG with Hydration ์ ํฉ์น ๋ ๋๋ง ํจํด์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค
๋น๋ํ์์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํด ์ฌ์ ๋ ๋๋ง๋ HTML ์ ์บ์ฑํ๊ณ (SSG with Hydration ๊ณผ ์ ์ฌ) ์๋ต์ผ๋ก ์ ๊ณตํฉ๋๋ค
์ดํ, ์์ฒญ์ด ๋ฐ์ํ๊ณ ์บ์๊ฐ ์ ํจํ์ง ์์๋ (๋ง๋ฃ ๋์์๋, revalidate ์๊ฐ ์ง์ ) ์๋ฒ์์ ๊ฐ๋ณ ํ์ด์ง๋ฅผ ์ฌ์์ฑํ์ฌ ์บ์ฑํฉ๋๋ค
์บ์ฑ๋ ํ์ด์ง์ ๋ํด์๋ TTFB ๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ฐ๋๋ ์ฌ์ดํธ์์๋ ์ ํฉํ์ง ์์ต๋๋ค.
โ๏ธ ๋ง์น๋ฉฐ โ
๊ทธ๋์ ์ข์ ๋ ๋๋ง ํจํด์ ๋ญ๊ณ , ๋ญ ์จ์ผํ๋ค ๋ผ๊ณ ๋ฌป๋๋ค๋ฉด, ๋ฑํ ์ ํด์ง ์ข์ ํจํด์ ์์ต๋๋ค.
๋ฐ์ดํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ง์ ๋ง๊ฒ ์ฌ์ฉํด์ผํฉ๋๋ค
์๋ฅผ๋ค์ด
์ด๋ ฅ์, ์๊ธฐ์๊ฐ ํ์ด์ง์ ๊ฐ์ด ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋๋ฌธ ์ฌ์ดํธ์ ๊ฒฝ์ฐ, ๋น๋ ํ์์ ์ ์ ์ผ๋ก ํ์ด์ง๋ฅผ ์์ฑํ๋ SSG ๋ฅผ ์ฌ์ฉํ๊ณ , ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ธ๋ก๊ทธ ๊ธ๊ฐ์ ๊ฒฝ์ฐ ISR ์, ์์ฃผ ๊ธ์ด ์ถ๊ฐ, ์ญ์ ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ํ ์ฌ์ดํธ์ ๊ฒฝ์ฐ SSR ์ ์ฌ์ฉํ๋ฉด ์ ํฉํ ๊ฒ์ ๋๋ค.
์๊ฐํด๋๋ฆฐ ๋ ๋๋ง ํจํด๋ค ์ธ์๋, React 18 ๋ฒ์ ๋ถํฐ React Server Components ๊ฐ ๋์ ๋๋ฉด์ Streaming SSR, Island Architecture ๋ฑ ์ฌ๋ฌ ํจํด๋ค์ด ๋ง๋ค์ด์ง๊ณ ์๋๋ฐ, ๊ฐ ๋ ๋๋ง ํจํด์ ์ฅ๋จ์ ๊ณผ ํน์ง์ ์๊ณ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ๋์ผ ์ ์์ ๊ฒ์ ๋๋ค
๋ฐํ ๋ค์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค