`
+
+- React์ ํต์ฌ ์ฝ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ์ฝ๋๊ฐ ํฌํจ๋ JavaScript ๋ฆฌ์์ค.
+ ์ด ๋ฆฌ์์ค๋ค์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ ๋น `
` ๋ด๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ์ ๋ฃ์์ต๋๋ค.
+
+![](https://files.smashing.media/articles/forensics-react-server-components/1-client-side-rendering-process.jpg)
+
+์ด ๊ณผ์ ์์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ JavaScript๊ฐ ๋ชจ๋ ์์
์ ์๋ฃํ ํ์์ผ ๋น๋ก์ ์์ ํ ์ํธ์์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
+
+**์ฌ๊ธฐ์ ๊ฐ๋ฐ์ ๊ฒฝํ(DX)์ด ๊ฐ์ ๋์ง๋ง ๋์์ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ด ์์ข์์ง๋ ๋๋์ด ๋ค์ ์์ต๋๋ค.**
+
+์ฌ์ค, React์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์๋ ์ฅ๋จ์ ์ด ์์์ต๋๋ค.
+
+๊ธ์ ์ ์ธ ์ธก๋ฉด์ ์ดํด๋ณด๋ฉด, ๋ฐ์ํ ์ปดํฌ๋ํธ ๋๋ถ์ ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ฐ๋ผ ์
๋ฐ์ดํธ๋๋ฏ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ถ๋๋ฝ๊ณ ๋น ๋ฅธ ์ ํ์ ์ ๊ณตํ์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋จ์ถ์์ผฐ์ต๋๋ค
+
+CSR์ ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ณ , CDN์ ํตํด ์์ฐ์ ์ ๊ณตํ ์ ์์ด, ์ฌ์ฉ์์ ์ง๋ฆฌ์ ์ผ๋ก ๊ฐ๊น์ด ์๋ฒ ์์น์์ ์ฝํ
์ธ ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ํ์ด์ง ๋ก๋๋ฅผ ๋์ฑ ์ต์ ํํ ์ ์์ต๋๋ค.
+
+CSR์๋ ๊ทธ๋ฆฌ ์ข์ง ์์ ๊ฒฐ๊ณผ๋ ๋ฐ๋ฅด๋๋ฐ, ํนํ ์ปดํฌ๋ํธ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด [์ํฐํด ๋คํธ์ํฌ ์์ฒญ](https://blog.sentry.io/fetch-waterfall-in-react/)์ด ๋ฐ์ํด ์๋๊ฐ ํฌ๊ฒ ์ ํ๋ ์ ์์ต๋๋ค.
+
+์ด๋ UX ์ธก๋ฉด์์ ์ฌ์ํ ๋ถํธ์ฒ๋ผ ๋ค๋ฆด ์ ์์ง๋ง, ์ค์ ๋ก๋ ํฐ ํผํด๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
+
+Eric Bailey์ โ[Modern Health, frameworks, performance, and harm](https://ericwbailey.design/published/modern-health-frameworks-performance-and-harm/)โ ๊ธ์ CSR ์์
์ ๋ํด ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๋ ์ด์ผ๊ธฐ์
๋๋ค.
+
+๋ค๋ฅธ CSR์ ๋ถ์ ์ ์ธ ๊ฒฐ๊ณผ๋ ๊ทธ๋ฆฌ ์ฌ๊ฐํ์ง๋ ์์ง๋ง ์ฌ์ ํ ํผํด๋ฅผ ์ด๋ํฉ๋๋ค.
+
+์๋ฅผ ๋ค์ด, ๋ฉํ๋ฐ์ดํฐ์ ๋น `
`๋ง ํฌํจ๋ HTML ๋ฌธ์๋ ์์ ํ ๋ ๋๋ง๋ ๊ฒฝํ์ ์ ๊ณตํ์ง ๋ชปํฉ๋๋ค.
+
+๊ทธ๋ฆฌํ์ฌ ๊ฒ์ ์์ง ํฌ๋กค๋ฌ๊ฐ ์ด๋ฅผ ํ๋
ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
+
+์ค๋๋ ์๋ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ง๋ง, ๋น์์๋ ๊ฒ์ ์์ง ํธ๋ํฝ์ ์์กดํด ์์ต์ ์ฐฝ์ถํ๋ ํ์ฌ ์ฌ์ดํธ์ SEO(๊ฒ์ ์์ง ์ต์ ํ) ์ํฅ์ ๋ฏธ์ณ ํฐ ์ ์ฝ์ด ๋์์ต๋๋ค.
+
+# ๋ณํ: ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)
+
+๋ณํ๊ฐ ํ์ํ์ต๋๋ค.
+
+CSR์ ๊ฐ๋ฐ์์๊ฒ ๋น ๋ฅด๊ณ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๊ฐ๋ ฅํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ง๋ง, ์ฌ์ฉ์๋ค์ ๋น ํ๋ฉด๊ณผ ๋ก๋ฉ ํ์๋ฅผ ๋ง์ฃผํ๋ ์ํฉ์ด ๋ง์์ต๋๋ค.
+
+์ด์ ๋ํ ํด๊ฒฐ์ฑ
์ ๋ ๋๋ง์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ด๋์ํค๋ ๊ฒ์ด์์ต๋๋ค.
+
+๊ณผ๊ฑฐ์ ๋ฐฉ์์ผ๋ก ๋์๊ฐ์ ๊ฐ์ ํด์ผ ํ๋ค๋ ๊ฒ์ด ํฅ๋ฏธ๋กญ๊ฒ ๋ค๋ฆด ์ ์์ต๋๋ค.
+
+๊ทธ๋์ React๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ฒ ๋์์ต๋๋ค.
+
+[ํ๋ SSR์ React ์ปค๋ฎค๋ํฐ์์ ํฐ ํ์ ๊ฐ ๋์ด ์ฃผ๋ชฉ๋ฐ๊ธฐ๋ ํ์ต๋๋ค.](https://sentry.io/resources/moving-to-server-side-rendering/)
+
+SSR๋ก์ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ค์ํ ๋ณํ๋ฅผ ๊ฐ์ ธ์์ผ๋ฉฐ, ํนํ React์ ๋์ ๋ฐฉ์๊ณผ ์ฝํ
์ธ ๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์๋ฒ๋ฅผ ํตํด ์ ๋ฌ๋๋ ๋ฐฉ์์ ํฐ ์ํฅ์ ๋ฏธ์ณค์ต๋๋ค.
+
+![](https://files.smashing.media/articles/forensics-react-server-components/2-diagram-server-side-rendering-process.jpg)
+
+# CSR์ ํ๊ณ ํด๊ฒฐ
+
+SSR์ ์ฌ์ฉํ๋ฉด ๋น HTML ๋ฌธ์๋ฅผ ๋ณด๋ด๋ ๋์ , ์ด๊ธฐ HTML์ ์๋ฒ์์ ๋ ๋๋งํ์ฌ ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ์ต๋๋ค.
+
+์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ํ์ํ์ง ์๊ณ ์ฆ์ ์ฝํ
์ธ ๋ฅผ ํ์ํ ์ ์์์ต๋๋ค.
+
+์ด ๋ฐฉ์์ Web Vitals์์ ์ค์ํ ์ฑ๋ฅ ์งํ์ธ [First Contentful Paint(FCP)๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค.](https://docs.sentry.io/product/performance/web-vitals/web-vitals-concepts/#first-paint-fp)
+
+์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ CSR๊ณผ ํจ๊ป ๋ฐ์ํ๋ SEO ๋ฌธ์ ๋ ํด๊ฒฐํ์ต๋๋ค.
+
+ํฌ๋กค๋ฌ๊ฐ ์น์ฌ์ดํธ์ ์ฝํ
์ธ ๋ฅผ ์ง์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฆ์ ์ธ๋ฑ์ฑํ ์ ์์์ต๋๋ค.
+
+์ด๊ธฐ ๋ฐ์ดํฐ ํ์นญ๋ ์๋ฒ์์ ์ด๋ฃจ์ด์ง๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ ์์ค์ ๊ฐ๊น์์ ์ ์ ํ ์ํ๋๋ฉด [์ํฐํด ํ์นญ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ ์ ์๋ ์ฅ์ ](https://blog.sentry.io/fetch-waterfall-in-react/#fetch-data-on-server-to-avoid-a-fetch-waterfall)์ด ์์ต๋๋ค.
+
+# - Hydration
+
+SSR์๋ ์์ฒด์ ์ธ ๋ณต์ก์ฑ์ด ์์ต๋๋ค.
+
+์๋ฒ์์ ๋ฐ์ ์ ์ HTML์ React๊ฐ ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ์ํด์๋ "Hydration"์ด ํ์ํฉ๋๋ค.
+
+Hydration์ React๊ฐ ์ด๊ธฐ HTML์ DOM์ ์๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธก์์ ๊ฐ์ DOM(Virtual DOM)์ ์ฌ๊ตฌ์ฑํ๋ ๊ณผ์ ์
๋๋ค.
+
+์ฐธ๊ณ : React๋ ์ค์ DOM ๋์ [๊ฐ์ DOM(Virtual DOM)](https://legacy.reactjs.org/docs/faq-internals.html)์ ์ ์งํฉ๋๋ค.
+
+์ด๋ ์ค์ DOM๋ณด๋ค ๊ฐ์ DOM์์ ์
๋ฐ์ดํธ๋ฅผ ํ์
ํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค.
+
+React๋ UI๋ฅผ ์
๋ฐ์ดํธํ ๋ ๊ฐ์ DOM์์ ์ฐจ์ด(diff)๋ฅผ ๊ณ์ฐํ๊ณ , ์ค์ DOM์ ๊ฐ์ DOM๊ณผ ๋๊ธฐํํฉ๋๋ค.
+
+ํ์ฌ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ์ ํ์ React๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค:
+
+1. ์๋ฒ ์ฌ์ด๋ React: ์ปดํฌ๋ํธ ํธ๋ฆฌ์์ ์ ์ HTML์ ๋ ๋๋งํ ์ ์๋ ๋ฒ์ .
+
+2. ํด๋ผ์ด์ธํธ ์ฌ์ด๋ React: ํ์ด์ง๋ฅผ ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋ฒ์ .
+
+์ฐ๋ฆฌ๋ ์ฌ์ ํ React์ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์กํ๊ณ ์์ต๋๋ค.
+
+์๋ํ๋ฉด ์ด๊ธฐ HTML์ ์ํ(hydrate)ํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ ์ธก์์๋ ์๋ฒ์์ ์ฌ์ฉํ ๋์ผํ ์ปดํฌ๋ํธ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
+
+hydration ๊ณผ์ ์์ React๋ [์ฌ์กฐ์ (reconciliation)](https://css-tricks.com/how-react-reconciliation-works/)์ด๋ผ๋ ๊ณผ์ ์ ์ํํ๋๋ฐ, ์ด๋ ์๋ฒ์์ ๋ ๋๋ง๋ DOM๊ณผ ํด๋ผ์ด์ธํธ์์ ๋ ๋๋ง๋ DOM์ ๋น๊ตํ์ฌ ๋ DOM ๊ฐ์ ์ฐจ์ด์ ์ ์๋ณํ๋ ค๊ณ ์๋ํฉ๋๋ค.
+
+๋ง์ฝ ๋ DOM ๊ฐ์ ์ฐจ์ด์ ์ด ์๋ค๋ฉด, React๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ค์ hydrationํ๊ณ , ์๋ฒ์์ ๋ ๋๋ง๋ ๊ตฌ์กฐ์ ์ผ์นํ๋๋ก ์ปดํฌ๋ํธ ๊ณ์ธต์ ์
๋ฐ์ดํธํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค.
+
+๋ง์ฝ ํด๊ฒฐํ ์ ์๋ ๋ถ์ผ์น๊ฐ ์ฌ์ ํ ์กด์ฌํ๋ค๋ฉด, React๋ ๋ฌธ์ ๋ฅผ ๋ํ๋ด๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
+
+์ด ๋ฌธ์ ๋ ์ผ๋ฐ์ ์ผ๋ก `hydration error`๋ก ์๋ ค์ ธ ์์ต๋๋ค.
+
+# SSR์ ๋จ์
+
+SSR์ CSR์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๋ ๋ง๋ฅ ์๋ฃจ์
์ด ์๋๋๋ค.
+
+SSR ์์ฒด์๋ ๋จ์ ์ด ์์ต๋๋ค.
+
+์ด๊ธฐ HTML ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ํ์นญ์ ์๋ฒ๋ก ์ฎ๊ฒผ๊ธฐ ๋๋ฌธ์, ์ด์ ์๋ฒ๋ ๋ชจ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ์์ ๋ก๋ํ ๋๋ณด๋ค ํจ์ฌ ๋ ํฐ ๋ถํ๋ฅผ ๊ฒฝํํ๊ฒ ๋ฉ๋๋ค.
+
+SSR์ด ์ผ๋ฐ์ ์ผ๋ก First Contentful Paint(FCP) ์ฑ๋ฅ ์งํ๋ฅผ ๊ฐ์ ํ๋ค๊ณ ์ธ๊ธํ ๊ฒ์ ๊ธฐ์ตํ์๋์?
+
+์ด๋ ์ฌ์ค์ด์ง๋ง, SSR๋ก ์ธํด [Time to First Byte(TTFB)](https://docs.sentry.io/product/performance/web-vitals/web-vitals-concepts/#first-contentful-paint-fcp) ์ฑ๋ฅ ์งํ๋ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฐ์ต๋๋ค.
+
+๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ์นญํ๊ณ , ์ด๊ธฐ HTML์ ์์ฑํ์ฌ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ฅผ ์ ์กํ ๋๊น์ง ์ค์ ๋ก ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
+
+TTFB ์์ฒด๋ ํต์ฌ ์น ๋ฐ์ดํ(Core Web Vitals) ์งํ๋ ์๋์ง๋ง, ๋ค๋ฅธ ์งํ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
+
+TTFB๊ฐ ๋ถ์ ์ ์ด๋ฉด Core Web Vitals ์งํ๋ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
+
+SSR์ ๋ ๋ค๋ฅธ ๋จ์ ์ ํด๋ผ์ด์ธํธ ์ธก React๊ฐ hydration๋ฅผ ์๋ฃํ๊ธฐ ์ ๊น์ง ์ ์ฒด ํ์ด์ง๊ฐ ์๋ตํ์ง ์๋๋ค๋ ์ ์
๋๋ค.
+
+์ํธ์์ฉ ์์๋ React๊ฐ ์ด๋ฅผ hydrationํ๊ธฐ ์ ๊น์ง, ์ฆ React๊ฐ ์๋๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ ๊น์ง ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ตํ ์ ์์ต๋๋ค.
+
+hydration ๊ณผ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅด์ง๋ง, ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋์ ์ฌ์ฉ ์ค์ธ ์ฅ์น์ ํ๋์จ์ด ์ฑ๋ฅ์ ๋ฐ๋ผ ๋ ๋๋ง ์๋๊ฐ ๋์ ๋๊ฒ ๋๋ ค์ง ์ ์์ต๋๋ค.
+
+# ํ์ฌ: ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ๋ฒ
+
+์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ React ๋ ๋๋ง์ ๋ ๊ฐ์ง ๋ฐฉ์์ธ CSR(ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง)๊ณผ SSR(์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง)์ ๋ํด ๋ค๋ฃจ์์ต๋๋ค.
+
+๋ ๊ฐ์ง ๋ฐฉ์์ ์๋ก๋ฅผ ๊ฐ์ ํ๋ ค๋ ์๋๋ก ๋ฑ์ฅํ์ง๋ง, ์ด์ ๋ CSR๊ณผ SSR์ ๋จ์ ์ ์ค์ด๊ณ ์ฅ์ ์ ๋ชจ๋ ์ด๋ฆฌ๊ธฐ ์ํด SSR์ด ์ธ ๊ฐ์ง ์ถ๊ฐ์ ์ธ React ๋ฐฉ์์ผ๋ก ๋ฐ์ ํ๊ฒ ๋์์ต๋๋ค.
+
+์ด์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ๋ฐฉ์์ธ **์ ์ ์ฌ์ดํธ ์์ฑ(Static Site Generation ์ฆ, SSG)**๊ณผ **์ฆ๋ถ ์ ์ ์ฌ์์ฑ(Incremental Static Regeneration ์ฆ, ISR)**์ ๋ํด ์ดํด๋ณธ ํ, React ์๋ฒ ์ปดํฌ๋ํธ๋ผ๋ ์ธ ๋ฒ์งธ ๋ฐฉ์์ ๋ํด ์ ์ฒด์ ์ผ๋ก ๋
ผ์ํด๋ณด๊ฒ ์ต๋๋ค.
+
+## ์ ์ ์ฌ์ดํธ ์์ฑ (SSG)
+
+๋งค ์์ฒญ๋ง๋ค ๋์ผํ HTML ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ ๋์ , ์ฐ๋ฆฌ๋ SSG(์ ์ ์ฌ์ดํธ ์์ฑ)๋ฅผ ๊ณ ์ํด๋์ต๋๋ค.
+
+์ด React ๋ฐฉ์์ ๋น๋ ์์ ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ์ปดํ์ผํ๊ณ ๋น๋ํ์ฌ ์ ์ (์์ HTML๊ณผ CSS) ํ์ผ์ ์์ฑํฉ๋๋ค.
+
+๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ ํ์ผ๋ค์ ๋น ๋ฅธ CDN(Content Delivery Network)์ ํธ์คํ
๋ฉ๋๋ค.
+
+์ด ํ์ด๋ธ๋ฆฌ๋ ๋ ๋๋ง ๋ฐฉ์์ ์ฝํ
์ธ ๋ณํ๊ฐ ์ ์ ๋ง์ผํ
์ฌ์ดํธ๋ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ์ ํฉํฉ๋๋ค.
+
+์ด๋ ์ฌ์ฉ์ ์ํธ์์ฉ์ผ๋ก ์ธํด ์ฝํ
์ธ ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋๊ท๋ชจ ํ๋ก์ ํธ, ์๋ฅผ ๋ค์ด ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์๋ ๋ง์ง ์์ต๋๋ค.
+
+SSG๋ ์๋ฒ์ ๋ถ๋ด์ ์ค์ด๋ ๋์์ TTFB(Time To First Byte)์ ๊ด๋ จ๋ ์ฑ๋ฅ ์งํ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
+
+์๋ํ๋ฉด ์๋ฒ๊ฐ ํ์ด์ง๋ฅผ ๋ค์ ๋ ๋๋งํ๊ธฐ ์ํด ๋ฌด๊ฒ๊ณ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ์ํํ ํ์๊ฐ ์์ด์ง๊ธฐ ๋๋ฌธ์
๋๋ค.
+
+## ์ฆ๋ถ ์ ์ ์ฌ์์ฑ (ISR)
+
+SSG(์ ์ ์ฌ์ดํธ ์์ฑ)์ ํ ๊ฐ์ง ๋จ์ ์ ์ฝํ
์ธ ๋ณ๊ฒฝ์ด ํ์ํ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์ ๋น๋ํด์ผ ํ๋ค๋ ์ ์
๋๋ค.
+
+์ฝํ
์ธ ๋ ๊ณ ์ ๋์ด ์์ด(์ ์ ์ด๋ฏ๋ก) ๊ทธ ์ผ๋ถ๋ง ๋ณ๊ฒฝํ ์ ์๊ณ ์ ์ฒด๋ฅผ ๋ค์ ๋น๋ํด์ผ ํฉ๋๋ค.
+
+์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Next.js ํ์ ๋ ๋ฒ์งธ ํ์ด๋ธ๋ฆฌ๋ React ๋ฐฉ์์ ๋ง๋ค์ด๋์ต๋๋ค.
+
+**์ฆ๋ถ ์ ์ ์ฌ์์ฑ(ISR, Incremental Static Regeneration)**
+
+ISR์ ์ด๋ฆ ๊ทธ๋๋ก ์ ์ฒด๋ฅผ ๋ค์ ๋น๋ํ๋ ๋์ ํ์ํ ๋ถ๋ถ๋ง ์ฌ์์ฑํ๋ ์ ๊ทผ ๋ฐฉ์์
๋๋ค.
+
+๋น๋ ์์ ์ ํ์ด์ง์ "์ด๊ธฐ ๋ฒ์ "์ ์ ์ ์ผ๋ก ์์ฑํ์ง๋ง, ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ ํ ๋ฐ์ดํฐ๊ฐ ์ค๋๋ ํ์ด์ง๋ ์๋ฒ ์์ฒญ์ด ๋ฐ์ดํฐ ๊ฒ์ฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ฌ ๋ค์ ๋น๋ํ ์ ์์ต๋๋ค.
+
+๊ทธ ์์ ๋ถํฐ ์๋ฒ๋ ํ์ํ ๋๋ง๋ค ์ ๋ฒ์ ์ ํ์ด์ง๋ฅผ ์ ์ง์ ์ผ๋ก ์ ์ ์ผ๋ก ์ ๊ณตํ๊ฒ ๋ฉ๋๋ค. ISR์ SSG์ ์ ํต์ ์ธ SSR ์ฌ์ด์ ์์นํ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์
๋๋ค.
+
+ํ์ง๋ง ISR์ "์ค๋๋ ์ฝํ
์ธ " ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค.
+
+์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ ๋ ํด๋น ํ์ด์ง๊ฐ ์์ง ์์ฑ ์ค์ผ ์ ์์ต๋๋ค.
+
+SSG์ ๋ฌ๋ฆฌ ISR์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ ์์ฒญ์ ํ ๋ ๊ฐ๋ณ ํ์ด์ง๋ฅผ ๋ค์ ์์ฑํ๊ธฐ ์ํด ์ค์ ์๋ฒ๊ฐ ํ์ํฉ๋๋ค.
+
+์ด๋ ISR ๊ธฐ๋ฐ ์ฑ์ CDN์ ๋ฐฐํฌํ์ฌ ์ต์ ํ๋ ์๋ฃ๋ค์ ์ ๋ฌํ๋ ๋ฅ๋ ฅ์ ์๊ฒ ๋จ์ ์๋ฏธํฉ๋๋ค.
+
+## - ๋ฏธ๋: ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ
+
+์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ CSR(ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง), SSR(์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง), SSG(์ ์ ์ฌ์ดํธ ์์ฑ), ISR(์ฆ๋ถ ์ ์ ์ฌ์์ฑ) ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํด์์ต๋๋ค.
+
+์ด๋ค์ ๋ชจ๋ ์ด๋ ์ ๋์ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ฑ๋ฅ, ๊ฐ๋ฐ ๋ณต์ก๋, ์ฌ์ฉ์ ๊ฒฝํ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
+
+์๋กญ๊ฒ ๋์
๋ [React ์๋ฒ ์ปดํฌ๋ํธ(RSC, React Server Components)](https://nextjs.org/docs/app/building-your-application/rendering/server-components)๋ ์ด๋ฌํ ๋จ์ ๋๋ถ๋ถ์ ํด๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค. RSC๋ ๊ฐ ๊ฐ๋ณ React ์ปดํฌ๋ํธ์ ๋ํด ์ ์ ํ ๋ ๋๋ง ์ ๋ต์ ์ ํํ ์ ์๊ฒ ํด์ค๋๋ค.
+
+RSC๋ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ JavaScript์ ์์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
+
+์๋ฒ์์ ์ ์ ์ผ๋ก ์ ๊ณตํ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ ๋๋งํ ์ปดํฌ๋ํธ๋ฅผ ์ ํ์ ์ผ๋ก ๊ฒฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
+
+์ด๋ฅผ ํตํด ํน์ ํ๋ก์ ํธ์ ๋ง๋ ์ ์ ํ ๊ท ํ์ ์ฐพ๊ธฐ ์ํ ๋ ๋ง์ ์ ์ด์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
+
+> ์์๋์ด์ผ ํ ์
+> ์ฐธ๊ณ : RSC์ ๊ฐ์ ๋ ๋ฐ์ ๋ ์ํคํ
์ฒ๋ฅผ ์ฑํํ ๋ [๋ชจ๋ํฐ๋ง ์๋ฃจ์
](https://docs.sentry.io/product/performance/)์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
+> Sentry๋ RSC ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ค๋ฅ๋ฅผ ์ถ์ ํ ์ ์๋ ๊ฐ๋ ฅํ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ์ค๋ฅ ์ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
+> Sentry๋ ๋ํ ๋ฆด๋ฆฌ์ค๊ฐ ์ด๋ป๊ฒ ์ฑ๋ฅ์ ๋ฐํํ๊ณ ์ผ๋ง๋ ์์ ์ ์ธ์ง์ ๋ํ ํต์ฐฐ์ ์ ๊ณตํ์ฌ, ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์
์ RSC๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋์ ์ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
+> [Next.js](https://sentry.io/for/nextjs/)์ ๊ฐ์ RSC ์ง์ ํ๋ ์์ํฌ์์ Sentry๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋จ์ผ ํฐ๋ฏธ๋ ๋ช
๋ น์ ์คํํ๋ ๊ฒ๋งํผ ๊ฐ๋จํฉ๋๋ค.
+
+๊ทธ๋ฌ๋ ์๋ฒ ์ปดํฌ๋ํธ๋ผ๋ ๊ฒ์ ์ ํํ ๋ฌด์์ผ๊น์ ?
+
+ํ๋ฒ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
+
+## - ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ
+
+์ด ์๋ก์ด ์ ๊ทผ๋ฒ์ ๋ ๊ฐ์ง ์ ํ์ ๋ ๋๋ง ์ปดํฌ๋ํธ๋ฅผ ๋์
ํฉ๋๋ค.
+
+๋ฐ๋ก **์๋ฒ ์ปดํฌ๋ํธ(Server Components)**์ **ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ(Client Components)**์
๋๋ค.
+
+์ด ๋ ์ปดํฌ๋ํธ์ ์ฐจ์ด์ ์ ๊ธฐ๋ฅ์ด ์๋ ์คํ๋๋ ์์น์ ์ค๊ณ๋ ํ๊ฒฝ์
๋๋ค.
+
+์ด ๊ธ์ ์์ฑํ๋ ์์ ์์ RSC๋ฅผ ์ฌ์ฉํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ React ํ๋ ์์ํฌ๋ฅผ ํตํด์์
๋๋ค.
+
+ํ์ฌ RSC๋ฅผ ์ง์ํ๋ ํ๋ ์์ํฌ๋ [Next.js](https://nextjs.org/docs/app/building-your-application/rendering/server-components), [Gatsby](https://www.gatsbyjs.com/docs/conceptual/partial-hydration/), [RedwoodJS](https://redwoodjs.com/blog/rsc-now-in-redwoodjs) ์ธ ๊ฐ์ง์
๋๋ค.
+
+![](https://files.smashing.media/articles/forensics-react-server-components/3-wire-diagram-server-client-components.jpg)
+
+## - ์๋ฒ ์ปดํฌ๋ํธ
+
+์๋ฒ ์ปดํฌ๋ํธ(Server Components)๋ ์๋ฒ์์ ์คํ๋๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ๊ทธ ์ฝ๋๋ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋์ง ์์ต๋๋ค.
+
+HTML ์ถ๋ ฅ๊ณผ ๊ทธ๋ค์ด ๋ฐ์ ์ ์๋ props๋ง ์ ๊ณต๋ฉ๋๋ค.
+
+์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง ์ฑ๋ฅ์์ ์ด์ ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ๊ฐ์ ธ์ต๋๋ค:
+
+- **์๋ฒ ์ปดํฌ๋ํธ(Server Components)๋ ํฐ ์์กด์ฑ์ ์๋ฒ ์ธก์ ๋จ๊ฒจ๋ ์ ์์ต๋๋ค.**
+
+ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํฌ๋ํธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์์ํด๋ณด์ธ์.
+
+์ปดํฌ๋ํธ๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์์ ์คํํ๋ฉด ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํด์ผ ํฉ๋๋ค.
+
+ํ์ง๋ง ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ HTML ์ถ๋ ฅ๋ง ๊ฐ์ ธ๊ฐ๊ณ JavaScript๋ ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ ํ์๊ฐ ์์ต๋๋ค.
+
+์๋ฒ ์ปดํฌ๋ํธ๋ ์ง์ ์ผ๋ก ์ ์ ์ด๋ฉฐ, hydration ๋จ๊ณ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
+
+- **์๋ฒ ์ปดํฌ๋ํธ๋ ์ฝ๋ ์์ฑ์ ์ํด ํ์ํ ๋ฐ์ดํฐ ์์ค(์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ํ์ผ ์์คํ
)์ ํจ์ฌ ๊ฐ๊น๊ฒ ์์นํฉ๋๋ค.**
+
+๋ํ ์๋ฒ์ ๊ณ์ฐ ๋ฅ๋ ฅ์ ํ์ฉํ์ฌ ๊ณ์ฐ ์ง์ฝ์ ์ธ ๋ ๋๋ง ์์
์ ๊ฐ์ํํ๊ณ , ์์ฑ๋ ๊ฒฐ๊ณผ๋ง ํด๋ผ์ด์ธํธ์ ์ ์กํฉ๋๋ค.
+
+์๋ฒ ์ปดํฌ๋ํธ๋ ํ ๋ฒ์ ์์ฑ๋๋ฏ๋ก [์์ฒญ ํญํฌ(request waterfalls)์ HTTP ์๋ณต](https://blog.sentry.io/fetch-waterfall-in-react/#fetch-data-on-server-to-avoid-a-fetch-waterfall)์ ํผํ ์ ์์ต๋๋ค.
+
+- **์๋ฒ ์ปดํฌ๋ํธ(Server Components)๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๋ก์ง์ ๋ธ๋ผ์ฐ์ ์์ ์์ ํ๊ฒ ๋ณดํธํฉ๋๋ค.**
+
+์ด๋ ๊ฐ์ธ ํ ํฐ๊ณผ API ํค๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์๋ ์์ ํ ์๋ฒ์์ ์คํ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
+
+- **๋ ๋๋ง ๊ฒฐ๊ณผ๋ ์บ์๋์ด ์ดํ ์์ฒญ ๊ฐ ๋ฐ ๋ค๋ฅธ ์ธ์
๊ฐ์๋ ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค.**
+
+์ด๋ ๋ ๋๋ง ์๊ฐ์ ํฌ๊ฒ ์ค์ด๋ฉฐ, ๊ฐ ์์ฒญ๋ง๋ค ๊ฐ์ ธ์ค๋ ์ ์ฒด ๋ฐ์ดํฐ ์๋ ์ค์
๋๋ค.
+
+์ด ์ํคํ
์ฒ๋ **HTML ์คํธ๋ฆฌ๋ฐ**๋ ์ฌ์ฉํฉ๋๋ค.
+
+์ฆ, ์๋ฒ๋ ํน์ ์ปดํฌ๋ํธ์ ๋ํ HTML ์์ฑ์ ์ง์ฐ์ํค๊ณ , ๋์ ์์ฑ๋ HTML์ ๋ณด๋ด๋ ๋์ ํด๋น ์ปดํฌ๋ํธ์ ์๋ฆฌ์๋ ๋์ฒด ์์๋ฅผ ๋ ๋๋งํฉ๋๋ค.
+
+์คํธ๋ฆฌ๋ฐ ์๋ฒ ์ปดํฌ๋ํธ๋ [](https://react.dev/reference/react/Suspense) ํ๊ทธ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ ๋์ฒด ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
+
+๊ตฌํ ํ๋ ์์ํฌ๋ ์ด๊ธฐ์๋ ์ด ๋์ฒด ์์๋ฅผ ์ฌ์ฉํ์ง๋ง, ์๋ก ์์ฑ๋ ์ฝํ
์ธ ๊ฐ ์ค๋น๋๋ฉด ์ด๋ฅผ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
+
+์คํธ๋ฆฌ๋ฐ์ ๋ํด ๋ ์์ธํ ์ด์ผ๊ธฐํ๊ฒ ์ง๋ง, ๋จผ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค.
+
+## - ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ
+
+ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ(Client Components)๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ ์๊ณ ์ฌ๋ํ๋ ์ปดํฌ๋ํธ์
๋๋ค.
+
+์ด๋ค์ ํด๋ผ์ด์ธํธ ์ธก์์ ์คํ๋ฉ๋๋ค.
+
+๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ ์ ์๊ณ , `localStorage`๋ ์ง๋ฆฌ ์์น(geolocation)์ ๊ฐ์ ๋ธ๋ผ์ฐ์ API์ ์ ๊ทผํ ์ ์์ต๋๋ค.
+
+"ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ"๋ผ๋ ์ฉ์ด๋ ์๋ก์ด ๊ฒ์ ์ค๋ช
ํ๋ ๊ฒ์ด ์๋๋๋ค.
+
+๋จ์ง ์ด ์ฉ์ด๋ ๊ธฐ์กด์ CSR(Client-Side Rendering) ์ปดํฌ๋ํธ์ ์๋ฒ ์ปดํฌ๋ํธ(Server Components)๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
+
+ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ํ์ผ ์๋จ์ ["use client"](https://react.dev/reference/rsc/use-server) ์ง์์ด๋ฅผ ํฌํจํ์ฌ ์ ์๋ฉ๋๋ค.
+
+```tsx
+"use client";
+export default function LikeButton() {
+ const likePost = () => {
+ // ...
+ };
+ return ;
+}
+```
+
+Next.js์์๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ ์ปดํฌ๋ํธ(Server Components)๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
+
+๊ทธ๋์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ(Client Components)๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ํ๊ธฐ ์ํด "use client" ์ง์์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
+
+๋ํ "use server" ์ง์์ด๋ ์์ง๋ง, ์ด๋ ์๋ฒ ์ก์
(Server Actions)์ ์ฌ์ฉ๋ฉ๋๋ค.
+
+์๋ฒ ์ก์
์ ํด๋ผ์ด์ธํธ์์ ํธ์ถ๋์ง๋ง ์๋ฒ์์ ์คํ๋๋ RPC(์๊ฒฉ ํ๋ก์์ ํธ์ถ)์ ์ ์ฌํ ๋์์ ํฉ๋๋ค.
+
+์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ๋๋ ์ด ์ง์์ด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
+
+ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ์์๋ง ๋ ๋๋ง๋๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, Next.js๋ ์ด๊ธฐ HTML์ ์์ฑํ๊ธฐ ์ํด ์๋ฒ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค.
+
+๊ทธ ๊ฒฐ๊ณผ ๋ธ๋ผ์ฐ์ ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์ฆ์ ๋ ๋๋งํ ์ ์์ผ๋ฉฐ, ์ดํ์ ํ์ด๋๋ ์ด์
(hydration)์ ์ํํ๊ฒ ๋ฉ๋๋ค.
+
+## ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๊ด๊ณ
+
+ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ง ๋ช
์์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
+
+์ฆ, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
+
+์ด๋ ์ฌ๋ ๋๋ง ๋ฌธ์ ๋๋ฌธ์
๋๋ค.
+
+๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ธ ํธ๋ฆฌ์ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ์๋ ์์ต๋๋ค.
+
+์ด๋ children prop์ ํตํด ์ ๋ฌ๋ฉ๋๋ค.
+
+ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ฉฐ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์์ฒด ์ํ๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ์ ์์ฃผ ์ฌ๋ ๋๋ง๋ฉ๋๋ค.
+
+ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋ ๋, ๊ทธ ์๋ธ ํธ๋ฆฌ๋ ์ฌ๋ ๋๋ง๋ฉ๋๋ค.
+
+ํ์ง๋ง ์๋ธ ํธ๋ฆฌ์ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ์ฌ๋ ๋๋ง๋ ๊น์?
+
+์๋ฒ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์คํ๋์ง ์์ต๋๋ค.
+
+์ด๋ฌํ ์ด์ ๋ก React ํ์ ์ด๋ฌํ ์ ํ์ ๋์์ต๋๋ค.
+
+ํ์ง๋ง ์ ๊น๋ง์! ์ฌ์ค ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
+
+๋ค๋ง, ์ด๋ ์ผ๋์ผ ๊ด๊ณ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ๋ณํ๋ฉ๋๋ค.
+
+๋ง์ฝ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์๋ ์๋ฒ API๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ฉฐ, ๊ทธ๋ ์ง ์๋ค๋ฉด ์๋ฒ ์ปดํฌ๋ํธ์ ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ๋ก "๋
ธ์ถ"๋ฉ๋๋ค.
+
+์ด๊ฒ์ RSCs(React Server Components)๋ฅผ ์์
ํ ๋ ๋งค์ฐ ์ค์ํ ์ฐจ์ด์ ์
๋๋ค.
+
+์ด ๋ฏธ๋ฌํ ์ ์ ๋ฐ๋์ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค.
+
+## ๋ ๋๋ง ๋ผ์ดํ์ฌ์ดํด
+
+๋ค์์ Next.js๊ฐ ์ฝํ
์ธ ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ์์์
๋๋ค:
+
+1. ์ฑ ๋ผ์ฐํฐ๋ ํ์ด์ง์ URL์ ์๋ฒ ์ปดํฌ๋ํธ(Server Component)์ ๋งค์นญ์ํค๊ณ , ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ํ, ์๋ฒ ์ธก React์ ์๋ฒ ์ปดํฌ๋ํธ์ ๋ชจ๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ผ๊ณ ์ง์ํฉ๋๋ค.
+
+2. ๋ ๋๋ง ์ค์ React๋ "RSC ํ์ด๋ก๋(RSC Payload)"๋ฅผ ์์ฑํฉ๋๋ค. RSC ํ์ด๋ก๋๋ ํ์ด์ง์ ๋ํ ์ ๋ณด์ ๋ฐํ๋ ๋ด์ฉ์ Next.js์ ์๋ฆฌ๋ฉฐ, ๋์ ๋์ฒดํ ๋ด์ฉ์ ํฌํจํฉ๋๋ค.
+
+3. React๊ฐ ์์คํ๋๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ฉด, ํด๋น ์๋ธ ํธ๋ฆฌ์ ๋ ๋๋ง์ ์ผ์ ์ค์งํ๊ณ ์์คํ๋๋ ์ปดํฌ๋ํธ์ ๋์ฒด ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
+
+4. React๊ฐ ๋ง์ง๋ง ์ ์ ์ปดํฌ๋ํธ๋ฅผ ์ฒ๋ฆฌํ๋ฉด, Next.js๋ ์์ฑ๋ HTML๊ณผ RSC ํ์ด๋ก๋๋ฅผ ์ค๋นํ์ฌ ํ๋ ์ด์์ ์ฒญํฌ๋ก ๋๋์ด ํด๋ผ์ด์ธํธ๋ก ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
+
+5. ํด๋ผ์ด์ธํธ ์ธก React๋ RSC ํ์ด๋ก๋์ ํด๋ผ์ด์ธํธ ์ธก ์ปดํฌ๋ํธ์ ๋ํ ์ง์ ์ฌํญ์ ์ฌ์ฉํ์ฌ UI๋ฅผ ๋ ๋๋งํฉ๋๋ค. ๋ํ, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋ ๋๋ง๋ค ์ด๋ฅผ ํ์ด๋๋ ์ด์
(hydration)ํฉ๋๋ค.
+
+6. ์๋ฒ๋ ์์คํ๋๋ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด ์ด๋ฅผ RSC ํ์ด๋ก๋๋ก ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ๋ ์ด๋ ํ์ด๋๋ ์ด์
๋ฉ๋๋ค(์์คํ๋๋ ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ).
+
+RSC ๋ ๋๋ง ๋ผ์ดํ์ฌ์ดํด์ ๋ธ๋ผ์ฐ์ ๊ด์ ์์ ์ ์ ํ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
+
+๋ค์ ๊ทธ๋ฆผ์ด ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃฌ ๋จ๊ณ๋ฅผ ์ค๋ช
ํฉ๋๋ค.
+
+![](https://files.smashing.media/articles/forensics-react-server-components/4-wire-diagram-rsc-rendering-lifecycle.jpg)
+
+# RSC ํ์ด๋ก๋
+
+RSC ํ์ด๋ก๋๋ ์๋ฒ๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ ๋๋งํ ๋ ์์ฑํ๋ ํน๋ณํ ๋ฐ์ดํฐ ํ์์ผ๋ก, ๋ค์์ ํฌํจํฉ๋๋ค:
+
+- ๋ ๋๋ง๋ HTML
+
+- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ์๋ฆฌ ํ์์
+
+- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ํ ์ฐธ์กฐ
+
+- ํธ์ถํด์ผ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ํ ์ง์ ์ฌํญ
+
+- ์๋ฒ ์ปดํฌ๋ํธ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ชจ๋ props.
+
+RSC ํ์ด๋ก๋์ ๋ํด ํฌ๊ฒ ๊ฑฑ์ ํ ํ์๋ ์์ง๋ง, RSC ํ์ด๋ก๋์ ๋ฌด์์ด ํฌํจ๋๋์ง ์ดํดํ ํ์๋ ์์ต๋๋ค.
+
+[์ ๊ฐ ๋ง๋ ๋ฐ๋ชจ ์ฑ](https://github.com/nikolovlazar/rsc-forensics)์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. (๊ฐ๊ฒฐํ๊ฒ ํ๊ธฐ ์ํด ์ผ๋ถ๋ฅผ ์๋ตํ์ต๋๋ค).
+
+```ts
+1:HL["/_next/static/media/c9a5bc6a7c948fb0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
+2:HL["/_next/static/css/app/layout.css?v=1711137019097","style"]
+0:"$L3"
+4:HL["/_next/static/css/app/page.css?v=1711137019097","style"]
+5:I["(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+8:"$Sreact.suspense"
+a:I["(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+b:I["(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+d:I["(app-pages-browser)/./src/app/global-error.jsx",["app/global-error","static/chunks/app/global-error.js"],""]
+f:I["(app-pages-browser)/./src/components/clearCart.js",["app/page","static/chunks/app/page.js"],"ClearCart"]
+7:["$","main",null,{"className":"page_main__GlU4n","children":[["$","$Lf",null,{}],["$","$8",null,{"fallback":["$","p",null,{"children":"๐ loading products..."}],"children":"$L10"}]]}]
+c:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}]...
+9:["$","p",null,{"children":["๐๏ธ ",3]}]
+11:I["(app-pages-browser)/./src/components/addToCart.js",["app/page","static/chunks/app/page.js"],"AddToCart"]
+10:["$","ul",null,{"children":[["$","li","1",{"children":["Gloves"," - $",20,["$...
+```
+
+๋ฐ๋ชจ ์ฑ์์ ์ด ์ฝ๋๋ฅผ ์ฐพ์ผ๋ ค๋ฉด, ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ Elements ํญ์ ์ด๊ณ ํ์ด์ง ํ๋จ์ `