๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

[ React 18+ ] RSC(React Server Componen) ํŒŒํ—ค์น˜๊ธฐ.

 

 

 

RSC๋Š” React Server Components์˜ ์•ฝ์ž๋กœ, React18 ๋ฒ„์ „๋ถ€ํ„ฐ ๋“ฑ์žฅํ•œ ๊ฐœ๋…์ด๋‹ค.

์„œ๋ฒ„์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

 

RSC๋Š” React์˜ ์ž์ฒด์ ์ธ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ Next.js๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, RSC๋Š” ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Node.js๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ Next.js๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Express.js ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ , ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ,  Webpack ๋ฒˆ๋“ค๋ง(์„œ๋ฒ„ / ํด๋ผ์ด์–ธํŠธ), ๋ฐ์ดํ„ฐ ํ†ต์‹ , ์„ฑ๋Šฅ ์ตœ์ ํ™”(์บ์‹ฑ) ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ์„ค์ •์„ ์ง์ ‘ ํ•ด์•ผ ํ•ด์„œ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.

 

Next.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„์—์„œ fetch()ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ , ๋ Œ๋”๋ง๊นŒ์ง€ ๋ชจ๋‘ ์„œ๋ฒ„ ์ชฝ์—์„œ ๊ตฌํ˜„์ด ๋œ๋‹ค.

fetch()๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ web API์ด์ง€๋งŒ, LTS๋ฒ„์ „(18 ์ด์ƒ) Node.js์—์„œ๋Š”  fetch() API๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์„œ๋ฒ„์ปดํฌ๋„ŒํŠธ์—์„œ node.js์˜ Fetch API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์—์„œ fetch๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ fetch API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

RSC๋Š” Next.js 13+ App Router์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Next.js์˜ Pages Router์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š”, Pages Router์˜ ์„ค๊ณ„๊ฐ€ RSC์˜ ํ•ต์‹ฌ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์„œ๋ฒ„ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ ์ง„์  ๋ Œ๋”๋ง, ๋ฒˆ๋“ค ์ตœ์ ํ™”, Suspense ๊ธฐ๋ฐ˜ ๋™์ž‘ ๋“ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— RSC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์ด Next.js 13+ App Router ์ด๋‹ค.

 


 

RSC ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

React Server Components(RSC)๊ฐ€ ๋‚˜์˜จ ์ด์œ ๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•˜์˜€๋‹ค. ๊ธฐ์กด React์™€ SSR ๋ชจ๋ธ๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ๋ช‡ ๊ฐ€์ง€ ๊ทผ๋ณธ์ ์ธ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์ค‘์‹ฌ ๋ Œ๋”๋ง๊ณผ ์„œ๋ฒ„ ์ค‘์‹ฌ ๋ Œ๋”๋ง์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” ๋“ฑ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  React.js 18์—์„œ ๋“ฑ์žฅํ–ˆ๋‹ค.

 


 

์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด์ 

ํŠน์ง• ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ
์‹คํ–‰ ํ™˜๊ฒฝ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰
๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์„œ๋ฒ„ ์ž์›(DB, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ)์— ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ API ์š”์ฒญ์„ ํ†ตํ•ด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ
๋ฒˆ๋“ค ํฌ๊ธฐ ํฌํ•จ ์—ฌ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“ค๋˜์ง€ ์•Š์Œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“ค๋จ
์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์˜ˆ ๋ฐ์ดํ„ฐ ๋กœ๋“œ, SEO ์นœํ™”์ ์ธ HTML ์ƒ์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ, ์ž…๋ ฅ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ์ƒํƒœ ๊ด€๋ฆฌ

 

 

1. ํด๋ผ์ด์–ธํŠธ ์ค‘์‹ฌ ๋ Œ๋”๋ง(CSR)์˜ ํ•œ๊ณ„ ๊ทน๋ณต

 

2. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”

 

3. SEO์™€ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„ 

 

4. ์ ์ง„์  ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration)์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๋ Œ๋”๋ง ๋น„์šฉ ๊ฐ์†Œ

 

5. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋กœ์ง์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ด ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

 

6. ํ˜„๋Œ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žก์„ฑ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ ์ถฉ์กฑ


 

 

