React์ ์คํ์ ์ธ useMutableSource ํ ์ ์ฑ๋ฅ ์๋ฏธ๋ฅผ ์ดํด๋ณด๊ณ , ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ฒํค๋์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ต์ฑ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ ์ ์ผ๋ก ๋ค๋ฃน๋๋ค. ๊ณ ๊ธ React ๊ฐ๋ฐ์๋ฅผ ์ํ ํ์ ์๋ฃ์ ๋๋ค.
React์ experimental_useMutableSource: ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ฒํค๋์ ์ฑ๋ฅ ์ํฅ ํ์
ํ๋ก ํธ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฉฐ, React์ ๊ฐ์ ํ๋ ์์ํฌ๋ ์ฑ๋ฅ ๋ฐ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด ์ค๊ณ๋ ํ์ ์ ์ธ API๋ฅผ ๋์
ํ๋ ๋ฐ ์์ฅ์๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ต๊ทผ ์ถ๊ฐ ๊ธฐ๋ฅ ์ค ํ๋๋ ์ฌ์ ํ ์คํ ๋จ๊ณ์ ์๋ useMutableSource์
๋๋ค. ์ต์ ํ๋ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ํ ํฅ๋ฏธ๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํ์ง๋ง, ํนํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ค๋ฒํค๋๋ฅผ ํฌํจํ์ฌ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ๋ ๊ฒ์ ๊ทธ ํ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ useMutableSource์ ๋์์ค, ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋ฐ ์ด๋ฅผ ์ํํ๊ธฐ ์ํ ์ ๋ต์ ์์ธํ ์ดํด๋ด
๋๋ค.
useMutableSource ์ดํดํ๊ธฐ
์ฑ๋ฅ ์ํฅ์ ๋ถ์ํ๊ธฐ ์ ์ useMutableSource๊ฐ ๋ฌด์์ ๋ฌ์ฑํ๊ณ ์ ํ๋์ง ํ์
ํ๋ ๊ฒ์ด ํ์์ ์
๋๋ค. ๋ณธ์ง์ ์ผ๋ก React ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ ๋ณ๊ฒฝ ๊ฐ๋ฅ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ตฌ๋
ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์์ค๋ ์ ๊ตํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Zustand, Jotai ๋๋ Recoil)๋ถํฐ ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ธ๋ผ์ฐ์ API๊น์ง ๋ชจ๋ ๊ฒ์ด ๋ ์ ์์ต๋๋ค. ํต์ฌ์ ์ธ ์ฐจ๋ณํ ์์๋ ์ด๋ฌํ ์ธ๋ถ ์์ค๋ฅผ React์ ๋ ๋๋ง ๋ฐ ์ฌ์กฐ์ ์ฃผ๊ธฐ์ ํตํฉํ ์ ์๋ค๋ ์ ์ด๋ฉฐ, ํนํ React์ ๋์ ๊ธฐ๋ฅ ์ปจํ
์คํธ ๋ด์์ ๊ทธ๋ ์ต๋๋ค.
useMutableSource์ ์ฃผ์ ๋๊ธฐ๋ React์ ์ธ๋ถ ์ํ ๊ด๋ฆฌ ์๋ฃจ์
๊ฐ์ ๋ ๋์ ํตํฉ์ ์ด์งํ๋ ๊ฒ์
๋๋ค. ์ ํต์ ์ผ๋ก ์ธ๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ฅผ ๊ตฌ๋
ํ๋ React ์ปดํฌ๋ํธ์์ ๋ค์ ๋ ๋๋ง์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋น๋ฒํ ์ํ ์
๋ฐ์ดํธ ๋๋ ๊น์ด ์ค์ฒฉ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. useMutableSource๋ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ๋
ํ๊ณ ์ด์ ๋ฐ์ํ๋ ๋ณด๋ค ์ธ๋ถํ๋๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋ถํ์ํ ๋ค์ ๋ ๋๋ง์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ฐ์ ์ธ ์๋ต์ฑ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํต์ฌ ๊ฐ๋ :
- ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์์ค: ์ง์ ์์ ํ ์ ์๋ ์ธ๋ถ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋๋ค.
- ๊ตฌ๋
:
useMutableSource๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์์ค์ ํน์ ๋ถ๋ถ์ ๊ตฌ๋ ํฉ๋๋ค. - ์ฝ๊ธฐ ํจ์: React์ ์์ค์์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋
useMutableSource์ ์ ๊ณต๋๋ ํจ์์ ๋๋ค. - ๋ฒ์ ์ถ์ : ํ ์ ์ข ์ข ๋ฒ์ ๊ด๋ฆฌ ๋๋ ํ์์คํฌํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํจ์จ์ ์ผ๋ก ๊ฐ์งํฉ๋๋ค.
์ฑ๋ฅ ๋ฌธ์ : ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ฒํค๋
useMutableSource๋ ์ฑ๋ฅ ํฅ์์ ์ฝ์ํ์ง๋ง, ๊ทธ ํจ๊ณผ๋ ๊ธฐ๋ณธ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ React๊ฐ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง์ ๋ณต์กํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. "๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ฒํค๋"๋ผ๋ ์ฉ์ด๋ ์์ ํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฐ์ํ๋ ๊ณ์ฐ ๋น์ฉ์ ์๋ฏธํฉ๋๋ค. ์ด ์ค๋ฒํค๋๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ํ๋ ์ ์์ต๋๋ค.
1. ๋น๋ฒํ๊ณ ๋ณต์กํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ
์ธ๋ถ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์์ค์์ ๋งค์ฐ ๋น๋ฒํ๊ฑฐ๋ ๋ณต์กํ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐํ ์ ์์ต๋๋ค. ๊ฐ ๋ณ๊ฒฝ์ ๋ฐ์ดํฐ ์์ค ์์ฒด ๋ด์์ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ จ์ ์์ ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
- ๊น์ ๊ฐ์ฒด ๋ณต์ : ๋ถ๋ณ์ฑ ํจํด์ ์ ์งํ๊ฑฐ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๊ธฐ ์ํด ๋ฐ์ดํฐ ์์ค๋ ํฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊น์ ๋ณต์ ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
- ๋ณ๊ฒฝ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ: ์ ํํ ๋ฌด์์ด ๋ณ๊ฒฝ๋์๋์ง ์๋ณํ๊ธฐ ์ํด ์ ๊ตํ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ํฐ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ๊ณ์ฐ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค.
- ๋ฆฌ์ค๋ ๋ฐ ์ฝ๋ฐฑ: ๋์ผํ ์์ค๋ฅผ ๊ตฌ๋ ํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ ์๋ฆผ์ ๋ชจ๋ ๊ตฌ๋ ๋ฆฌ์ค๋์๊ฒ ์ ํํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์์: ์ค์๊ฐ ๊ณต๋ ์์ ๋ฌธ์ ํธ์ง๊ธฐ๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์. ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ์ฝํ ์ธ ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์์ค๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝ๋ฉ๋๋ค. ๊ฐ ๋ฌธ์ ์ฝ์ , ์ญ์ ๋๋ ์์ ๋ณ๊ฒฝ์ ๋ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ณ ๋๋ก ์ต์ ํ๋์ง ์์ ๊ฒฝ์ฐ ๋์ ์ค๋ฒํค๋๋ React์ ๊ฐ์ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋ ๋๋ง ์์ง์ ์ฌ์ฉํ๋๋ผ๋ ์ง์ฐ ๋ฐ ์ด์ ํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
2. ๋นํจ์จ์ ์ธ ์ฝ๊ธฐ ํจ์
useMutableSource์ ์ ๋ฌ๋ read ํจ์๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ํจ์๊ฐ ๋น์ผ ๊ณ์ฐ์ ์ํํ๊ฑฐ๋, ํฐ ๋ฐ์ดํฐ ์ธํธ์ ๋นํจ์จ์ ์ผ๋ก ์ก์ธ์คํ๊ฑฐ๋, ๋ถํ์ํ ๋ฐ์ดํฐ ๋ณํ์ ํฌํจํ๋ ๊ฒฝ์ฐ ์ฌ๊ฐํ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. React๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ฌ๋๊ฑฐ๋ ์ด๊ธฐ ๋ ๋๋ง ์ค์ ์ด ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ๋นํจ์จ์ ์ธ read ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
- ๋๋ฆฐ ๋ฐ์ดํฐ ๊ฒ์: ํ์ํ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
- ๋ถํ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ๊ด๋ จ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๋ฐ ํ์ํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์์ ์ ์ํํฉ๋๋ค.
- ๋ ๋๋ง ์ฐจ๋จ: ์ต์
์ ๊ฒฝ์ฐ ๋๋ฆฐ
readํจ์๋ React์ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ฐจ๋จํ์ฌ UI๋ฅผ ๋ฉ์ถ๊ฒ ํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์์: ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๊ฑฐ๋์์ ์ค์๊ฐ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋ ๊ธ์ต ๊ฑฐ๋ ํ๋ซํผ์ ์์ํด ๋ณด์ธ์. ํน์ ์ฃผ์์ ๊ฐ๊ฒฉ์ ๋ํ read ํจ์๊ฐ ์ค์๊ฐ ํ๊ท ์ ๊ณ์ฐํ๊ธฐ ์ํด ๋๊ท๋ชจ์ ์ ๋ ฌ๋์ง ์์ ๊ณผ๊ฑฐ ๊ฑฐ๋ ๋ฐฐ์ด์ ๋ฐ๋ณตํ๋ ๋ฐ ์์กดํ๋ ๊ฒฝ์ฐ ์ด๋ ๋งค์ฐ ๋นํจ์จ์ ์
๋๋ค. ๋ชจ๋ ์์ ๊ฐ๊ฒฉ ๋ณ๋์ ๋ํด ์ด ๋๋ฆฐ read ์์
์ด ์คํ๋์ด ์ ์ฒด ๋์๋ณด๋์ ์๋ต์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
3. ๊ตฌ๋ ์ธ๋ถ์ฑ ๋ฐ Stale-While-Revalidate ํจํด
useMutableSource๋ ์ข
์ข
"stale-while-revalidate" ์ ๊ทผ ๋ฐฉ์๊ณผ ํจ๊ป ์๋ํ๋ฉฐ, ์ต์ "์๋ก์ด" ๊ฐ์ ๋์์ ๊ฐ์ ธ์ค๋ ๋์ ์ฒ์์๋ "์ค๋๋" ๊ฐ์ ๋ฐํํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค์ผ๋ก์จ ์ธ์ง๋ ์ฑ๋ฅ์ ํฅ์์ํค์ง๋ง, ํ์ ์ฌ๊ฒ์ฆ ํ๋ก์ธ์ค๋ ํจ์จ์ ์ด์ด์ผ ํฉ๋๋ค. ๊ตฌ๋
์ด ์ถฉ๋ถํ ์ธ๋ถํ๋์ง ์์ ๊ฒฝ์ฐ, ์ฆ ์ปดํฌ๋ํธ๊ฐ ์์ ์กฐ๊ฐ๋ง ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ํฐ ๋ถ๋ถ์ ๊ตฌ๋
ํ๋ ๊ฒฝ์ฐ ๋ถํ์ํ ๋ค์ ๋ ๋๋ง ๋๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์์: ์ ์ ์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ํ ์์ธ ํ์ด์ง๋ ์ ํ ์ ๋ณด, ๋ฆฌ๋ทฐ ๋ฐ ์ฌ๊ณ ์ํ๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๋จ์ผ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์์ค๊ฐ ์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๊ณ ์ปดํฌ๋ํธ๊ฐ ์ ํ ์ด๋ฆ(๊ฑฐ์ ๋ณ๊ฒฝ๋์ง ์์)๋ง ํ์ํด์ผ ํ์ง๋ง ์ ์ฒด ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ ํ๋ ๊ฒฝ์ฐ ๋ฆฌ๋ทฐ ๋๋ ์ฌ๊ณ ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ถํ์ํ๊ฒ ๋ค์ ๋ ๋๋งํ๊ฑฐ๋ ๋ค์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์์ต๋๋ค. ์ด๋ ์ธ๋ถ์ฑ ๋ถ์กฑ์ ๋๋ค.
4. ๋์ ๋ชจ๋ ๋ฐ ์ค๋จ
useMutableSource๋ React์ ๋์ ๊ธฐ๋ฅ์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋์์ต๋๋ค. ๋์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด React๊ฐ ๋ ๋๋ง์ ์ค๋จํ๊ณ ๋ค์ ์์ํ ์ ์์ต๋๋ค. ์ด๋ ์๋ต์ฑ์ ๊ฐ๋ ฅํ์ง๋ง useMutableSource์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฒ๋ฆฌ ์์
์ด ์ผ์ ์ค๋จ๋๊ณ ๋ค์ ์์๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์์ค์ ๊ด๋ จ ์์
์ด ์ค๋จ ๊ฐ๋ฅํ๊ฑฐ๋ ๋ค์ ์์ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์ง ์์ ๊ฒฝ์ฐ ์ด๋ ๊ฒฝ์ ์กฐ๊ฑด, ์ผ๊ด์ฑ ์๋ ์ํ ๋๋ ์๊ธฐ์น ์์ ๋์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ค๋ฒํค๋๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์ค๋จ์ ํ๋ ฅ์ ์ธ์ง ํ์ธํ๋ ๋ฐ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์์: ๊ธ๋ก๋ฒ ๋คํธ์ํฌ์์ IoT ์ฅ์น๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ณต์กํ ๋์๋ณด๋์์ ๋์ ๋ ๋๋ง์ ์ฌ์ฉํ์ฌ ๋ค์ํ ์์ ฏ์ ๋์์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์์ค๊ฐ ์ผ์ ํ๋ ๊ฐ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ํด๋น ํ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ํ์ํ๋ ํ๋ก์ธ์ค๊ฐ ์ค๋ ์คํ๋๊ณ ์ ์์ ์ผ๋ก ์ผ์ ์ค์ง ๋ฐ ๋ค์ ์์ํ๋๋ก ์ค๊ณ๋์ง ์์ ๊ฒฝ์ฐ ๋์ ๋ ๋๋ง์ผ๋ก ์ธํด ์ค๋๋ ํ๋ ๊ฐ์ด ํ์๋๊ฑฐ๋ ์ค๋จ๋ ๊ฒฝ์ฐ ๋ถ์์ ํ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ฒํค๋ ์ํ๋ฅผ ์ํ ์ ๋ต
๋คํํ๋ useMutableSource ๋ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ ๋ต์ด ์์ต๋๋ค.
1. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์์ค ์์ฒด ์ต์ ํ
์ฃผ์ ์ฑ ์์ ์ธ๋ถ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์์ค์ ์์ต๋๋ค. ์ฑ๋ฅ์ ์ผ๋์ ๋๊ณ ๊ตฌ์ถ๋์๋์ง ํ์ธํ์ญ์์ค.
- ํจ์จ์ ์ธ ์ํ ์ ๋ฐ์ดํธ: ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ถ๋ณ ์ ๋ฐ์ดํธ ํจํด์ ์ฌ์ฉํ๊ฑฐ๋ ์์๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํด diffing ๋ฐ ํจ์นญ ๋ฉ์ปค๋์ฆ์ด ๊ณ ๋๋ก ์ต์ ํ๋์๋์ง ํ์ธํ์ญ์์ค. Immer์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๊ธฐ์์ ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ง์ฐ ๋ก๋ฉ ๋ฐ ๊ฐ์ํ: ํฐ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ์ฆ์ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ํ๊ฑฐ๋ ์ฒ๋ฆฌํ์ญ์์ค. ๊ฐ์ํ(๋ชฉ๋ก ๋ฐ ๊ทธ๋ฆฌ๋)์ ๊ฐ์ ๊ธฐ์ ์ ์ง์ ๋ ์๊ฐ์ ์ฒ๋ฆฌ๋๋ ๋ฐ์ดํฐ ์์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
- ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง: ๋ฐ์ดํฐ ์์ค๊ฐ ์ด๋ฒคํธ๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ด๋ณด๋ด๋ ๊ฒฝ์ฐ React๋ก ์ ํ๋๋ ์ ๋ฐ์ดํธ ๋น๋๋ฅผ ์ค์ด๊ธฐ ์ํด ์์ค์์ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ ๋๋ฐ์ด์ฑํ๊ฑฐ๋ ์ค๋กํ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
๊ธ๋ก๋ฒ ํต์ฐฐ๋ ฅ: ์๋ฐฑ๋ง ๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ์๋ ์ง๋ฆฌ์ ๋งต๊ณผ ๊ฐ์ ๊ธ๋ก๋ฒ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ต์ ํํ์ฌ ๋ณด์ด๋ ๋ฐ์ดํฐ ๋๋ ๊ด๋ จ ๋ฐ์ดํฐ ์ฒญํฌ๋ง ๊ฐ์ ธ์ค๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ข ์ข ๊ณต๊ฐ ์ธ๋ฑ์ฑ ๋ฐ ํจ์จ์ ์ธ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋ฉ๋๋ค.
2. ํจ์จ์ ์ธ read ํจ์ ์์ฑ
read ํจ์๋ React์์ ์ง์ ์ ์ธ ์ธํฐํ์ด์ค์
๋๋ค. ์ต๋ํ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋์ญ์์ค.
- ์ ํํ ๋ฐ์ดํฐ ์ ํ: ์ปดํฌ๋ํธ์ ํ์ํ ์ ํํ ๋ฐ์ดํฐ ์กฐ๊ฐ๋ง ์ฝ์ผ์ญ์์ค. ๋ช ๊ฐ์ง ์์ฑ๋ง ํ์ํ ๊ฒฝ์ฐ ์ ์ฒด ๊ฐ์ฒด๋ฅผ ์ฝ์ง ๋ง์ญ์์ค.
- ๋ฉ๋ชจ์ด์ ์ด์
:
readํจ์ ๋ด์ ๋ฐ์ดํฐ ๋ณํ์ด ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ญ์์ค. React์ ๋ด์ฅuseMemo๋๋ ์ฌ์ฉ์ ์ง์ ๋ฉ๋ชจ์ด์ ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. - ๋ถ์์ฉ ๋ฐฉ์ง:
readํจ์๋ ์์ ํจ์์ฌ์ผ ํฉ๋๋ค. ๋คํธ์ํฌ ์์ฒญ, ๋ณต์กํ DOM ์กฐ์ ๋๋ ์๊ธฐ์น ์์ ๋์์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๋ ๊ธฐํ ๋ถ์์ฉ์ ์ํํด์๋ ์ ๋ฉ๋๋ค.
๊ธ๋ก๋ฒ ํต์ฐฐ๋ ฅ: ๋ค๊ตญ์ด ์ ํ๋ฆฌ์ผ์ด์
์์ read ํจ์๊ฐ ๋ฐ์ดํฐ ํ์งํ๋ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ์ด ํ์งํ ๋ก์ง์ด ํจ์จ์ ์ธ์ง ํ์ธํ์ญ์์ค. ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ก์ผ์ผ ๋ฐ์ดํฐ ๋๋ ์ต์ ํ๋ ์กฐํ ๋ฉ์ปค๋์ฆ์ด ํต์ฌ์
๋๋ค.
3. ๊ตฌ๋ ์ธ๋ถ์ฑ ์ต์ ํ
useMutableSource๋ ์ธ๋ถํ๋ ๊ตฌ๋
์ ํ์ฉํฉ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ญ์์ค.
- ์ปดํฌ๋ํธ ์์ค ๊ตฌ๋ : ์ปดํฌ๋ํธ๊ฐ ๊ธ๋ก๋ฒ ์ํ ๊ฐ์ฒด๊ฐ ์๋ ์์กดํ๋ ํน์ ์ํ ์กฐ๊ฐ๋ง ๊ตฌ๋ ํ๋๋ก ๊ถ์ฅํฉ๋๋ค.
- ์ ํ์: ๋ณต์กํ ์ํ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ ์ ํ์ ํจํด์ ํ์ฉํ์ญ์์ค. ์ ํ์๋ ์ํ์์ ํน์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ์ถ์ถํ๋ ํจ์์ ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ ์ถ๊ฐ ์ต์ ํ๋ฅผ ์ํด ๋ฉ๋ชจ์ด์ ์ด์ ํ ์ ์๋ ์ ํ์์ ์ถ๋ ฅ๋ง ๊ตฌ๋ ํ ์ ์์ต๋๋ค. Reselect์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ํด ํ๋ฅญํฉ๋๋ค.
๊ธ๋ก๋ฒ ํต์ฐฐ๋ ฅ: ๊ธ๋ก๋ฒ ์ฌ๊ณ ๊ด๋ฆฌ ์์คํ ์ ๊ณ ๋ คํด ๋ณด์ธ์. ์ฐฝ๊ณ ๊ด๋ฆฌ์๋ ํน์ ์ง์ญ์ ๋ํ ์ฌ๊ณ ์์ค๋ง ํ์ธํด์ผ ํ ์ ์์ง๋ง, ๊ธ๋ก๋ฒ ๊ด๋ฆฌ์๋ ์กฐ๊ฐ๋๊ฐ ํ์ํฉ๋๋ค. ์ธ๋ถํ๋ ๊ตฌ๋ ์ ๊ฐ ์ฌ์ฉ์ ์ญํ ์ด ๊ด๋ จ ๋ฐ์ดํฐ๋ง ๋ณด๊ณ ์ฒ๋ฆฌํ๋๋ก ๋ณด์ฅํ์ฌ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
4. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ถ๋ณ์ฑ ์์ฉ
useMutableSource๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์์ค๋ฅผ ์ฒ๋ฆฌํ์ง๋ง *์ฝ๋* ๋ฐ์ดํฐ๋ ํจ์จ์ ์ธ ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ๊นจ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๋์ ๋ณ๊ฒฝ๋ ํ์๋ ์์ต๋๋ค. ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์์ค๊ฐ ๋ถ๋ณ ์
๋ฐ์ดํธ๋ฅผ ์ํ ๋ฉ์ปค๋์ฆ(์: ๋ณ๊ฒฝ ์ ์ ๊ฐ์ฒด/๋ฐฐ์ด ๋ฐํ)์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ React์ ์ฌ์กฐ์ ์ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค. ์์ค๊ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋๋ผ๋ read ํจ์์์ ์ฝ์ ๊ฐ์ React์์ ๋ถ๋ณ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ํต์ฐฐ๋ ฅ: ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ๊ธฐ์ ๊ด์ธก์ ๋คํธ์ํฌ์์ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ ์์ ์ผ์ ํ๋ ๊ฐ์ด ํํ๋๋ ๋ฐฉ์์ ๋ถ๋ณ์ฑ(์: ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ)์ ํตํด ๋ณต์กํ ์๋ ๋น๊ต ๋ก์ง ์์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ ํจ์จ์ ์ผ๋ก diffingํ๊ณ ์ถ์ ํ ์ ์์ต๋๋ค.
5. ๋์ ๋ชจ๋๋ฅผ ์์ ํ๊ฒ ํ์ฉ
๋์ ๊ธฐ๋ฅ๊ณผ ํจ๊ป useMutableSource๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์ค๋จ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์๋์ง ํ์ธํ์ญ์์ค.
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ Suspense ์ฌ์ฉ: React์ Suspense API์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํตํฉํ์ฌ ์ค๋จ ์ค์ ๋ก๋ฉ ์ํ์ ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ์์์ ์์ : ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์์ค์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์ค๋จ์ ์ํฅ์ ์ต์ํํ๊ธฐ ์ํด ๊ฐ๋ฅํ ํ ์์์ ์ธ์ง ํ์ธํ์ญ์์ค.
๊ธ๋ก๋ฒ ํต์ฐฐ๋ ฅ: ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ค์ํ๊ณ ์ฌ๋ฌ ๋์คํ๋ ์ด์ ๋ํด ๋์์ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๋ณต์กํ ํญ๊ณต ๊ตํต ๊ด์ ์์คํ ์์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ์์์ ์ด๊ณ ์์ ํ๊ฒ ์ค๋จ ๋ฐ ๋ค์ ์์๋ ์ ์๋๋ก ํ๋ ๊ฒ์ ์ฑ๋ฅ๋ฟ๋ง ์๋๋ผ ์์ ๋ฐ ์์ ์ฑ์ ๋ฌธ์ ์ ๋๋ค.
6. ํ๋กํ์ผ๋ง ๋ฐ ๋ฒค์น๋งํน
์ฑ๋ฅ ์ํฅ์ ์ดํดํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์ธก์ ํ๋ ๊ฒ์ ๋๋ค. React DevTools Profiler ๋ฐ ๊ธฐํ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ํํ์ญ์์ค.
- ๋ณ๋ชฉ ํ์ ์๋ณ: ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ค ๋ถ๋ถ์ด ํนํ
useMutableSource๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ์๋นํ๋์ง ์ ํํ ์ฐพ์๋ ๋๋ค. - ์ค๋ฒํค๋ ์ธก์ : ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ ์ค์ ์ค๋ฒํค๋๋ฅผ ์ ๋ํํฉ๋๋ค.
- ์ต์ ํ ํ ์คํธ: ์ ํํ ์ํ ์ ๋ต์ ์ํฅ์ ๋ฒค์น๋งํนํฉ๋๋ค.
๊ธ๋ก๋ฒ ํต์ฐฐ๋ ฅ: ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ ๋ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด(์: ์ผ๋ถ ์ง์ญ์์ ์ผ๋ฐ์ ์ธ ๋์ ๋๊ธฐ ์๊ฐ ๋๋ ๋ฎ์ ๋์ญํญ ์ฐ๊ฒฐ ์๋ฎฌ๋ ์ด์ )๊ณผ ๋ค์ํ ์ฅ์น(๊ณ ๊ธ ๋ฐ์คํฌํฑ์์ ์ ์ ๋ ฅ ํด๋ํฐ๊น์ง)์์ ์ฑ๋ฅ์ ํ ์คํธํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ํ ์ง์ ํ ์ดํด์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
useMutableSource๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ๊ฒฝ์ฐ
์ค๋ฒํค๋์ ์ ์ฌ๋ ฅ์ ๊ฐ์ํ ๋ useMutableSource๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์์ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค.
- ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ ธ์ถํ๋ ์ธ๋ถ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ๊ณ ์์ต๋๋ค.
- React์ ๋ ๋๋ง์ ๊ณ ์ฃผํ, ์ ์์ค ์ ๋ฐ์ดํธ(์: Web Workers, WebSockets ๋๋ ์ ๋๋ฉ์ด์ )์ ๋๊ธฐํํด์ผ ํฉ๋๋ค.
- ํนํ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ์ ํจ๊ป ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด React์ ๋์ ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ์ถ์ต๋๋ค.
- ๊ธฐ์กด ์ํคํ ์ฒ์์ ์ํ ๊ด๋ฆฌ ๋ฐ ๊ตฌ๋ ๊ณผ ๊ด๋ จ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ด๋ฏธ ์๋ณํ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก useState ๋๋ useReducer๋ก ์ถฉ๋ถํ ๊ฐ๋จํ ๋ก์ปฌ ์ปดํฌ๋ํธ ์ํ ๊ด๋ฆฌ์๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค. useMutableSource์ ๋ณต์ก์ฑ๊ณผ ์ ์ฌ์ ์ธ ์ค๋ฒํค๋๋ ํน์ ๊ธฐ๋ฅ์ด ์ง์ ์ผ๋ก ํ์ํ ์ํฉ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.
๊ฒฐ๋ก
React์ experimental_useMutableSource๋ React์ ์ ์ธ์ ๋ ๋๋ง๊ณผ ์ธ๋ถ ๋ณ๊ฒฝ ๊ฐ๋ฅ ๋ฐ์ดํฐ ์์ค ๊ฐ์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ํจ๊ณผ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ฒํค๋๋ก ์ธํ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ํฅ์ ๋ํ ๊น์ ์ดํด์ ์ ์คํ ๊ด๋ฆฌ์ ๋ฌ๋ ค ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ค๋ฅผ ์ต์ ํํ๊ณ , ํจ์จ์ ์ธ read ํจ์๋ฅผ ์์ฑํ๊ณ , ์ธ๋ถํ๋ ๊ตฌ๋
์ ๋ณด์ฅํ๊ณ , ๊ฐ๋ ฅํ ํ๋กํ์ผ๋ง์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ ์ฑ๋ฅ ํจ์ ์ ๊ตด๋ณตํ์ง ์๊ณ useMutableSource์ ์ด์ ์ ํ์ฉํ ์ ์์ต๋๋ค.
์ด ํ ์ ์ฌ์ ํ ์คํ์ ์ธ ์ํ์ด๋ฏ๋ก API์ ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ด ๋ฐ์ ํ ์ ์์ต๋๋ค. ์ต์ React ๋ฌธ์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๊ณต์ ์ผ๋ก ํตํฉํ๋ ๋ฐ ํต์ฌ์ด ๋ ๊ฒ์ ๋๋ค. ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ์ ๋ฐ์ดํธ ์ ๋ต ๋ฐ ์ฑ๋ฅ ๋ชฉํ์ ๋ํ ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ์ ์ฐ์ ์ํ๋ ๊ฒ์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์๋ต์ฑ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค.