React - two hours daily: Suspense, Lazy

๋ฐ•์ƒํ•˜ยท2023๋…„ 10์›” 30์ผ
0

TILย  CS/JS

๋ชฉ๋ก ๋ณด๊ธฐ
22/22
post-thumbnail

์ฒซ React ํฌ์ŠคํŒ… ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
React 18v์—์„œ ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๋ณ€๊ฒฝ์ ์€ ํ•„์ž ์ƒ๊ฐ์— Suspense์ด๋‹ค.
์‚ฌ์‹ค Suspense๋Š” 16v๋ถ€ํ„ฐ ์žˆ์—ˆ์ง€๋งŒ 18v์—์„œ ์ œ๋Œ€๋กœ ๊ฐ–์ถฐ์ง„ ๊ธฐ๋Šฅ์ด๋ผ๊ณ ํ•œ๋‹ค.

์ด๋ฅผ ์•Œ๊ฒŒ ๋œ ๊ณ„๊ธฐ๋Š” ์นœ๊ตฌ์˜ ์ž๋ฃŒ ๊ณต์œ ์ด๋‹ค. ๋•๋ถ„์— ํ•™์Šต์„ ํ•  ์ˆ˜ ์žˆ์–ด ๊ณ ๋ง™๋‹ค.
์ด๋Ÿฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ฐธ ํ•„์š”ํ•œ๊ฑฐ๊ฐ™๋‹ค.. ๋จผ์ € ๊ณต์œ  ๋ฐ›์€ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์€ ์•„๋ž˜์˜ ๋งํฌ์— ์ฒจ๋ถ€ํ•˜๊ฒ ๋‹ค.
๋ ˆ์ „๋“œ ๋ธ”๋กœ๊ทธ ๋งํฌ

๋ณธ๋ก ๋ถ€ํ„ฐ ๋“ค์–ด๊ฐ€ Suspense์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

Suspense: ๋กœ๋”ฉํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹คโ“

๋จผ์ € Suspense๋Š” ๊ธฐ์กด์˜ isLoading์„ ์ด์šฉํ•œ loading์ฒ˜๋ฆฌ๋ฅผ ๋”์šฑ ๊ฐ„์†Œํ™”ํ•ด์ค€๋‹ค. ์ฆ‰, ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ ํ•ด๋‹น loading์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž.

//์˜ˆ์ „์˜ ์ฝ”๋“œ
const [Loading,setLoading] = useState(true)

const getApi = asnyc ()=>{
const api = await axios(`~~~~~~`)
setLoading(false)  
}

useEffect(()=>{
  getApi()
},[])

return <div>
  {Loading ?<h3>๋กœ๋”ฉ์ค‘... <h3/> : <Home/> }
  <div/>

๋ณดํ†ต ์ด๋ ‡๊ฒŒ loading ์˜ ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•ด์„œ loading ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•ด์„œ Loading ์ฐฝ์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ์ด๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ Suspense๋ฅผ ์ด์šฉํ•ด์„œ loading์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

Suspense๋Š” ์•„์ง ๋ Œ๋”๋ง์ด ์ค€๋น„๋˜์ง€ ์•Š์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์„๋•Œ ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ ์ƒํƒœ์— ๋”ฐ๋ผ fallback ์ปดํฌ๋„ŒํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋ Œ๋”๋งํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๊ทธ๋Ÿผ ๋ Œ๋”๋ง์ด ์ค€๋น„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„๊นŒ?

Suspense๋Š” React 16v, 17v์—์„œ Lazy Loading์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์—ˆ๋‹ค โ“


๋…ธ๋งˆ๋“œ์ฝ”๋”๋‹˜ ๋™์˜์ƒ

์‚ฌ์‹ค Suspense๋Š” Lazy Loading์„ ๋ณด์กฐํ•˜๋Š” ์—ญํ• ์„ ํ•ด์ฃผ์—ˆ๋‹ค.

Lazy Loading โ“

Lazy Loading: ํ•„์š”ํ•œ ์ž์›์„ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ํ•„์š”ํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๋Š” ์ „๋žต

์šฐ๋ฆฌ๊ฐ€ axios๋‚˜ fetch๋ฅผ ์‚ฌ์šฉํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”ํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ Lazy Loading์ด๋‹ค.

์ฆ‰ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค. ๋ญ๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๊ฐ€์ ธ์˜ฌ๊นŒ?

์šฐ๋ฆฌ๋Š” CSR์„ ํ•™์Šตํ•˜๋ฉฐ CSR์˜ ํŠน์ง•์ด์ž ๋‹จ์ ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์ดˆ๊ธฐ๋กœ๋”ฉ์†๋„

CSR๋ฐฉ์‹์€ ์ดˆ๊ธฐ์— ํ•œ๋ฒˆ์— ๋ชจ๋“  jsํŒŒ์ผ์„ ๋จผ์ € ๋‹ค์šด๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น jsํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฐ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ React ๋‚ด๋ถ€์—์„œ ์ œ๊ณตํ•œ๋‹ค.

