์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ 1ํธ - react suspense
๐ ์ฝ๊ธฐ ์ ์โฆ
-
๐ ๋ณธ๋ฌธ์ ๋ฑ์ฅํ๋ ๋ฌธ์ ์ ๋ํ ์์๋ suspense๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ํด๊ฒฐํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฑ์ด ์ปค์ง๊ณ ๋ณต์กํด์ง์ ๋ฐ๋ผ ๊ฐ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ
์ ์ธ์ ์ผ๋ก ์์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋๋์ ๋ํ ๊ด์
์ผ๋ก ๋ด์ฃผ์๊ธธ ๋ฐ๋๋๋ค. -
๐ 2021.07.11 ๊ธฐ์ค ์ํ์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค. ํ์ฌ ์ ์ ๋ฒ์ ์์ suspense๋ code splitting์ผ๋ก๋ง ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์ ์ํด์ฃผ์ธ์.
-
๐ ๋ณธ๋ฌธ์ ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
๐โโ๏ธ suspense๊ฐ ๋ญ์ฃ ?
ํน์ ์นํ์ด์ง์ ๋ก๋ฉ ํ๋ฉด์ ๋ง๋ค์ด ๋ณธ ์ ์ด ์๋์?
๋๋ถ๋ถ ์ฌ์ฉ์์๊ฒ ๋ฌด์ธ๊ฐ ์งํ๋๊ณ ์์์ ์๋ฆฌ๊ธฐ ์ํด์ ๋ก๋ฉ ํ๋ฉด์ ๋์๋ณธ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค. react suspense๋ ์ด๋ฌํ ๋ก๋ฉ ํ๋ฉด๊ณผ ์ฐ๊ด์ด ์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์๋ค.
ํน์ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๊ณ ์๋ ๋ฐ์ดํฐ์ ์ค๋น๊ฐ ์์ง ๋๋์ง ์์์์ react์ ์๋ฆด ์ ์์ผ๋ฉฐ
data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ.
์์ ์ ์์์ ๋ฐ์ดํฐ์ ์ค๋น๊ฐ ๋๋์ง ์์์์ ์๋ฆฐ๋ค
๋ผ๋ ๊ฒ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ฅผ
๋ ๋๋งํ์ง ์๊ณ ๋ค๋ฅธ ๋ก๋ฉ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์์์ ์๋ฏธํ๋ค.
์ฌ๊ธฐ์ ๋๊ตฐ๊ฐ๋ ์์ํ ์ง๋ ๋ชจ๋ฅธ๋ค.
์ง๊ธ๊น์ง suspense ์์ด๋ ๋ก๋ฉ ํ๋ฉด์ ์ ๋ง๋ค์ด ์๋๋ฐ?
๋ผ๊ณ ํ ์ง๋ ๋ชจ๋ฅธ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ง๊ธ๊น์ง ๋ง๋ค์ด์๋ ๋ฐฉ์๋ณด๋ค suspense๊ฐ ์ ์ข์์ง ๊ฐ์ด ์์๋ณด ๋๋ก ํ์.
๐ ์ ์ฌ์ฉํ๋ ๊ฑด๊ฐ์?
์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ suspense๋ data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํจ๊ณผ์ ์ธ ๊ตฌ์กฐ๋ค.
๊ทธ๋ ๋ค๋ฉด data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ ๋, ๊ธฐ์กด ๋ฐฉ์๋ณด๋ค ์ข์ ์ด์ ๋ ๋ฌด์์ธ์ง๋ถํฐ ์ฐ์ ์ผ๋ก ์์๋ณด์.
data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ญํ
fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ํฐํด(waterfall)
ํ์์ ๋ง์์ค๋ค.
์ํฐํด์ด๋ผ๊ณ ํ๋ฉด ์ด์ ๊ฐ๋ฐ ๊ณผ์ ์ด ๋๋์ผ ๋ค์ ๊ณผ์ ์ ์งํํ ์ ์๋ ํ๋ก์ ํธ ๋ฐฉ๋ฒ๋ก ์ ๋ ์ฌ๋ฆฌ๋ ์ฌ๋์ด ๋ง์ ๊ฒ์ด๋ค.
ํ์ง๋ง fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์์ ์ํฐํด ํ์์ ์ด์ fetch ์์ฒญ์ ๋ํ ์๋ต์ด ๋์ฐฉํด์ผ
๋ค์ fetch ์์ฒญ์ ๋ณด๋ผ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ์๋ค๊ณ ์๊ฐํด๋ณด์.
- ์ปดํฌ๋ํธ 1์์ ๋ฐ์ดํฐ 1์ ์์ฒญโฆ ๊ฐ์ ธ์ค๋ ๋์ ๋ก๋ฉ ํ๋ฉด๋ง์ ๋ ๋๋ง(3์ด ์์)
- ์ปดํฌ๋ํธ 1์์ ๋ฐ์ดํฐ 1์ ์๋ต์ ๋ฐ๊ณ ์ปดํฌ๋ํธ 2๋ฅผ ๋ ๋๋ง
- ์ปดํฌ๋ํธ 2์์ ๋ฐ์ดํฐ 2๋ฅผ ์์ฒญโฆ ๊ฐ์ ธ์ค๋ ๋์ ๋ก๋ฉ ํ๋ฉด๋ง์ ๋ ๋๋ง(2์ด ์์)
- ์ปดํฌ๋ํธ 2์์ ๋ฐ์ดํฐ 2์ ์๋ต์ ๋ฐ๊ณ ์ปดํฌ๋ํธ 3์ ๋ ๋๋ง
์ด ์ํฉ์์ ๋ฌด์กฐ๊ฑด ๋ฐ์ดํฐ 1์ ๋ํ ์๋ต์ ๋ฐ๊ณ ๋์์ผ ๋ฐ์ดํฐ 2์ ๋ํ ์์ฒญ์ด ์คํ๋๋ค. ๋ฐ์ดํฐ 2์ ๋ํ ์์ฒญ ์์ฒด๋ 2์ด๋ง ์์๋จ์๋ ๋ถ๊ตฌํ๊ณ ๋ฐ์ดํฐ 1์ ๋ํ ์์ฒญ ๋๋ฌธ์ 3์ด๋ฅผ ๋ฌด์กฐ๊ฑด ๊ธฐ๋ค๋ ค์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค. ์ฐธ๊ณ ์ฝ๋
์ด๋ฌํ ๋ฌธ์ ๋ ์ปดํฌ๋ํธ ๋ ๋๋ง -> data fetching ์์ฒญ -> data ์๋ต
๊ณผ ๊ฐ์ด ๋์ํ๋ ๊ตฌ์กฐ ๋๋ฌธ์ ์ผ์ด๋๋ค.
์ด ๋ฌธ์ ๋ฅผ data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๊ตฌ ์กฐ์ ํ์ํ ๋ชจ๋ data fetching ์์ฒญ์ ๋ ๋๋ง ์ด์ ์
์คํํ๋๋ก ์ค์ํํ์ฌ ํด๊ฒฐํ๋ค. ์ฆ data fetching ์์ฒญ -> data ์๋ต -> ์ปดํฌ๋ํธ ๋ ๋๋ง
์ ๊ตฌ์กฐ๋ก ๋ฐ๋๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ฉด data fetching ์์ฒญ์ด ์ปดํฌ๋ํธ ๋ ๋๋ง์ ์์กด๋์ง ์๊ณ ๋ชจ๋ ํ ๋ฒ์ ์คํ๋๋ฏ๋ก ์ํฐํด ํ์์ ๋ง์ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง์ผ๋ก ๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊น? ๊ทธ๊ฑด ์๋์๋ค. ์ปดํฌ๋ํธ์ ํ์ํ ๋ชจ๋ data ์๋ต์ ๋ฐ์ ๋๊น์ง ํด๋น ์ปดํฌ๋ํธ๋ ๋ฌผ๋ก ์ด๊ณ ํ์ ์ปดํฌ๋ํธ๋ค๋ ๋ ๋๋งํ ์ ์๋ค๋ ์ ์ด ๋ฌธ์ ์๋ค. ๋ํ ํ์ ์ปดํฌ๋ํธ๋ค์ ๋ก๋ฉ๋ ์๋ฏธ๊ฐ ์์ด์ ธ ๋ฒ๋ ธ๋ค. ํ์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ์์ ์์๋ ์์ ์ปดํฌ๋ํธ์ ์ํด ์ด๋ฏธ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ต๋ฐ์ ์ํ์ด๊ธฐ ๋๋ฌธ์ ํ์ ์ปดํฌ๋ํธ์ ๋ก๋ฉ์ ์ ๋ ๋ ๋๋ง ๋์ง ์์ ๊ฒ์ด๋ค.
์ฌ์ค ์ ์ฐธ๊ณ ์ฝ๋์์๋ Promise.all()
์ ์ฌ์ฉํ๊ณ ์๋๋ฐ ๊ตณ์ด Promise.all()์ ์ฌ์ฉํ์ง ์๊ณ
๋ฐ๋ก fetching ์์ฒญ์ ๋๋์ด๋ ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋ฐ๋ก ๋๋๋ ๋ฐฉ์์
๋ฐ์ดํฐ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ ์ ์ ์ด๋ ค์์ง๋ค. ๊ฐ๋ฐ์๋ค์ ์ข ๋ ๊ฐ๋จํ ๋ฐฉ์์ ์ํ๋ค.
์ฌ๊ธฐ์ suspense๊ฐ ๋ฑ์ฅํ๋ค.
suspense์ ์ญํ
suspense์ ์ญํ ์ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค. ํ๋์ฉ ์์๋ณด์.
โจ 1. ๋ชจ๋ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ํ๋ฉด์ ๋ ๋๋งํ ์ ์๋ค.
์์ fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง์ ์ฌ์ฉํ์ ๋ ๊ตฌ์กฐ๋ฅผ ๋ค์ ๋ณด์.
data fetching ์์ฒญ -> data ์๋ต -> ์ปดํฌ๋ํธ ๋ ๋๋ง
์ด ๊ณผ์ ์ ์ข ๋ ์์ธํ ๋ค์ฌ๋ค ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
data fetching ์์ฒญ -> ๋ก๋ฉ์ค UI ๋ ๋๋ง -> data ์๋ต -> ์ปดํฌ๋ํธ์ ์๋ต ๋ฐ์
์ด๋ฌํ ๊ตฌ์กฐ์์ suspense๋ ์์ฒญ ์งํ ์์ฒญ ๋ฆฌ์์ค
๋ฅผ ๋ฐ๋ก ์ปดํฌ๋ํธ๋ก ์ฃผ์
ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
data fetching ์์ฒญ -> suspense ํ์์ ์ปดํฌ๋ํธ์ ์์ฒญ ๋ฆฌ์์ค๋ฅผ ๋ฐ์ -> suspense์ ์ํด ๋ก๋ฉ UI ๋ ๋ -> ์์ฒญ ๋ฆฌ์์ค๋ก data ์๋ต์ด ๋ค์ด์ด -> ์ปดํฌ๋ํธ์ ์๋ต ๋ฐ์
์ฌ๊ธฐ์ ๋งํ๋ ์์ฒญ ๋ฆฌ์์ค๋ Promise์ ํํ๊ฐ ์๋๋ค.
data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ๋์ด์๋ ์ผ๋ฐ ๊ฐ์ฒด์ธ๋ฐ
fetch API๋ก ๋ชจ๋ฐฉํ ํํ๊ฐ ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์.
์ด๋ฐ ๊ตฌ์กฐ๋ก ๋ฐ๋๋ฉด fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ฌ์ฉํ์ ๋ ๋ชจ๋ data ์๋ต์ ๊ธฐ๋ค๋ ค์ผ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ ๋๋งํ ์ ์์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. fetching ์์ฒญ ์งํ ์๋ต ๋์ฐฉ ์ฌ๋ถ์๋ ์๊ด์์ด ๋ ๋๋ง์ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
โจ 2. ๊ฒฝ์ ์ํ ๋ฐ์์ ๋ฐฉ์งํ๋ค.
suspense๋ data fetching์ ์ํ ๊ฒฝ์ ์ํ(Race Condition)
๋ฐ์์ ๋ฐฉ์งํ๋ค.
์ฐ์ ๊ฒฝ์ ์ํ๋ผ๋ ์ฉ์ด๋ถํฐ ์์๋ณด์. ์ํค๋ฐฑ๊ณผ์์๋ ์ด๋ ๊ฒ ์ค๋ช ํ๊ณ ์๋ค.
๊ณต์ ์์
์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ๋์์ ์ ๊ทผ
์ ์๋ํ ๋ ์ ๊ทผ์ ํ์ด๋ฐ์ด๋ ์์ ๋ฑ์ด ๊ฒฐ๊ณผ๊ฐ์ ์ํฅ์ ์ค ์ ์๋ ์ํ
๊ทธ๋ ๋ค๋ฉด javascript ํ๊ฒฝ์์ ๊ฒฝ์ ์ํ๋ ๋ฌด์์ผ๊น? ์ฌ๋ฌ ๊ฐ์ ๋น๋๊ธฐ ์์ (fetching response)์ ๊ฒฐ๊ณผ๊ฐ ํ๋์ DOM ๊ฐ์ฒด์ ๋ฐ์๋๋ ์ํฉ์ด ์์ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ๊ฐ์ ํด๋ณด์.
- ๋ฏธํค, ์ฃผ๋ชจ, ์ฌ๋ฐ, ํ๋ ธ, ์นด์ผ 5๊ฐ์ ๋ฒํผ์ด ์๊ณ ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ฐ ํฌ๋ฃจ์ ๋ํ ํ๋กํ์ ์๋ฒ๋ก ์์ฒญํ๋ค.
- ํ๋กํ ์์ฒญ ์๋ต์ ์ฑ์ด ๋ฐ์ผ๋ฉด ํด๋น ์ ๋ณด๋ฅผ
์ปดํฌ๋ํธ์ ์ ๋ฐ์ดํธํ๋ค.
์ฌ๊ธฐ์ ์ฌ๋ฌ ๋ฒํผ์ ๋น ๋ฅธ ์๋๋ก ๋๋ฅธ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ณผ์ฐ ๋ง์ง๋ง์ ๋๋ฅธ ๋ฒํผ๊ณผ
์ด๋ฌํ ๋ฌธ์ ๋ ์ ๋ฐ์ํ ๊น? ๊ทธ ์ด์ ๋ ๋ฒํผ์ ๋๋ฅธ ์์๋๋ก ํ๋กํ ์์ฒญ์ ๋ํ ์๋ต์ด ๋์ฐฉํ๊ณ
์์๋๋ก
๊ทธ๋ ๋ค๋ฉด ์ด ๋ฌธ์ ๋ฅผ suspense๋ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น. suspense๋ state ์ค์ ์๊ธฐ๋ฅผ ๋ฐ๊พธ์ด ์ด๋ฅผ ํด๊ฒฐํ๋ค.
์ด์ ์ ์ฝ๋๋ A ํ๋กํ ์์ฒญ -> ๋ก๋ฉ UI ๋ ๋ -> A ํ๋กํ ์๋ต -> <Profile />์ ์๋ต ๋ฐ์
์ ์์์๋ค๋ฉด
suspense๋ ์ด ๊ณผ์ ์ A ํ๋กํ ์์ฒญ -> <Profile />์ A ํ๋กํ ์์ฒญ ๋ฆฌ์์ค ๋ฐ์ -> suspense์ ์ํด A ์์ฒญ์ ๋ํ ๋ก๋ฉ UI ๋ ๋ -> ์์ฒญ ๋ฆฌ์์ค๋ก A ํ๋กํ ์๋ต์ด ๋ค์ด์ด -> <Profile />์ ์๋ต ๋ฐ์
์ผ๋ก ๋ฐ๊พผ๋ค.
๊ฒฝ์ ์ํ๋ฅผ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ ์ด์ ๋
suspense๊ฐ ์๋ต์ด ์ธ์ ์ค๋์ง, ์๊ฐ์ ๋ํ ๊ฒ์ ๊ณ ๋ คํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋กํ์ ์์ฒญํจ๊ณผ ๋์์ ํด๋น ์์ฒญ ๋ฆฌ์์ค๋ฅผ
suspense๋ ์ด๋ฅผ ํตํด ๊ฒฝ์ ์ํ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๐ suspense์ ํจ๊ป ์ฌ์ฉ๋๋ data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ฑฐ์ ๋ฌด์กฐ๊ฑด data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ suspense๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์์๋ฅผ ๋ช ๊ฐ์ง ๋ณด๋๋ก ํ์.
Relay
graphQL์ ์์กด์ ์ธ data fetching ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
ํ์ด์ค๋ถ์์๋ suspense๋ฅผ Relay์ ํจ๊ป ์ค๋ฌด์์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ๋ค. ๊ทธ๋์ Relay ์ธ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ suspense๋ฅผ ์ฌ์ฉํ์ ๋ ์ํํ ๋์ํ ์ง ์ฅ๋ดํ ์ ์์ผ๋ฏ๋ก ๋ง์ฝ suspense๋ฅผ ์ค๋ฌด์์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ํ์ด์ค๋ถ์ Relay์ ํจ๊ป ์ฌ์ฉํ ๊ฒ์ ์ถ์ฒํ๊ณ ์๋ค.
๋ง์ฝ graphQL์ ์ต์ํ๊ณ suspense ๊ธฐ๋ฅ์ ์ค๋ฌด์์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด Relay๋ฅผ ์ฐ๋ ๊ฒ์ด ์ ํฉํ ๊ฒ์ด๋ค.
SWR
Data Fetching์ ์ํ react ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ SWR๋ ์ํ์ ์ผ๋ก suspense๋ฅผ ์ง์ํ๊ณ ์๋ค. ๊ฐ๋ตํ๊ฒ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
import { Suspense } from 'react'
import useSWR from 'swr'
function Profile () {
const { data } = useSWR('/api/user', fetcher, { suspense: true })
return <div>hello, {data.name}</div>
}
function App () {
return (
<Suspense fallback={<div>loading...</div>}>
<Profile/>
</Suspense>
)
}
useSWR์ ์ธ ๋ฒ์งธ ์ธ์๋ก suspense: true
๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ suspense ์ต์
์ ํ์ฑํํ ์ ์๋ค.
์ด๋ฐ ๊ฐ๋จํ ์ค์ ์ผ๋ก suspense ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ ์ธ suspense๋ฅผ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค
๐ ๋ง๋ฌด๋ฆฌ
์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ์ ๋ํ ์ฃผ์ ๋ก ์์ง ์ํ์ ์ธ ๊ธฐ๋ฅ์ด์ง๋ง React 18์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ธ suspense์ ๋ํด์ ์์๋ณด์๋ค. ๊ณต๋ถ๋ฅผ ํ๋ค ๋ณด๋ ๋น๋๊ธฐ ๋์์ด ์ผ๋ง๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ง๋ํ ์ํฅ์ ๋ฏธ์น ์ ์๋๊ฐ์ ๋ํด ์๋ก์ด ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์ ์์๋ค. ์๊ฐํด๋ณด๋ฉด ์ฌ์ฉ์๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ๋๋ถ๋ถ์ ์๊ฐ์ data fetching๊ณผ ๊ด๋ จ์ด ์๋ค. suspense๋ฅผ ํตํด ์ด ๊ณผ์ ์ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด ์ข ๋ ์พ์ ํ ๊ฒฝํ์ ์ฌ์ฉ์์๊ฒ ์ค ์ ์์ ๊ฒ์ด๋ค. ๋ค์ 2ํธ์์๋ ์ด๋ฅผ ์ข ๋ ๊ฐ์ ํ ์ ์๋ concurrent mode์ ๋ํด์ ์์๋ณผ ์์ ์ด๋ค.