๊ทธ๋Ÿผ ์ด์ „์—๋Š” ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  RSC๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ๊ทธ๊ฑด React์˜ ์ดˆ๊ธฐ ์„ค๊ณ„์™€ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์  / ๊ตฌ์กฐ์  ํ•œ๊ณ„์™€, RSC์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์ด React.js 18์—์„œ ๋„์ž…๋œ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜์™€ API์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 


๊ธฐ์กด React์˜ ํ•œ๊ณ„์ 

 

1. ๋™์‹œ์„ฑ๊ธฐ๋Šฅ (Concurrency Features)์˜ ๋ถ€์žฌ

React.js 18 ์ด์ „์—๋Š” ๋™์‹œ์„ฑ(Concurrency) ๊ฐœ๋…์ด React์— ์กด์žฌํ•˜์ง€ ์•Š์•˜๋‹ค. RSC๋Š” ๋™์‹œ์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, Suspense๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

-> React.js 18 ์—์„œ ์ถ”๊ฐ€๋œ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ์€ React Suspense๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ, ์ ์ง„์ ์œผ๋กœ UI๋ฅผ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š”๋ฐ, RSC๋Š” ์ด ์ ์ง„์  ๋ Œ๋”๋ง์„ ํ•ต์‹ฌ์œผ๋กœ ํ•œ๋‹ค. ๋˜ํ•œ Streaming Rendering์„ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

2. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ๋ถ„์˜ ์–ด๋ ค์›€

RSC๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“ค๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ React.js 18 ์ด์ „์—๋Š” ์ด๋Ÿฐ ๊ตฌ๋ถ„์„ ์œ„ํ•œ ๊ธฐ์ˆ ์  ์ง€์›์ด ์—†์—ˆ๋‹ค. (React.js 18 ์ดํ›„์—๋Š”. server.js / .client.js ์˜ ๋ช…์‹œ์ ์ธ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ํ†ตํ•ด React๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.)

 

-> RSC๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด์„œ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“ค๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋‚˜, React.js 18 ์ด์ „์—๋Š” ์ด๋Ÿฐ ๊ตฌ๋ถ„์„ ์œ„ํ•œ ๊ธฐ์ˆ ์  ์ง€์›์ด ์—†์—ˆ๋‹ค. (์ด์ „์—๋Š” React ์•ฑ์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฒˆ๋“ค๋ง ๊ณผ์ •์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๋„๋ก ์„ค๊ณ„๋œ ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์ง€ ์•Š๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์—ˆ์Œ.)

 

 

3. ์„œ๋ฒ„ ๋ Œ๋”๋ง์˜ ์ œ์•ฝ(Old SSR Model)

React.js 18 ์ด์ „์˜ ์„œ๋ฒ„ ๋ Œ๋”๋ง ๋ชจ๋ธ์€ ์ œํ•œ๋œ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณต๋˜์—ˆ๋‹ค. ๊ธฐ์กด SSR์€ ์ „์ฒด HTML์„ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•œ ํ›„, ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฅผ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ–ˆ๋Š”๋ฐ, ์ด ๋ฐฉ์‹์€ RSC์™€ ์ถฉ๋Œํ–ˆ๋‹ค. 

-> React.js 18 ์ด์ „์—๋Š” ํด๋ผ์ด์–ธํŠธ ์ค‘์‹ฌ์˜ ํ•˜์ด๋“œ๋ ˆ์ด์…˜์œผ๋กœ ๋™์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“คํ•ด์•ผ ํ–ˆ๊ณ , ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ์ค€๋น„ํ•œ ํ›„ ํ•œ ๋ฒˆ์— ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ RSC๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์ด ์ง€์›๋˜์ง€ ์•Š์•˜๋‹ค.

 

 

4. React Suspense์˜ ์ œํ•œ์ ์ธ ์ง€์›

 React.js 16์—์„œ ๋„์ž…๋œ React Suspense๋Š”, 18 ์ด์ „์—๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ์ œํ•œ์ ์œผ๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค. ์„œ๋ฒ„์—์„œ๋Š” Suspsnse๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ UI๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ Œ๋”๋ง ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค. RSC๋Š” Suspense๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ž‘์—…์„ ์กฐ์œจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜๋ ค๋ฉด 18์˜ ๊ฐœ์„ ๋œ Suspense๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

 

 

5. ๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ ์„œ๋ฒ„ ๋กœ์ง์˜ ๋ถ„๋ฆฌ ๋ฌธ์ œ

React.js 18 ์ด์ „์—๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋กœ์ง๊ณผ UI ๋ Œ๋”๋ง ๋กœ์ง์ด ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์—๋„ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋กœ์ง์ด ํฌํ•จ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. React.js 18 ์ด์ „์—๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ๋„ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋กœ์ง์ด ํฌํ•จ๋˜๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ ์ฆ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

 

6. Streaming Rendering ํ”„๋กœํ† ์ฝœ์˜ ๋ถ€์žฌ

React.js 18์—์„œ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Streaming Rendering ํ”„๋กœํ† ์ฝœ์ด ๋„์ž…๋˜์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๊ฒƒ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋•๋Š”๋ฐ, ์ด์ „์—๋Š” ์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์—ˆ๋‹ค. 

 

 

 


 

RSC ๋™์ž‘ ์›๋ฆฌ

 

 

1. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ„๋ฆฌ

 

์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ 

- ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“ค๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค์–ด, ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.

- ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด๋‚˜ CPU ์ง‘์•ฝ์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

- HTML์ด๋‚˜ React ์š”์†Œ์˜ "์ง๋ ฌํ™”๋œ ํ˜•ํƒœ(serialized form)"๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋œ๋‹ค.

- React์—์„œ ํŒŒ์ผ ํ™•์žฅ์ž(.server.js)๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ

- ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฒˆ๋“ค๋œ๋‹ค.

- ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ(interaction)์„ ๋‹ด๋‹นํ•œ๋‹ค.

- React์—์„œ ํŒŒ์ผ ํ™•์žฅ์ž(.client.js)๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

 

 

2. ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง (Rendering on Server)

 

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ

- ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ํŽ˜์นญ

- ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, REST API, GraphQL ๋“ฑ๊ณผ ์ง์ ‘ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋ฉด ์ด๋ฅผ React ์ปดํฌ๋„ŒํŠธ๋กœ ๋ Œ๋”๋ง(Hydration)ํ•œ๋‹ค.

 

์ถœ๋ ฅ ์ƒ์„ฑ

- ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ. ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , '์ฐธ์กฐ'๋กœ๋งŒ ๋‚จ๋Š”๋‹ค.

- ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง๋ ฌํ™”๋œ JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

3. ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ์˜ ํด๋ผ์ด์–ธํŠธ ์ „์†ก

 

- ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ๋œ ๊ฒฐ๊ณผ๋Š” JSON ํ˜•ํƒœ๋กœ (UI์˜ HTML, ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ, ํŠธ๋ฆฌ ๊ตฌ์กฐ, ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ฐธ์กฐ ์ •๋ณด ๋“ฑ์„ ํฌํ•จ) ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋œ๋‹ค.

// jsonํŒŒ์ผ ํ˜•ํƒœ

{
  "type": "div",
  "props": {
    "children": [
      {
        "type": "h1",
        "props": {
          "children": "Hello World"
        }
      },
      {
        "type": "$RC", // ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ† ํฐ
        "id": "ClientComponent123",
        "props": {
          "data": "example data"
        }
      }
    ]
  }
}

 

- ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ React์˜ ํŠน์ˆ˜ํ•œ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๊ฒฐํ•ฉํ•˜๊ณ  ๋ Œ๋”๋ง ํ•œ๋‹ค.

 

 

 

4. ํด๋ผ์ด์–ธํŠธ์—์„œ์˜ ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration on Client)

 

HTML๊ณผ JSON ๋ฐ์ดํ„ฐ ๊ฒฐํ•ฉ

- ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ HTML๊ณผ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ์ดˆ๊ธฐ UI๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

- ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํฌํ•จ๋œ ๋ถ€๋ถ„์€ ์ดˆ๊ธฐ์—๋Š” 'place holder'๋กœ ๋ Œ๋”๋ง ๋˜๋‹ค๊ฐ€ ์ดํ›„ ๋ฒˆ๋“ค ํŒŒ์ผ์ด ๋กœ๋“œ๋˜๋ฉด React๊ฐ€ ํ•˜์ด๋“œ๋ ˆ์ด์…˜์„ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ•œ๋‹ค.

 

์ ์ง„์  ํ•˜์ด๋“œ๋ ˆ์ด์…˜

- ํด๋ผ์ด์–ธํŠธ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ ์ง„์ ์œผ๋กœ ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration)์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

- ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์ด ์—†๋Š” ๋ถ€๋ถ„์€ ๋ฏธ๋ค„์งˆ ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

5. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์กฐํ•ฉ

 

์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ

- ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๋ฉด Client Component๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰๋  ์ •๋ณด๋งŒ ํฌํ•จ๋œ ์ƒํƒœ๋กœ ์ „์†ก๋œ๋‹ค.

// JSX
import ClientComponent from './ClientComponent.client';

export default function ServerComponent() {
  return (
    <div>
      <h1>Server Rendered Content</h1>
      <ClientComponent /> {/* ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ์‹คํ–‰๋จ */}
    </div>
  );
}

 

 

 

6. RSC์˜ ํŠน์ˆ˜ ํ”„๋กœํ† ์ฝœ

 

React๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ์ž์ฒด์ ์ธ ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ.

- ์ด ํ”„๋กœํ† ์ฝœ์€ ์„œ๋ฒ„์—์„œ JSON ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ•„์š”ํ•  ๋•Œ๋งŒ React ์š”์†Œ๋ฅผ ์žฌ์กฐํ•ฉํ•œ๋‹ค.

- ์ด ๊ณผ์ •์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฒฐํ•ฉํ•œ๋‹ค.

- React Server Components์˜ ํŠน์ˆ˜ ํ”„๋กœํ† ์ฝœ์€ JSON ์ง๋ ฌํ™”, ์ปดํฌ๋„ŒํŠธ ์ฐธ์กฐ ํ† ํฐ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ญํ• ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— RSC๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๋ฉฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

7. RSC์˜ Lazy Loading + Suspense์™€์˜ ์กฐํ•ฉ

 

- ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ๋œ ๋ฐ์ดํ„ฐ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ  ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด RSC์™€ ๊ฒฐํ•ฉ๋˜๋ฉด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•„์š”ํ•œ ์‹œ์ ์— ์ง€์—ฐ๋กœ๋“œ(lazy load)ํ•˜์—ฌ, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

// JSX
import React, { Suspense } from 'react';

const LazyServerComponent = React.lazy(() => import('./ServerComponent.server'));

export default function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <LazyServerComponent />
    </Suspense>
  );
}

 

- React.lazy๋Š” ๋™์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋กœ๋“œ(์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…)ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ํ•„์š”ํ•  ๋•Œ๋งŒ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์™€์„œ ๋ Œ๋”๋ง ํ•œ๋‹ค. (์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ถ•์†Œ ๋ฐ ์•ฑ์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ํ–ฅ์ƒ)

- Suspense๋Š” React.lazy์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ๋กœ๋”ฉ์ƒํƒœ(Placeholder)๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜์—ฌ ๊ฒฐ๊ณผ์ ์œผ๋กœ React๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ Suspense๊ฐ€ ๋Œ€์ฒด UI๋ฅผ ๋ Œ๋”๋ง ํ•œ๋‹ค.

 

 


 

 

RSC ํ๋ฆ„ ์ •๋ฆฌ

 

1. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๊ณ , ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œ๋จ.

 

2. React.lazy๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜ด.

 

3. Suspense๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ œ๊ณต.

 

4. React๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ์™€ Suspense๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ UI๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ Œ๋”๋ง ํ•จ.

 

 


 

 

RSC ์žฅ์ 

 

 