React.lazy ๋ฉ”์„œ๋“œ์ด๋‹ค.

์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(Code splitting) โ“

์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์ด๋ž€ ์‰ฝ๊ฒŒ ๋งํ•ด ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Lazy Loading์„ ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์ด ๋œ๋‹ค.

์ฆ‰, ๋ฒˆ๋“ค๋Ÿฌ๋Š” ๋งŽ์€ jsํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์„œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทผ๋ฐ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์›ํ•˜๋Š” ํŒŒ์ผ๋งŒ ๋ฐ›์•„์™€ ์ดˆ๊ธฐ ๋กœ๋”ฉ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” React์˜ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๊ฐ€ React.lazy์ด๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.

const Weater = React.lazy(() => import(`./Weather`));
const Two = React.lazy(() => import(`./Two`));

์ด๋Ÿฐ์‹์œผ๋กœ importํ–‰๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์—์„œ๋งŒ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ์ฆ‰ ํŒŒ์ผ์ด ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ๋‹ค.

์ง์ ‘ ์ฝ”๋“œ๋กœ ์‹คํ—˜์„ ํ•ด ๋ณด์•˜๋‹ค.


์œ„ ์‚ฌ์ง„์€ React.lazy๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์ „์ฒด jsํŒŒ์ผ์„ ์ดˆ๊ธฐ์— ๋ฐ›์•„์˜จ ์‚ฌ๋ก€


์œ„ ์‚ฌ์ง„์€ React.lazy๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ jsํŒŒ์ผ์„ ์ดˆ๊ธฐ์— ๋ฐ›์•„์˜จ ์‚ฌ๋ก€

๊ฐ ํŒŒ์ผ์˜ ํฌ๊ธฐ์™€ ์‹œ๊ฐ„์„ ๊ณ ๋ คํ•ด๋ดค์„ ๋•Œ Lazy๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ํ•œ ์‚ฌ๋ก€๋Š” ๊ทธ ์‹œ๊ฐ„๊ณผ ์–‘์ด ํฌ๊ฒŒ ์ค„์–ด์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋Œ€๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์ผ ์ˆ˜๋ก ํ•ด๋‹น ํšจ๊ณผ๊ฐ€ ๋”์šฑ ๋šœ๋ ทํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.

lazy๋Š” ์ฝ”๋“œ์Šคํ”Œ๋ฆฟํŒ…์ด ๊ฐ€๋Šฅํ•˜๊ฒŒํ•จ, ๊ฒฐ๊ตญ ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋ถˆ๋Ÿฌ์„œ ๋ฒˆ๋“ค์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ์ค€๋‹ค. ๊ทธ๋Ÿผ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค ์™œ? ์ฒ˜์Œ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฑฐ๋‹ˆ๊นŒ !

๊ทธ๋Ÿฐ๋ฐ ์™œ Suspense์™€ Lazy๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ด ๋ ๊นŒ?

Suspense์™€ Lazy๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ โ“

์ž, ๋จผ์ € React.lazy๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ํ†ตํ•ด ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ jsํŒŒ์ผ์„ ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ณ„ ์ดˆ๊ธฐ ํŒŒ์ผ์„ ๋ฐ›๊ฒŒ๋œ๋‹ค.
(๋งˆ์น˜ SSR ์ฒ˜๋Ÿผ...)
๊ทธ๋Ÿผ ํ•ด๋‹น ์ดˆ๊ธฐ ํŒŒ์ผ์„ ๋ฐ›๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๋Š” ๋นˆ ํ™”๋ฉด์„ ๋ณด๊ฒŒ๋œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Suspense๋ฅผ ์‚ฌ์šฉํ•ด์™”๋‹ค.

Suspense๋Š” ์œ„ ํŒŒ์ผ์„ ๋ฐ›์•„์™”๋Š”์ง€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์•„์ง ๋ฐ›์•„์˜ค์ง€ ์•Š์•˜๋‹ค๋ฉด
fallback์— ๋‹ด๊ธด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋ Œ๋”๋งํ•ด์ค€๋‹ค. ์ด๋Š” Loading ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋  ์ˆ˜๋„์žˆ๊ณ  ์Šค์ผˆ๋ ˆํ†ค ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ๊ฑธ๋ฆฌ๋ฉด fallback์— ๋‹ด๊ธด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์šฐ์„  ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿผ ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•œ ์ดˆ๊ธฐ jsํŒŒ์ผ์„ ์ผ๋‹จ ๋ฐ›์•„์˜ค๊ฒŒ ๋˜๋ฉด ๊ทธ ํ›„๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

