Skip to content

Latest commit

ย 

History

History
68 lines (49 loc) ยท 5.69 KB

File metadata and controls

68 lines (49 loc) ยท 5.69 KB

Suspense

๋ชฉ์ฐจ

๋ ˆํผ๋Ÿฐ์Šค

์ฃผ์˜์‚ฌํ•ญ

  1. ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”๋ฅผ ์ฝ๊ณ  ๊ธฐ์ˆ  ๊ฐ•์—ฐ์„ ์‹œ์ฒญํ•˜์—ฌ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.
    • ์ด๋ฒˆ์ฃผ๋Š” ์ฝ์„ ๊ฑฐ๋ฆฌ๊ฐ€ ์ •๋ง ๋งŽ๋„ค์š” ใ…Žใ…Ž ๊ทธ๋ž˜๋„ ์˜์ƒ ๊ธธ์ด๊ฐ€ ์•ฝ 18๋ถ„์ด๊ณ  ์˜์ž๋ง‰๋„ ์žˆ์–ด์„œ ์ถœ๊ทผํ•  ๋•Œ ์‹œ๋„๋ฅผ ํ•ด๋ณผ๊นŒ ๊ณ ๋ฏผ์ค‘์ž…๋‹ˆ๋‹ค

์‚ฌ์šฉ๋ฒ•