์„ฑ๋Šฅ ์ตœ์ ํ™”

  • JavaScript ๋ฒˆ๋“ค ํฌ๊ธฐ ๊ฐ์†Œ : ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” JavaScript ๋ฒˆ๋“ค ํŒŒ์ผ์—์„œ ์™„์ „ํžˆ ์ œ์™ธ๋˜๊ณ , ์ด์— ๋”ฐ๋ผ ์ดˆ๊ธฐ ๋กœ๋”ฉ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ : ์„œ๋ฒ„์—์„œ HTML์„ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ์—๋„ ํ™”๋ฉด์˜ ์ผ๋ถ€๋ฅผ ๋จผ์ € ๋ณผ ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค. 
  • ๋ณด์•ˆ ๊ฐ•ํ™” : ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ๋กœ์ง์ด๋‚˜  API ํ‚ค ๊ฐ™์€ ์ •๋ณด๋Š” ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์— ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ.
  • ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง : ์„œ๋ฒ„์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , UI๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ Œ๋”๋ง ํ•˜๋Š” ๋ถ€๋‹ด์ด ์ค„์–ด๋“ ๋‹ค. 

 

๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(DX) ๊ฐœ์„ 

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฆฌ : ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง€๊ณ , ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ UI๋กœ์ง์ด ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.
  • ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋กœ์ง ๊ฐ„์†Œํ™” : ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋กœ์ง์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
  • SEO ์นœํ™”์  : ์„œ๋ฒ„์—์„œ HTML์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„์ด ์‰ฝ๊ฒŒ ์ฝ˜ํ…์ธ ๋ฅผ ํฌ๋กค๋งํ•  ์ˆ˜ ์žˆ์–ด SEO ์ตœ์ ํ™”์— ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋ฆฌํŒฉํ† ๋ง ์šฉ์ด : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์—ญํ• ์ด ๋ช…ํ™•ํžˆ ๋‚˜๋‰˜์–ด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์˜ํ–ฅ ๋ฒ”์œ„๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

 

์œ ์—ฐํ•œ UI ๊ฐœ๋ฐœ

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์กฐํ•ฉ : ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์™€ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒํ˜ธ์ž‘์šฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. 
  • ์ ์ง„์  ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€๋Šฅ : ๊ธฐ์กด React ์•ฑ์—์„œ๋„ ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ RSC๋กœ ์ „ํ™˜ํ•˜๋ฉฐ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ „์ฒด ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์‰ฝ๊ฒŒ ๋„์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ตœ์‹  ์›น ์•„ํ‚คํ…์ฒ˜์™€์˜ ๋ถ€๋“œ๋Ÿฌ์šด ํ†ตํ•ฉ

  • RSC๋Š” ์ตœ์„  ์›น ์•„ํ‚คํ…์ฒ˜(Edge Computing, CDN, Serverless ๋“ฑ)์™€ ์ž˜ ๋งž๋Š”๋‹ค.
  • Vercel์ด๋‚˜, Netlify ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ๊ณผ์˜ ์—ฐ๋™์—์„œ ์ตœ์ ํ™”๋œ ์„ฑ๋Šฅ ์ œ๊ณต

 

 


 

๊ธฐ์กด React์™€ RSC์˜ ๊ฐœ์„ ์  ์ •๋ฆฌ

๊ธฐ์กด React RSC ๊ฐœ์„ ์ 
ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹คํ–‰ ์„œ๋ฒ„์—์„œ HTML์„ ์ƒ์„ฑ, ํด๋ผ์ด์–ธํŠธ์— ๊ฒฐ๊ณผ๋งŒ ์ „์†ก
์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋Š๋ฆผ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ Œ๋”๋ง์œผ๋กœ ์ดˆ๊ธฐ ํ™”๋ฉด์„ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œ
๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ UI ๊ฒฐํ•ฉ ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์ฒ˜๋ฆฌ, ํด๋ผ์ด์–ธํŠธ์— ๋ถˆํ•„์š”ํ•œ ๋กœ์ง ์ œ๊ฑฐ
JavaScript ๋ฒˆ๋“ค ํฌ๊ธฐ ํผ ํด๋ผ์ด์–ธํŠธ์— ํ•„์š”ํ•œ JavaScript๋งŒ ์ „์†ก
SEO์— ๋ถˆ๋ฆฌํ•จ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ HTML๋กœ SEO ์ตœ์ ํ™”