๐ย Server Components
React Server Component๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ์์ ๋ ๋๋งํ๊ณ ์ ํ์ ์ผ๋ก ์บ์ํ ์ ์๋ UI๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. Next.js์์๋, route segments๋ก ๋ ๋๋ง ๊ณผ์ ์ ๋ ์กฐ๊ฐ๋ด๊ณ ์ด๊ฒ์ ์ค์๊ฐ์ผ๋ก ์ ์ก(streaming)ํ์ฌ ๋ถ๋ถ์ ์ผ๋ก ๋ ๋๋งํ ์ ์์ต๋๋ค.
ย
ย
๐ย Benefits of Server Rendering
์๋ฒ์์ ๋ ๋๋งํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ค์ด ์์ต๋๋ค:
ย
Data Fetching
Server Components๋ ์๋ฒ์์ ๋ฐ์ดํฐ ํจ์นญ์ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ฐ์ดํฐ ์์ค(database, ์ธ๋ถ API, cache, file systemโฆ)์ ๋ ๊ฐ๊น์ด ์๋ฒ์์ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ฌ์ฃผ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ํด์ผ ํ๋ ์์ฒญ์ ์์ ์ค์ฌ์ฃผ์ด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
Security
ํ ํฐ ๋ฐ API ํค์ ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋ฐ ๋ก์ง์ ํด๋ผ์ด์ธํธ์ ๋
ธ์ถ์ํค์ง ์๊ณ ์๋ฒ์ ์์ ํ๊ฒ ๋ณด๊ดํ ์ ์์ต๋๋ค.
Caching
์๋ฒ์์ ๋ ๋๋งํ๋ฉด ๊ฒฐ๊ณผ๋ฌผ์ ์บ์ํ ์ ์๊ณ ์ดํ์ ์์ฒญ ๋ฐ ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ ์์ฒญ๋ง๋ค ์ํ๋๋ ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์์ ์ค์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค.
Bundle Sizes
์ด์ ์๋ ํด๋ผ์ด์ธํธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค ํฌ๊ธฐ์ ์ํฅ์ ๋ผ์น ์ ์์๋ ํฐ ๋ํ๋์๋ค์ ์๋ฒ์์ ๊ฐ์ง๊ณ ์์ ์ ์์ต๋๋ค. ์ด๋ ๋๋ฆฐ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด๋ ์ฑ๋ฅ์ด ๋ฎ์ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์๊ฒ ์ด์ ์ด ์์ต๋๋ค. ์๋ํ๋ฉด ํด๋ผ์ด์ธํธ๋ ๋ํ๋์๋ฅผ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ํด์ํ๊ณ ์คํํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
ํด๋ผ์ด์ธํธ์์ ํ์ด์ง์ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋, ํด์, ์คํํ๋ ๊ฒ์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด, ์๋ฒ์์ HTML์ ์์ฑํด์ ์ ์ ๋ค์ด ์ฆ์ ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
Search Engine Optimization and Social Network Shareability
๋ ๋๋ง๋ HTML์ ๊ฒ์ ์์ง ๋ด์ด ์์ธํ(index)ํ๋๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ ์์
๋คํธ์ํฌ ๋ด์ด ํ์ด์ง์ ์์
์นด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ง๋๋๋ฐ์๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
Streaming
Server Components๋ ๋ ๋๋ง ์์
์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด, ํด๋ผ์ด์ธํธ๊ฐ ์ค๋น๋ ๋๋ง๋ค ์ค์๊ฐ์ผ๋ก ์ ์กํด์ค๋๋ค. ์ด๋ ์ ์ ๊ฐ ์ ์ฒด ํ์ด์ง๊ฐ ๋ ๋๋ง๋๋ ๊ฒ์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด, ํ์ด์ง์ ์ผ๋ถ๋ฅผ ๋ ๋นจ๋ฆฌ ๋ณผ ์ ์๊ฒ ํด์ค๋๋ค.
ย
ย
๐ย How are Server Components rendered?
์๋ฒ์์, Next.js๋ React์ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง์ ์กฐ์จํฉ๋๋ค. ๋ ๋๋ง ์์
์ ๊ฐ๋ณ ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ Suspense Boundaries์ ๋ฐ๋ผ ์กฐ๊ฐ์ผ๋ก ๋๋ฉ๋๋ค.
ย
๊ฐ ์กฐ๊ฐ์ ๋ ๋จ๊ณ๋ก ๋ ๋๋ง ๋ฉ๋๋ค:
- React๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ React Server Componet Payload(RSC Payload)๋ผ๊ณ ๋ถ๋ฆฌ๋ ํน๋ณํ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ ๋๋งํฉ๋๋ค.
- Next.js๋ HTML์ ์๋ฒ์์ ๋ ๋๋งํ๊ธฐ ์ํด RSC Payload์ Client Component JavaScript instructions๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ย
๊ทธ ํ, ํด๋ผ์ด์ธํธ์์:
- ๋ ๋๋ง ๋ HTML๋ก ๋น ๋ฅด๊ณ ์ํธ ์์ฉ์ด ์๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ฆ์ ๋ณด์ฌ์ค๋๋ค. - ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์
- RSC Payload๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์กฐํ์ํค๊ณ DOM์ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- JavaScript instructions๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ํ์ด๋๋ ์ด์
ํ๊ณ ์ฑ์ ์ํธ ์์ฉ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ย
๐๏ธ
What is the RSC Payload?RSC Payload๋ ๋ ๋๋ง๋ ์๋ฒ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๊ฐ๋ตํ ์ด์ง ํํ ๋ฐฉ์์
๋๋ค. ํด๋ผ์ด์ธํธ์์ ๋ฆฌ์กํธ์ ์ํด ๋ธ๋ผ์ฐ์ DOM์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
The RSC Payload contains:
- ์๋ฒ ์ปดํฌ๋ํธ์ ๋ ๋๋ง๋ ๊ฒฐ๊ณผ๋ฌผ
- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋์ด์ผ ํ ์๋ฆฌ๋ฅผ ํ์ํ๋ Placeholders์ ๊ทธ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ํ ์ฐธ์กฐ
- ์๋ฒ ์ปดํฌ๋ํธ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ชจ๋ props
ย
ย
๐ย Server Rendering Strategies
์ธ๊ฐ์ง ์๋ฒ ๋ ๋๋ง ์ ๋ต์ด ์์ต๋๋ค.
ย
1. Static Rendering (Default)
Static Rendering์ ์ฌ์ฉํ๋ฉด, ๋ผ์ฐํธ๊ฐ ๋น๋ ์๊ฐ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ revalidation ํ ๋ ๋๋ง๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๊ณ
Content Delivery Network (CDN)์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ด ์ต์ ํ๋ ๋ ๋๋ง ์์
์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์ ์๋ฒ ์์ฒญ ๊ฐ์ ๊ณต์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
๊ฐ์ธํ ๋์ง์๋ ์ ๋ณด๋ ๋น๋ ์์ ์ ์ ์ ์๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์ ํฉํฉ๋๋ค. ex. ๋ธ๋ก๊ทธ ํฌ์คํธ, ์ ํ ์์ธํ์ด์ง
ย
2. Dynamic Rendering
Dynamic Rendering์ ์ฌ์ฉํ๋ฉด, ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ฉด ๋ผ์ฐํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค.
๊ฐ์ธํ๋ ์ ๋ณด๋ ์์ฒญ ์์ ์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ํฉํฉ๋๋ค. ex. cookies, URLโs search params
ย
Switching to Dynamic Rendering
๋ ๋๋งํ๋ ๋์
dynamic function ๋๋
uncached data request์ด ๋ฐ๊ฒฌ๋๋ฉด Next.js๋ ์ ์ฒด ๊ฒฝ๋ก(route)๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ๋๋ก ์ ํํฉ๋๋ค. ๋ ์ค ํ๋๋ผ๋ ๋ฐ๊ฒฌ๋๋ฉด ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๋์ ๋ ๋๋งํ๋๋ก ํฉ๋๋ค.
Dynamic Function Example
cookies()
headers()
useSearchParams()
searchParams
ย
Next.js๊ฐ ์ฝ๋์์ ์ฌ์ฉํ features, APIs๋ฅผ ๋ณด๊ณ ๊ฐ ๊ฒฝ๋ก์ ๋ํด ๊ฐ์ฅ ์ ํฉํ ๋ ๋๋ง ์ ๋ต์ ์๋์ผ๋ก ์ ํํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ static์ธ์ง dynamic์ธ์ง ์ ํํ ํ์๊ฐ ์์ต๋๋ค. ๋์ ์, ํน์ ๋ฐ์ดํฐ๋ฅผ ์ธ์ ์บ์ํ๊ณ ์ฌ๊ฒ์ฆํ ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค UI์ ๋ถ๋ถ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐํ ์ง์ ์ง์คํ๋ฉด ๋ฉ๋๋ค.
ย
3. Streaming
์คํธ๋ฆฌ๋ฐ์ UI๋ฅผ ์ ์ง์ ์ผ๋ก ๊ทธ๋ฆด ์ ์๊ฒ ํด์ค๋๋ค. ์์
์ ์กฐ๊ฐ์ผ๋ก ๋ถ๋ฆฌ๋๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์ค๋น๋๋ฉด ์ค์๊ฐ์ผ๋ก ์กฐ๊ฐ์ ๋ณด๋ด์ค๋๋ค. ์ด๊ฒ์ ์ ์ ๊ฐ ํ์ด์ง์ ์ ์ฒด ๋ด์ฉ์ด ์ ๋ถ ๋ ๋๋ง๋ ๊ฒ์ ๊ธฐ๋ค๋ฆด ํ์์์ด, ํ์ด์ง์ ๋ถ๋ถ์ ์ฆ๊ฐ์ ์ผ๋ก ๋ณผ ์ ์๊ฒ ํด์ค๋๋ค.
์คํธ๋ฆฌ๋ฐ์ App Router์ ๊ธฐ๋ณธ ๋ด์ฅ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ ์ฑ๋ฅ๋ฟ๋ง ์๋๋ผ ์ ์ฒด ๊ฒฝ๋ก์ ๋ ๋๋ง์ ์ฐจ๋จํ ์ ์๋ ๋๋ฆฐ ๋ฐ์ดํฐ์ ์์กดํ๋ UI์ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐ์๋ ๋์์ด ๋ฉ๋๋ค. ์๋ฅผ๋ค์ด ์ ํ ํ์ด์ง์ ๋ฆฌ๋ทฐ๋ค..
loading.js
, React Suspense๋ฅผ ์ฌ์ฉํด ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ย