์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ๋Œ€์ฒด UI ๋ณด์—ฌ์ฃผ๊ธฐ

  1. Relay์™€ Next.js ๊ฐ™์ด Suspense๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

  2. ๋…๋‹จ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Suspense๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊ธฐ๋Šฅ์€ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ๊ฐ€ ์‹ถ์–ด์„œ ๊ฐ„๋‹จํžˆ ๊ฒ€์ƒ‰์„ ํ•ด๋ดค๋Š”๋ฐ์š”..

      But how exactly does React know that a network call is pending? As far as weโ€™ve reviewed, Suspense only renders a fallback component while waiting. Where in the code do we communicate to React that weโ€™re making a network call?

      This is where the data fetching libraries come in. Currently, Relay and SWR have integrations with Suspense to communicate loading states to React. I imagine more library authors will add integrations in the future.

      ์ด์ฒ˜๋Ÿผ ์•„์ง๊นŒ์ง„ Relay๋‚˜ SWR ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด suspense๋กœ fallback์„ ๋ณด์—ฌ์ฃผ๊ณ .. ์ด๋Ÿฐ๊ฑด ์•ˆ๋œ๋‹ค๋Š” ๋œป์ธ๊ฐ€๋ด์š”
      (์ถœ์ฒ˜: https://blog.logrocket.com/data-fetching-react-suspense/ )

    • ๊ทธ๋ฆฌ๊ณ  '๋…๋‹จ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ' (์›๋ฌธ์—์„œ๋Š” opinionated framework) ๋ผ๋Š” ๋‹จ์–ด๋„ ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ์ฑ—์ง€ํ”ผํ‹ฐํ•œํ…Œ ๋ฌผ์–ด๋ณด๋‹ˆ ์ด๋ ‡๋‹ค๊ณ  ํ•˜๋„ค์š”

      In the context of software development, an "opinionated framework" refers to a framework or tool that enforces a specific set of conventions, patterns, and best practices, often with the goal of making development easier and more productive.

    • ์ €๋Š” ์ด ๋ถ€๋ถ„์„ ์ด๋ ‡๊ฒŒ ์ดํ•ดํ–ˆ๋Š”๋ฐ ์ฐธ๊ณ ๊ฐ€ ๋ ๊นŒ ์‹ถ์–ด ๋‹ฌ์•„๋‘ฌ์š”!!

      1. UI ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์—ฌ๋ถ€๋Š” ๊ฐ์ง€ํ•˜์—ฌ Suspense๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
      2. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ๋กœ๋”ฉ์— ๋Œ€ํ•œ Suspense๋Š” ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Œ (ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ด ํ•„์š”ํ•จ)
    • [A/S] 1๋ฒˆ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ react๋งŒ์œผ๋กœ suspense ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ์‚ฌ๋ก€๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์Šคํ„ฐ๋”” ํ›„ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ฐพ์•„๋ณด๋‹ˆ React-query์—์„œ ์ง€์›ํ•˜๋Š” suspense ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋„ค์š”.. ๐Ÿ˜… ํ˜„์žฌ react๋งŒ์œผ๋กœ suspense๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      ์ฐธ๊ณ ๊ฐ€ ๋  ๋งŒํ•œ ๋งํฌ ๋‹ฌ์•„๋‘๊ณ  ๊ฐ€์š”!
      https://tech.kakaopay.com/post/react-query-2/

  3. ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ Suspense์™€ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ๊ณต์‹ API๋Š” ํ–ฅํ›„ React ๋ฒ„์ „์—์„œ ์ถœ์‹œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

    • ์ด๊ฒƒ๋„ ๊ณ„ํš์€ ์žˆ๋‚˜๋ณด๊ตฐ์š”. ๐Ÿ‘€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์ ์ธ ๋ฆฌ์•กํŠธ ์ƒํƒœ๊ณ„์—์„œ, ๋ผ์ดํ”„ ์‚ฌ์ดํด์— ํ•ต์‹ฌ์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ถ€๋ถ„์„ ๋‚ด์žฌํ™”ํ•˜๋ ค๋Š” ๋ฐฉํ–ฅ์„ฑ์€ ๊ธ์ •์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค
    • ์ด๊ฑฐ ์–ด์ œ ๊ณต๋ถ€ํ•œ use ํ›…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค! ์•„์ง ์นด๋‚˜๋ฆฌ ๋ฒ„์ „์ด์ง€๋งŒ ๋‚ด๋…„์—๋Š” ์ถœ์‹œ๋˜์ง€ ์•Š์„์ง€
    • ์•„ํ•˜ ๊ทธ๋Ÿฌ๊ฒŒ์š” use๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฑธ์ˆ˜๋„ ์žˆ๊ฒ ๋„ค์š”!

์ฝ˜ํ…์ธ ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๊ธฐ

  1. ๊ธฐ๋ณธ์ ์œผ๋กœ Suspense ๋‚ด๋ถ€์˜ ์ „์ฒด ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์–ด๋–ค ๋ฐ์ดํ„ฐ์— ์˜ํ•ด ์ง€์—ฐ๋˜๋”๋ผ๋„ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•จ๊ป˜ ๋กœ๋”ฉ ํ‘œ์‹œ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ๋‹ค๋ฅธ API๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ํ™”๋ฉด ์ƒ์—์„œ ์‹ฑํฌ๊ฐ€ ์•ˆ ๋งž๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ํ…๋ฐ ๊ทธ๋Ÿด ๋•Œ ์œ ์šฉํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค
  2. Fork
    Fork ์ด๋ฏธ์ง€
    • ์˜ค ์—ฌ๊ธฐ ์ฝ”๋“œ fork ํ•ด๋ณด๋‹ˆ๊นŒ use๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. importํ•œ ๊ฑด ์•„๋‹ˆ๊ณ  ์–ด์ œ ๊ณต๋ถ€ํ•œ use ํ›…์ด ์ •์‹์œผ๋กœ ์ถœ์‹œ๋˜๊ธฐ ์ „์ด๋ผ ๋น„์Šทํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด ๋‘” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์—๋Ÿฌ ๋ฐ ์„œ๋ฒ„ ์ „์šฉ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ Fallback ์ œ๊ณต

  1. ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง API

    • ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง ์ง€๋‚œ ๋ฒˆ์— ์†Œ๊ฐœํ–ˆ๋˜ ํŒจํ„ด ๋ฐ๋ธŒ์— ์žˆ๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

      ๋ฆฌ์•กํŠธ๊ฐ€ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด renderToNodeStream, renderToStrictNodeStream์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ž์„ธํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ๊ฒฐ๊ณผ๋Š” ์ €๋„ ์‹œ๋„ํ•ด ๋ณด์ง€ ์•Š์•„์„œ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.. (์‚ฌ์ดํŠธ ๋‚ด์—์„œ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ธด ํ•œ๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ด ๋œจ์ง€ ์•Š๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.. ใ… )