suspense์— ์˜ํ•œ loading์„ ๋ณผ ์ˆ˜ ์—†๋‹ค ์™œ? ์ด๋ฏธ ๋ฐ›์•„์™”์œผ๋‹ˆ๊นŒ!

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ๋น„๋™๊ธฐํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ suspense๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ๋น„๋™๊ธฐํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „๊นŒ์ง€ suspense์˜ fallback์— ๋‹ด๊ธด ์ปดํฌ๋„ˆํŠธ๋ฅผ ์‚ฌ์šฉ์ž๋Š” ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


์ถœ์ฒ˜

ํ˜„์žฌ Suspense๋Š” ๋ฌด์—‡์ด๋“  ๊ธฐ๋‹ค๋ฆฐ๋‹ค(Suspense for Data Fetching)

โ“

Suspense๋Š” React 18์—์„œ ๋ฌด์—‡์ด๋“  ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ํ™•์žฅ๋˜์—ˆ๋‹ค. Suspense๋Š” ์ด์ œ ์ด๋ฏธ์ง€, ์Šคํฌ๋ฆฝํŠธ, ๊ทธ ๋ฐ–์˜ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š”๋ฐ์— ๋ชจ๋‘ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

Suspense๋Š” ๊ฒฐ๊ตญ loading ํ•ธ๋“ค๋Ÿฌ โ“

์ฆ‰ ์ด๋ ‡๊ฒŒ ๊ฒฐ๋ก ์ง“๊ณ  ์‹ถ๋‹ค. Suspense๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ๋กœ๋”ฉ์„ ํ•ธ๋“ค๋งํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜. ๋‚ด๋ถ€์—์„œ ํ•œ๋•€ํ•œ๋•€ ๋กœ๋”ฉ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ๋˜๋Š” ์ „์ฒด์ ์ธ ๋กœ๋”ฉ์ด ๋๋‚˜๋ฉด ํ•œ๋ฒˆ์— ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ๋“ฑ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
์ฆ‰. ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ ์ „์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Loading Handler์ด๋‹ค.

์ถ”๊ฐ€ ํ•™์Šต์ด ํ•„์š” ๐Ÿฅฒ

์‚ฌ์‹ค ๊ธ€์„ ๋‹ค ์ฝ์€ ๋ถ„๋“ค์€ ์•„์‹œ๊ฒ ์ง€๋งŒ ๋‚ด์šฉ์ด ๋น„๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํ•„์ž๊ฐ€ ์ดํ•ดํ•œ ๋ถ€๋ถ„๋งŒ ์ ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Suspense๊ฐ€ Lazy Loading์„ ์œ„ํ•œ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์˜ ๋ณด์กฐ์—ญํ•  ์™ธ์— 18v๋ถ€ํ„ฐ๋Š” ๋น„๋™๊ธฐํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  loading ํŽ˜์ด์ง€ ์ฆ‰ fallback props์— ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฐฐ์› ๋Š”๋ฐ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์‰ฝ์ง€ ์•Š๋‹ค.

  1. ์ง€๊ธˆ๊นŒ์ง€ ํ•„์ž๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ๋กœ๋Š” ์ผ๋‹จ ๋น„๋™๊ธฐํ•จ์ˆ˜๋ฅผ ๋Œ€๊ธฐํ•˜๋ ค๋ฉด Promise๋ฅผ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— returnํ•˜๊ณ  Suspense๋กœ ๊ฐ์‹ธ์ฃผ๋Š”๊ฒƒ

  2. ๊ทธ๋ฆฌ๊ณ  ์ง€๊นŒ์ง€ ์ดํ•ดํ•œ๊ฒƒ์€ Lazy Loading ์€ axios, ์ฝ”๋“œ์Šคํ”Œ๋ฆฟ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์“ฐ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ.
    ๊ทธ๋Ÿผ React.lazy๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ํŒŒ์ผ๋งŒ ์ดˆ๊ธฐ์— ๋‚˜๋ˆ ์„œ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๋ฐ›์•„์˜ค๋Š” ๋™์•ˆ ๊ณต๋ฐฑ ์‹œ๊ฐ„์— Suspense๋ฅผ ์‚ฌ์šฉํ•ด ๊ณต๋ฐฑ ์‹œ๊ฐ„๋™์•ˆ ๋กœ๋”ฉ์ปดํฌ๋„ŒํŠธ๋‚˜ ์Šค์ผˆ๋ ˆํ†ค ๋””์ž์ธ์„ ์ง‘์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ ๊นŒ์ง€ ์ดํ•ดํ–ˆ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŒ…์€ Suspense๋กœ ๋น„๋™๊ธฐํ•จ์ˆ˜์ฒ˜๋ฆฌํ•˜๊ธฐ Suspense for Data Fetching

์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

์ถœ์ฒ˜

์ถœ์ฒ˜1
์ถœ์ฒ˜2
์ถœ์ฒ˜3

0๊ฐœ์˜ ๋Œ“๊ธ€