React์ ๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ์ Suspense์ ๋ฑ์ฅ
React์์๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ ํตํด ๋ ๋๋ง ์ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- fetch on render: ์ปดํฌ๋ํธ ๋ ๋๋ง์ ๋จผ์ ์์ํ๊ณ
useEffect
๋componentDidMount
๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- fetch then render:
useEffect
๋componentDidMount
๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์กฐํํ ํ ๋ ๋๋ง์ ์์ํฉ๋๋ค.
- render as you fetch: ๋น๋๊ธฐ ์์ ๊ณผ ๋ ๋๋ง์ ๋์์ ์์ํฉ๋๋ค. ์ฆ์ ์ด๊ธฐ ์ํ๋ฅผ ๋ ๋๋ง(fallback rendering)ํ๊ณ , ๋น๋๊ธฐ ์์ ์ด ์๋ฃ๋๋ฉด ๋ค์ ๋ ๋๋งํฉ๋๋ค.
ย
fetch on render
๋ fetch then render
๋ฐฉ์์๋ ์๋์ ๊ฐ์ ์ด๋ ค์์ด ์์ต๋๋ค.- Race Condition
- ๋น๋๊ธฐ ์์ ๋ค์ด ๊ฐ์ง๋ ์์ ๋ง์ ์๋ช ์ฃผ๊ธฐ๋ก ์ธํด Race Condition์ด ๋ฐ์ํฉ๋๋ค.
- fetching๊ณผ ๋ ๋๋ง ์ฌ์ด์ ๋๊ธฐํ๋ฅผ ํตํด ํด๊ฒฐํ ์ ์์ต๋๋ค.
- Waterfall Problem
- ๋๊ธฐํ ์ฒ๋ฆฌ๋ก ์ธํ ๋์์ฑ์ด ๋ถ๊ฐ๋ฅํด์ง๊ณ ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค.
- High Coupling
- ๋น๋๊ธฐ ์์ ๋ค์ ํ ๊ณณ์์ ๋์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๋ฉด ๋์์ฑ์ ๋ณด์ฅํ ์ ์์ง๋ง ์ปดํฌ๋ํธ๋ค ๊ฐ์ ์ญํ ๋ถ๋ด์ด ๋ถ๋ช ํํด์ง๊ณ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋๋ค.
ย
์์ ๊ฐ์ ์ด๋ ค์์ผ๋ก ์ธํด
render as you fetch
๋ฐฉ์์ ์ฌ์ฉํ๋ Suspense๊ฐ ๋ฑ์ฅํ๊ฒ ๋์ต๋๋ค.ย
Suspense์ ๋์ ๋ฐฉ์
Suspense๋
useEffect
๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์์ ํ์นญํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์งํ์ง ์์ต๋๋ค.ย
Suspense๋ฅผ ๋์์ํค๊ธฐ ์ํด์๋
children
์ ์ํ ์ปดํฌ๋ํธ๊ฐ ๋น๋๊ธฐ ์์
์ ์งํํ ๋ ์์ธ ์ฒ๋ฆฌ๋ก Promise
๋ฅผ throw
ํด์ค์ผ ํฉ๋๋ค.ย
๋ํ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ํตํด Suspense ์ปดํฌ๋ํธ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
- Suspense๋ฅผ ๋์ ํ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ํ์นญ
- lazy๋ฅผ ์ฌ์ฉํ ์ง์ฐ ๋ก๋ฉ ์ปดํฌ๋ํธ ์ฝ๋
ย
Suspense์ ์ฌ์ฉ๋ฒ
Suspense๋ฅผ ์ฌ์ฉํ๋ฉด
children
์ด ๋ก๋ฉ์ ์๋ฃํ ๋๊น์ง fallback
์ ํ์ํ ์ ์์ต๋๋ค.fallback
์ ๋ก๋ฉ์ด ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ์ ๋ณด์ฌ์ฃผ๋ ๋์ฒด UI๋ก ์ฃผ๋ก ๋ก๋ฉ ์คํผ๋๋ ์ค์ผ๋ ํค์ ์ฌ์ฉํฉ๋๋ค.Suspense๋
children
์ด ์ผ์ ์ค๋จ๋๋ฉด ์๋์ผ๋ก fallback
์ผ๋ก ์ ํ๋๊ณ , ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด ๋ค์ children
์ผ๋ก ์ ํ๋ฉ๋๋ค.ย
๊ธฐ๋ณธ์ ์ผ๋ก Suspense ๋ด๋ถ์ ์ ์ฒด ํธ๋ฆฌ๋ ๋จ์ผ ๋จ์๋ก ์ทจ๊ธ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ์ปดํฌ๋ํธ ์ค ํ๋๋ง ๋ฐ์ดํฐ ๋๊ธฐ๋ฅผ ์ํด ์ผ์ ์ค๋จํ๋๋ผ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ํจ๊ป ๋ก๋ฉ ํ์๊ธฐ๋ก ๋์ฒด๋ฉ๋๋ค
ย
์ปดํฌ๋ํธ๊ฐ ์ผ์ ์ค๋จ๋๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ์์ Suspense ์ปดํฌ๋ํธ๊ฐ ํด๋ฐฑ์ ํ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ Suspense ์ปดํฌ๋ํธ๋ฅผ ์ค์ฒฉํ์ฌ ๋ก๋ฉ ์ํ์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ย
๊ฐ์์ค๋ฌ์ด ๊ฒฐ๋ก
Suspense ์ฌ์ฉ๋ฒ์ ์ตํ๊ณ ์บ์ฑ์ ์ง์ ๊ตฌํํ๊ธฐ ์ด๋ ค์ฐ๋
react-query
๋ฅผ ์ฐ์!useDeferredValue
ํ
, useTransition
ํ
์ ์ด๋ ต์ต๋๋ค.ย