React์ experimental_useRefresh ํ ์ ๋ํ ํฌ๊ด์ ์ธ ๋ถ์์ ๋๋ค. ์ฑ๋ฅ ์ํฅ, ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ ์ค๋ฒํค๋, ํ๋ก๋์ ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํ์ธ์.
React์ experimental_useRefresh ์ฌ์ธต ๋ถ์: ๊ธ๋ก๋ฒ ์ฑ๋ฅ ๋ถ์
๋์์์ด ์งํํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ธ๊ณ์์, ์ํํ ๊ฐ๋ฐ์ ๊ฒฝํ(DX)์ ์ถ๊ตฌ๋ ์ต์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ์ถ๊ตฌํ๋ ๊ฒ๋งํผ์ด๋ ์ค์ํฉ๋๋ค. React ์ํ๊ณ์ ๊ฐ๋ฐ์๋ค์๊ฒ ์ต๊ทผ ๋ช ๋
๊ฐ ๊ฐ์ฅ ์ค์ํ DX ๊ฐ์ ์ค ํ๋๋ ๋น ๋ฅธ ์๋ก๊ณ ์นจ(Fast Refresh)์ ๋์
์ด์์ต๋๋ค. ์ด ๊ธฐ์ ์ ์ปดํฌ๋ํธ ์ํ๋ฅผ ์์ง ์๊ณ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ๊ฑฐ์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ํ์ง๋ง ์ด ๊ธฐ๋ฅ ๋ค์ ์จ๊ฒจ์ง ๋ง๋ฒ์ ๋ฌด์์ด๋ฉฐ, ์จ๊ฒจ์ง ์ฑ๋ฅ ๋น์ฉ์ด ๋ฐ๋ฅผ๊น์? ๊ทธ ๋ต์ ์คํ์ ์ธ API์ธ experimental_useRefresh ๊น์ํ ๊ณณ์ ์์ต๋๋ค.
์ด ๊ธ์ experimental_useRefresh์ ๋ํ ํฌ๊ด์ ์ด๊ณ ๊ธ๋ก๋ฒํ ๊ด์ ์ ๋ถ์์ ์ ๊ณตํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ญํ ์ ๋ช
ํํ ํ๊ณ , ์ฑ๋ฅ ์ํฅ์ ๋ถ์ํ๋ฉฐ, ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ๊ณผ ๊ด๋ จ๋ ์ค๋ฒํค๋๋ฅผ ํ๊ตฌํ ๊ฒ์
๋๋ค. ๋น์ ์ด ๋ฒ ๋ฅผ๋ฆฐ, ๋ฒต๊ฐ๋ฃจ๋ฃจ, ๋๋ ๋ถ์๋
ธ์ค์์ด๋ ์ค์ ๊ฐ๋ฐ์์ด๋ , ๋งค์ผ์ ์์
ํ๋ฆ์ ํ์ฑํ๋ ๋๊ตฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ React์์ ๊ฐ์ฅ ์ฌ๋๋ฐ๋ ๊ธฐ๋ฅ ์ค ํ๋์ ๋๋ ฅ์์ด ๋๋ ์์ง์ '๋ฌด์', '์', ๊ทธ๋ฆฌ๊ณ '์ผ๋ง๋ ๋น ๋ฅธ์ง'๋ฅผ ํ๊ตฌํ ๊ฒ์
๋๋ค.
๊ธฐ๋ฐ: ํฌ๋ฐํ ๋ฆฌ๋ก๋์์ ์ํํ ์๋ก๊ณ ์นจ๊น์ง
experimental_useRefresh์ ์ง๊ฐ๋ฅผ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด, ๋จผ์ ๊ทธ๊ฒ์ด ํด๊ฒฐํ๋ ๋ฌธ์ ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ์น ๊ฐ๋ฐ์ ์ด๊ธฐ ์์ ๊ณผ ์ค์๊ฐ ์
๋ฐ์ดํธ์ ์งํ ๊ณผ์ ์ ๋์ง์ด ๋ด
์๋ค.
๊ฐ๋ตํ ์ญ์ฌ: ํซ ๋ชจ๋ ๊ต์ฒด(HMR)
์๋ ๊ฐ ํซ ๋ชจ๋ ๊ต์ฒด(Hot Module Replacement, HMR)๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์์ ์ค์๊ฐ ์ ๋ฐ์ดํธ์ ํ์ค์ด์์ต๋๋ค. ๊ทธ ๊ฐ๋ ์ ํ์ ์ ์ด์์ต๋๋ค: ํ์ผ์ ์ ์ฅํ ๋๋ง๋ค ์ ์ฒด ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ ๋์ , ๋น๋ ๋๊ตฌ๋ ๋ณ๊ฒฝ๋ ํน์ ๋ชจ๋๋ง ๊ต์ฒดํ์ฌ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ํ์ต๋๋ค.
์ด๋ ์์ฒญ๋ ๋์ฝ์ด์์ง๋ง, React ์ธ๊ณ์ HMR์๋ ํ๊ณ๊ฐ ์์์ต๋๋ค:
- ์ํ ์์ค: HMR์ ์ข ์ข ํด๋์ค ์ปดํฌ๋ํธ์ ํ ์์ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค. ์ปดํฌ๋ํธ ํ์ผ์ ๋ณ๊ฒฝ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ง์ดํธ๋๋๋ก ํ์ฌ ๋ก์ปฌ ์ํ๋ฅผ ์ง์๋ฒ๋ ธ์ต๋๋ค. ์ด๋ ๋ฐฉํด๊ฐ ๋์๊ณ , ๊ฐ๋ฐ์๋ค์ด ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ๊ธฐ ์ํด UI ์ํ๋ฅผ ์๋์ผ๋ก ๋ค์ ๋ง๋ค์ด์ผ ํ์ต๋๋ค.
- ์ทจ์ฝ์ฑ: ์ค์ ์ด ๋ถ์์ ํ ์ ์์์ต๋๋ค. ๋๋๋ก ํซ ์ ๋ฐ์ดํธ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊นจ์ง ์ํ๊ฐ ๋์ด ์ด์จ๋ ์๋ ์๋ก๊ณ ์นจ์ด ํ์ํ์ต๋๋ค.
- ์ค์ ๋ณต์ก์ฑ: HMR์ ์ ๋๋ก ํตํฉํ๋ ค๋ฉด ์ข ์ข ํน์ ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋์ Webpack๊ณผ ๊ฐ์ ๋๊ตฌ ๋ด์์ ์ ์คํ ์ค์ ์ด ํ์ํ์ต๋๋ค.
์งํ: React ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ฒ์ฌ์ฑ
React ํ์ ๋ ๋์ ์ปค๋ฎค๋ํฐ์ ํ๋ ฅํ์ฌ ๋ ๋์ ์๋ฃจ์ ์ ๊ตฌ์ถํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ๋ง๋ฒ์ฒ๋ผ ๋๊ปด์ง์ง๋ง ๋ฐ์ด๋ ์์ง๋์ด๋ง์ ๊ธฐ๋ฐํ ๊ธฐ๋ฅ์ธ ๋น ๋ฅธ ์๋ก๊ณ ์นจ(Fast Refresh)์ด์์ต๋๋ค. ์ด๋ HMR์ ํต์ฌ์ ์ธ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ์ต๋๋ค:
- ์ํ ๋ณด์กด: ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ณด์กดํ๋ฉด์ ์ ๋ฐ์ดํธํ ๋งํผ ์ง๋ฅ์ ์ ๋๋ค. ์ด๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๋ค. ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๋ก์ง์ด๋ ์คํ์ผ์ ์์ ํด๋ ์ํ(์: ์นด์ดํฐ, ํผ ์ ๋ ฅ)๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
- ํ ๋ณต์๋ ฅ: ์ด๋ ์ด๊ธฐ๋ถํฐ React ํ ๊ณผ ์์ ์ ์ผ๋ก ์๋ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์ด๋ ๊ตฌํ HMR ์์คํ ์ ์ฃผ์ ๊ณผ์ ์์ต๋๋ค.
- ์ค๋ฅ ๋ณต๊ตฌ: ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๋ง๋ค๋ฉด ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ค๋ฅ ์ค๋ฒ๋ ์ด๋ฅผ ํ์ํฉ๋๋ค. ์ค๋ฅ๋ฅผ ์์ ํ๋ฉด ์ ์ฒด ๋ฆฌ๋ก๋ ์์ด ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ปดํฌ๋ํธ ๋ด์ ๋ฐํ์ ์ค๋ฅ๋ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
์์ง์ค: `experimental_useRefresh`๋ ๋ฌด์์ธ๊ฐ?
๊ทธ๋ ๋ค๋ฉด ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ด๋ป๊ฒ ์ด๋ฅผ ๋ฌ์ฑํ ๊น์? ๊ทธ๊ฒ์ ๋ด๋ณด๋ด์ง์ง ์๋ ์ ์์ค React ํ
์ธ experimental_useRefresh์ ์ํด ๊ตฌ๋๋ฉ๋๋ค. ์ด API์ ์คํ์ ์ฑ๊ฒฉ์ ๊ฐ์กฐํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์์ ์ง์ ์ฌ์ฉํ๋๋ก ์๋๋ ๊ฒ์ด ์๋๋๋ค. ๋์ , Next.js, Gatsby, Vite์ ๊ฐ์ ๋ฒ๋ค๋ฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ํ ๊ธฐ๋ณธ ์์(primitive) ์ญํ ์ ํฉ๋๋ค.
ํต์ฌ์ ์ผ๋ก, experimental_useRefresh๋ React์ ์ผ๋ฐ์ ์ธ ๋ ๋๋ง ์ฃผ๊ธฐ ์ธ๋ถ์์ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๋ฆฌ๋ ๋๋ง์ ๊ฐ์ ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ฉฐ, ๋์์ ์์๋ค์ ์ํ๋ฅผ ๋ชจ๋ ๋ณด์กดํฉ๋๋ค. ๋ฒ๋ค๋ฌ๊ฐ ํ์ผ ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ฉด, ์ด์ ์ปดํฌ๋ํธ ์ฝ๋๋ฅผ ์ ์ฝ๋๋ก ๊ต์ฒดํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ `experimental_useRefresh`๊ฐ ์ ๊ณตํ๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ React์๊ฒ "์ด๋ด, ์ด ์ปดํฌ๋ํธ์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์์ด. ์
๋ฐ์ดํธ๋ฅผ ์์ฝํด ์ค."๋ผ๊ณ ๋งํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด React์ ์ฌ์กฐ์ ์(reconciler)๊ฐ ์ด์ด๋ฐ์ ํ์์ ๋ฐ๋ผ ํจ์จ์ ์ผ๋ก DOM์ ์
๋ฐ์ดํธํฉ๋๋ค.
์ด๊ฒ์ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ํ ๋น๋ฐ ๋ท๋ฌธ์ด๋ผ๊ณ ์๊ฐํ์ธ์. ์ด๋ ์ ์ฒด ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๊ทธ ์์คํ ์ํ๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ์ง ์๊ณ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์๋ ์ถฉ๋ถํ ์ ์ด๊ถ์ ์ ๊ณตํฉ๋๋ค.
ํต์ฌ ์ง๋ฌธ: ์ฑ๋ฅ ์ํฅ ๋ฐ ์ค๋ฒํค๋
๋ด๋ถ์์ ์๋ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๊ฐ ์๋ค๋ฉด ์ฑ๋ฅ์ ์์ฐ์ค๋ฌ์ด ๊ด์ฌ์ฌ์ ๋๋ค. ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ง์์ ์ธ ๊ฐ์์ ์ฒ๋ฆฌ๊ฐ ์ฐ๋ฆฌ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋๋ฆฌ๊ฒ ํ ๊น์? ๋จ์ผ ์๋ก๊ณ ์นจ์ ์ค์ ์ค๋ฒํค๋๋ ์ผ๋ง์ผ๊น์?
๋จผ์ , ํ๋ก๋์ ์ฑ๋ฅ์ ๊ด์ฌ์ด ์๋ ์ ์ธ๊ณ ์ฒญ์ค์ ์ํด ์ค์ํ๊ณ ํํํ ์ ์๋ ์ฌ์ค์ ํ๋ฆฝํฉ์๋ค:
๋น ๋ฅธ ์๋ก๊ณ ์นจ๊ณผ experimental_useRefresh๋ ํ๋ก๋์
๋น๋์ ์ ํ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์ด ์ ์ฒด ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ฐ ์ ์ฉ ๊ธฐ๋ฅ์ ๋๋ค. ์ต์ ๋น๋ ๋๊ตฌ๋ ํ๋ก๋์ ๋ฒ๋ค์ ์์ฑํ ๋ ๋น ๋ฅธ ์๋ก๊ณ ์นจ ๋ฐํ์๊ณผ ๋ชจ๋ ๊ด๋ จ ์ฝ๋๋ฅผ ์์ ํ ์ ๊ฑฐํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ต์ข ์ฌ์ฉ์๋ ์ด ์ฝ๋๋ฅผ ์ ๋ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์คํํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ ผ์ํ๋ ์ฑ๋ฅ ์ํฅ์ ๊ฐ๋ฐ ๊ณผ์ ๋์ ๊ฐ๋ฐ์์ ์ปดํจํฐ์๋ง ๊ตญํ๋ฉ๋๋ค.
"์๋ก๊ณ ์นจ ์ค๋ฒํค๋" ์ ์ํ๊ธฐ
"์ค๋ฒํค๋"์ ๋ํด ์ด์ผ๊ธฐํ ๋, ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ๋น์ฉ์ ์ธ๊ธํ๊ณ ์์ต๋๋ค:
- ๋ฒ๋ค ํฌ๊ธฐ: ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ํ์ฑํํ๊ธฐ ์ํด ๊ฐ๋ฐ ์๋ฒ์ ๋ฒ๋ค์ ์ถ๊ฐ๋๋ ์ถ๊ฐ ์ฝ๋.
- CPU/๋ฉ๋ชจ๋ฆฌ: ๋ฐํ์์ด ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ํ๊ณ ์ฒ๋ฆฌํ๋ฉด์ ์๋นํ๋ ๋ฆฌ์์ค.
- ์ง์ฐ ์๊ฐ: ํ์ผ์ ์ ์ฅํ๋ ๊ฒ๊ณผ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ธ๋ผ์ฐ์ ์ ๋ฐ์๋๋ ๊ฒ ์ฌ์ด์ ๊ฒฝ๊ณผ ์๊ฐ.
์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ ์ํฅ (๊ฐ๋ฐ ์ ์ฉ)
๋น ๋ฅธ ์๋ก๊ณ ์นจ ๋ฐํ์์ ๊ฐ๋ฐ ๋ฒ๋ค์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ์ฝ๋์๋ ์น์์ผ(WebSockets)์ ํตํด ๊ฐ๋ฐ ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ , ์ ๋ฐ์ดํธ ์ ํธ๋ฅผ ํด์ํ๋ฉฐ, React ๋ฐํ์๊ณผ ์ํธ ์์ฉํ๋ ๋ก์ง์ด ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ฉ๊ฐ๋ฐ์ดํธ์ ๋ฒค๋ ์ฒญํฌ๊ฐ ์๋ ์ต์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋งฅ๋ฝ์์ ์ด ์ถ๊ฐ๋ ๋ฌด์ํ ์ ์๋ ์์ค์ ๋๋ค. ์ด๋ ํจ์ฌ ์ฐ์ํ DX๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์๊ณ ์ผํ์ฑ์ธ ๋น์ฉ์ ๋๋ค.
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๋น: ์ธ ๊ฐ์ง ์๋๋ฆฌ์ค ์ด์ผ๊ธฐ
์ค์ ์ฑ๋ฅ ๋ฌธ์ ๋ ์ค์ ์๋ก๊ณ ์นจ ์ค์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์์ต๋๋ค. ์ค๋ฒํค๋๋ ์ผ์ ํ์ง ์์ต๋๋ค; ๊ทธ๊ฒ์ ๋น์ ์ด ๋ง๋๋ ๋ณ๊ฒฝ์ ๋ฒ์์ ์ ๋น๋กํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค๋ก ๋๋์ด ๋ด ์๋ค.
์๋๋ฆฌ์ค 1: ์ด์์ ์ธ ๊ฒฝ์ฐ - ์๊ณ ๊ฒฉ๋ฆฌ๋ ์ปดํฌ๋ํธ ๋ณ๊ฒฝ
๊ฐ๋จํ `Button` ์ปดํฌ๋ํธ๊ฐ ์๊ณ ๋ฐฐ๊ฒฝ์์ด๋ ํ ์คํธ ๋ ์ด๋ธ์ ๋ณ๊ฒฝํ๋ค๊ณ ์์ํด ๋ณด์ธ์.
๋ฌด์จ ์ผ์ด ์ผ์ด๋๋๊ฐ:
- `Button.js` ํ์ผ์ ์ ์ฅํฉ๋๋ค.
- ๋ฒ๋ค๋ฌ์ ํ์ผ ๊ฐ์์๊ฐ ๋ณ๊ฒฝ์ ๊ฐ์งํฉ๋๋ค.
- ๋ฒ๋ค๋ฌ๋ ๋ธ๋ผ์ฐ์ ์ ๋น ๋ฅธ ์๋ก๊ณ ์นจ ๋ฐํ์์ ์ ํธ๋ฅผ ๋ณด๋ ๋๋ค.
- ๋ฐํ์์ ์๋ก์ด `Button.js` ๋ชจ๋์ ๊ฐ์ ธ์ต๋๋ค.
- ์ค์ง `Button` ์ปดํฌ๋ํธ์ ์ฝ๋๋ง ๋ณ๊ฒฝ๋์์์ ์๋ณํฉ๋๋ค.
- `experimental_useRefresh` ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ React์๊ฒ `Button` ์ปดํฌ๋ํธ์ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ผ๊ณ ์ง์ํฉ๋๋ค.
- React๋ ํด๋น ํน์ ์ปดํฌ๋ํธ๋ค์ ๋ฆฌ๋ ๋๋ง์ ์์ฝํ๊ณ , ์ํ์ props๋ฅผ ๋ณด์กดํฉ๋๋ค.
์ฑ๋ฅ ์ํฅ: ๊ทนํ ๋ฎ์. ์ด ๊ณผ์ ์ ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๋น ๋ฅด๊ณ ํจ์จ์ ์ ๋๋ค. CPU ์คํ์ดํฌ๋ ์ต์ํ๋๋ฉฐ ๋จ ๋ช ๋ฐ๋ฆฌ์ด ๋์๋ง ์ง์๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ๋ง๋ฒ์ด๋ฉฐ, ์ผ์์ ์ธ ๋ณ๊ฒฝ์ ๋๋ถ๋ถ์ ๋ํ๋ ๋๋ค.
์๋๋ฆฌ์ค 2: ํ๊ธ ํจ๊ณผ - ๊ณต์ ๋ก์ง ๋ณ๊ฒฝ
์ด์ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ 10๊ฐ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ(`ProfilePage`, `Header`, `UserAvatar` ๋ฑ)์์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ์ปค์คํ ํ `useUserData`๋ฅผ ํธ์งํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
๋ฌด์จ ์ผ์ด ์ผ์ด๋๋๊ฐ:
- `useUserData.js` ํ์ผ์ ์ ์ฅํฉ๋๋ค.
- ๊ณผ์ ์ ์ด์ ๊ณผ ๊ฐ์ด ์์๋์ง๋ง, ๋ฐํ์์ ๋น์ปดํฌ๋ํธ ๋ชจ๋(ํ )์ด ๋ณ๊ฒฝ๋์์์ ์๋ณํฉ๋๋ค.
- ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ง๋ฅ์ ์ผ๋ก ๋ชจ๋ ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ค. `useUserData`๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์ต๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ํด๋น 10๊ฐ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๋ํด ์๋ก๊ณ ์นจ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
์ฑ๋ฅ ์ํฅ: ๋ณดํต. ์ค๋ฒํค๋๋ ์ด์ ์ํฅ์ ๋ฐ๋ ์ปดํฌ๋ํธ์ ์๋งํผ ๊ณฑํด์ง๋๋ค. React๊ฐ ๋ ๋ง์ UI๋ฅผ ๋ฆฌ๋ ๋๋งํด์ผ ํ๋ฏ๋ก ์ฝ๊ฐ ๋ ํฐ CPU ์คํ์ดํฌ์ ์ฝ๊ฐ ๋ ๊ธด ์ง์ฐ(์๋ง๋ ์์ญ ๋ฐ๋ฆฌ์ด)์ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ์ ์ ์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์ํ๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. ์ด๋ ์ฌ์ ํ ์ ์ฒด ํ์ด์ง ๋ฆฌ๋ก๋๋ณด๋ค ํจ์ฌ ์ฐ์ํฉ๋๋ค.
์๋๋ฆฌ์ค 3: ํด๋ฐฑ - ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ด ํฌ๊ธฐํ ๋
๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ๋๋ํ์ง๋ง ๋ง๋ฒ์ ์๋๋๋ค. ์ผ๊ด์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์ด๋ํ ์ํ ์์ด ์์ ํ๊ฒ ์ ์ฉํ ์ ์๋ ํน์ ๋ณ๊ฒฝ ์ฌํญ๋ค์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- React ์ปดํฌ๋ํธ๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ ๋ด๋ณด๋ด๋ ํ์ผ ํธ์ง(์: React ์ปดํฌ๋ํธ ์ธ๋ถ์์ ์ฌ์ฉ๋๋ ์์๋ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ๋ด๋ณด๋ด๋ ํ์ผ).
- ํ ์ ๊ท์น(Rules of Hooks)์ ์๋ฐํ๋ ๋ฐฉ์์ผ๋ก ์ปค์คํ ํ ์ ์๊ทธ๋์ฒ ๋ณ๊ฒฝ.
- ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ์ ์์์ธ ์ปดํฌ๋ํธ ๋ณ๊ฒฝ (๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ํด๋์ค ์ปดํฌ๋ํธ์ ๋ํ ์ง์์ด ์ ํ์ ์).
๋ฌด์จ ์ผ์ด ์ผ์ด๋๋๊ฐ:
- ์ด๋ฌํ "์๋ก๊ณ ์นจ ๋ถ๊ฐ๋ฅํ" ๋ณ๊ฒฝ ์ฌํญ ์ค ํ๋๊ฐ ์๋ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
- ๋น ๋ฅธ ์๋ก๊ณ ์นจ ๋ฐํ์์ด ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ์์ ํ๊ฒ ํซ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์ ์๋ค๊ณ ํ๋จํฉ๋๋ค.
- ์ตํ์ ์๋จ์ผ๋ก, ํฌ๊ธฐํ๊ณ F5๋ Cmd+R์ ๋๋ฅธ ๊ฒ์ฒ๋ผ ์ ์ฒด ํ์ด์ง ๋ฆฌ๋ก๋๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
์ฑ๋ฅ ์ํฅ: ๋์. ์ค๋ฒํค๋๋ ์๋ ๋ธ๋ผ์ฐ์ ์๋ก๊ณ ์นจ๊ณผ ๋์ผํฉ๋๋ค. ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ํ๊ฐ ์์ค๋๊ณ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ๋ค์ด๋ก๋ํ๊ณ ์ฌ์คํํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ด ํผํ๋ ค๊ณ ํ๋ ์๋๋ฆฌ์ค์ด๋ฉฐ, ์ข์ ์ปดํฌ๋ํธ ์ํคํ ์ฒ๋ ๊ทธ ๋ฐ์์ ์ต์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ์ํ ์ค์ฉ์ ์ธ ์ธก์ ๋ฐ ํ๋กํ์ผ๋ง
์ด๋ก ์ ํ๋ฅญํ์ง๋ง, ์ ์ธ๊ณ ์ด๋์ ์๋ ๊ฐ๋ฐ์๋ค์ด ์ด ์ํฅ์ ์ค์ค๋ก ์ด๋ป๊ฒ ์ธก์ ํ ์ ์์๊น์? ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ์ ์ด๋ฏธ ๋ด์ฅ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ฃผ์ ๋๊ตฌ๋ค
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ (์ฑ๋ฅ ํญ): Chrome, Firefox ๋๋ Edge์ ์ฑ๋ฅ ํ๋กํ์ผ๋ฌ๋ ๋น์ ์ ๊ฐ์ฅ ์นํ ์น๊ตฌ์ ๋๋ค. ์คํฌ๋ฆฝํ , ๋ ๋๋ง, ํ์ธํ ์ ํฌํจํ ๋ชจ๋ ํ๋์ ๊ธฐ๋กํ์ฌ ์๋ก๊ณ ์นจ ๊ณผ์ ์ ์์ธํ "ํ๋ ์ ๊ทธ๋ํ(flame graph)"๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- React ๊ฐ๋ฐ์ ๋๊ตฌ (ํ๋กํ์ผ๋ฌ): ์ด ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋น์ ์ ์ปดํฌ๋ํธ๊ฐ *์* ๋ฆฌ๋ ๋๋ง๋์๋์ง ์ดํดํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ์ผ๋ถ๋ก ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋์๊ณ ๋ฌด์์ด ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํ๋์ง ์ ํํ๊ฒ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
๋จ๊ณ๋ณ ํ๋กํ์ผ๋ง ๊ฐ์ด๋
๋๊ตฌ๋ ์ฌํํ ์ ์๋ ๊ฐ๋จํ ํ๋กํ์ผ๋ง ์ธ์ ์ ํจ๊ป ์งํํด ๋ด ์๋ค.
1. ๊ฐ๋จํ ํ๋ก์ ํธ ์ค์
Vite๋ Create React App๊ณผ ๊ฐ์ ์ต์ ํด์ฒด์ธ์ ์ฌ์ฉํ์ฌ ์๋ก์ด React ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ค์ ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค.
npx create-vite@latest my-react-app --template react
2. ๊ฐ๋จํ ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ ํ๋กํ์ผ๋ง
- ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๋ค.
- ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด๊ณ ์ฑ๋ฅ(Performance) ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
- "๋ นํ(Record)" ๋ฒํผ(์์ ์)์ ํด๋ฆญํฉ๋๋ค.
- ์ฝ๋ ํธ์ง๊ธฐ๋ก ๊ฐ์ ๋ฉ์ธ `App` ์ปดํฌ๋ํธ์ ์ฌ์ํ ๋ณ๊ฒฝ(์: ํ ์คํธ ๋ณ๊ฒฝ)์ ๊ฐํ๊ณ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
- ๋ณ๊ฒฝ ์ฌํญ์ด ๋ธ๋ผ์ฐ์ ์ ๋ํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ๊ฐ๋ฐ์ ๋๊ตฌ๋ก ๋์๊ฐ "์ค์ง(Stop)"๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ด์ ์์ธํ ํ๋ ์ ๊ทธ๋ํ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ํ์ผ์ ์ ์ฅํ์ ๋์ ํด๋นํ๋ ์ง์ค๋ ํ๋ ํญ๋ฐ์ ์ฐพ์๋ณด์ธ์. ๋ฒ๋ค๋ฌ(์: `vite-runtime`)์ ๊ด๋ จ๋ ํจ์ ํธ์ถ, ์ด์ด์ React์ ์ค์ผ์ค๋ฌ ๋ฐ ๋ ๋๋ง ๋จ๊ณ(`performConcurrentWorkOnRoot`)๋ฅผ ๋ณผ ์ ์์ ๊ฒ์ ๋๋ค. ์ด ํญ๋ฐ์ ์ด ์ง์ ์๊ฐ์ด ์๋ก๊ณ ์นจ ์ค๋ฒํค๋์ ๋๋ค. ๊ฐ๋จํ ๋ณ๊ฒฝ์ ๊ฒฝ์ฐ, ์ด๋ 50๋ฐ๋ฆฌ์ด ๋ฏธ๋ง์ด์ด์ผ ํฉ๋๋ค.
3. ํ ๊ธฐ๋ฐ ์๋ก๊ณ ์นจ ํ๋กํ์ผ๋ง
์ด์ ๋ณ๋์ ํ์ผ์ ์ปค์คํ ํ ์ ๋ง๋ญ๋๋ค:
ํ์ผ: `useCounter.js`
import { useState } from 'react';
export function useCounter() {
const [count, setCount] = useState(0);
const increment = () => setCount(c => c + 1);
return { count, increment };
}
์ด ํ ์ ๋์ธ ๊ฐ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ์ธ์. ์ด์ ํ๋กํ์ผ๋ง ๊ณผ์ ์ ๋ฐ๋ณตํ๋, ์ด๋ฒ์๋ `useCounter.js` ๋ด๋ถ๋ฅผ ๋ณ๊ฒฝํ์ธ์(์: `console.log` ์ถ๊ฐ). ํ๋ ์ ๊ทธ๋ํ๋ฅผ ๋ถ์ํ๋ฉด, React๊ฐ ์ด ํ ์ ์๋นํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํด์ผ ํ๋ฏ๋ก ๋ ๋์ ํ๋ ์์ญ์ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ฆ๊ฐ๋ ์ค๋ฒํค๋๋ฅผ ์ ๋ํํ๊ธฐ ์ํด ์ด ์์ ์ ์ง์ ์๊ฐ์ ์ด์ ์์ ๊ณผ ๋น๊ตํด ๋ณด์ธ์.
๊ฐ๋ฐ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ์ต์ ํ
์ด๊ฒ์ ๊ฐ๋ฐ ์์ ์ ๋ฌธ์ ์ด๋ฏ๋ก, ์ฐ๋ฆฌ์ ์ต์ ํ ๋ชฉํ๋ ๋น ๋ฅด๊ณ ์ ์ฐํ DX๋ฅผ ์ ์งํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ด๋ ๋ค์ํ ์ง์ญ๊ณผ ํ๋์จ์ด ์ฑ๋ฅ์ ๊ฑธ์ณ ์๋ ํ์ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋ ๋์ ์๋ก๊ณ ์นจ ์ฑ๋ฅ์ ์ํ ์ปดํฌ๋ํธ ๊ตฌ์กฐํ
์ ์ค๊ณ๋๊ณ ์ฑ๋ฅ์ด ์ข์ React ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ด๋๋ ์์น๋ค์ ๋ ๋์ ๋น ๋ฅธ ์๋ก๊ณ ์นจ ๊ฒฝํ์ผ๋ก๋ ์ด์ด์ง๋๋ค.
- ์๊ณ ์ง์ค๋ ์ปดํฌ๋ํธ ์ ์ง: ์์ ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง๋ ๋ ๋ ์ ์ ์์ ์ ์ํํฉ๋๋ค. ์์ ์ปดํฌ๋ํธ๋ฅผ ํธ์งํ๋ฉด ์๋ก๊ณ ์นจ์ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฆ ๋๋ค. ํฌ๊ณ ๋จ์ผ์ฒด์ ์ธ ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง์ด ๋๋ฆฌ๊ณ ์๋ก๊ณ ์นจ ์ค๋ฒํค๋๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
- ์ํ๋ฅผ ๊ฐ๊น์ด ๊ณณ์ ๋ฐฐ์นํ๊ธฐ(Co-locate State): ์ํ๋ ํ์ํ ๋งํผ๋ง ์๋ก ๋์ด์ฌ๋ฆฝ๋๋ค(lift state up). ์ํ๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ์์ ๋ถ๋ถ์ ๋ก์ปฌํ๋์ด ์์ผ๋ฉด, ํด๋น ํธ๋ฆฌ ๋ด์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ถํ์ํ๊ฒ ์์ ์ปดํฌ๋ํธ์ ์๋ก๊ณ ์นจ์ ํธ๋ฆฌ๊ฑฐํ์ง ์์ต๋๋ค. ์ด๋ ๋ณ๊ฒฝ์ ์ํฅ ๋ฐ๊ฒฝ(blast radius)์ ์ ํํฉ๋๋ค.
"๋น ๋ฅธ ์๋ก๊ณ ์นจ ์นํ์ ์ธ" ์ฝ๋ ์์ฑ
ํต์ฌ์ ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ด ์ฝ๋์ ์๋๋ฅผ ์ดํดํ๋๋ก ๋๋ ๊ฒ์ ๋๋ค.
- ์์ ์ปดํฌ๋ํธ์ ํ : ์ปดํฌ๋ํธ์ ํ ์ด ๊ฐ๋ฅํ ํ ์์ํ๋๋ก ๋ณด์ฅํ์ธ์. ์ปดํฌ๋ํธ๋ ์ด์์ ์ผ๋ก props์ state์ ์์ ํจ์์ฌ์ผ ํฉ๋๋ค. ๋ชจ๋ ์ค์ฝํ(์ฆ, ์ปดํฌ๋ํธ ํจ์ ์ธ๋ถ)์์ ๋ถ์ ํจ๊ณผ(์ฌ์ด๋ ์ดํํธ)๋ฅผ ํผํ์ธ์. ์ด๋ ์๋ก๊ณ ์นจ ๋ฉ์ปค๋์ฆ์ ํผ๋์ค๋ฝ๊ฒ ํ ์ ์์ต๋๋ค.
- ์ผ๊ด๋ ๋ด๋ณด๋ด๊ธฐ: ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๋๋ก ์๋๋ ํ์ผ์์๋ React ์ปดํฌ๋ํธ๋ง ๋ด๋ณด๋ด์ธ์. ํ์ผ์ด ์ปดํฌ๋ํธ์ ์ผ๋ฐ ํจ์/์์๋ฅผ ํผํฉํ์ฌ ๋ด๋ณด๋ด๋ ๊ฒฝ์ฐ, ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ด ํผ๋์ค๋ฌ์์ ธ ์ ์ฒด ๋ฆฌ๋ก๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ์์ฒด ํ์ผ์ ์ ์งํ๋ ๊ฒ์ด ์ข ์ข ๋ ์ข์ต๋๋ค.
๋ฏธ๋: '์คํ์ ' ํ๊ทธ๋ฅผ ๋์ด์
experimental_useRefresh ํ
์ DX์ ๋ํ React์ ํ์ ์ ์ฆ๋ช
ํฉ๋๋ค. ๋น๋ก ๋ด๋ถ์ ์ด๊ณ ์คํ์ ์ธ API๋ก ๋จ์ ์ ์์ง๋ง, ๊ทธ๊ฒ์ด ๊ตฌํํ๋ ๊ฐ๋
์ React์ ๋ฏธ๋์ ์ค์ฌ์ ์
๋๋ค.
์ธ๋ถ ์์ค๋ก๋ถํฐ ์ํ๋ฅผ ๋ณด์กดํ๋ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฅ๋ ฅ์ ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๊ฐ๋ ฅํ ๊ธฐ๋ณธ ์์์ ๋๋ค. ์ด๋ React๊ฐ ์ฌ๋ฌ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ค๋ฅธ ์ฐ์ ์์๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋์์ฑ ๋ชจ๋(Concurrent Mode)์ ๋ํ React์ ๋ ๋์ ๋น์ ๊ณผ ์ผ์นํฉ๋๋ค. React๊ฐ ๊ณ์ ์งํํจ์ ๋ฐ๋ผ, ๊ฐ๋ฐ์์ ํ๋ ์์ํฌ ์์ฑ์์๊ฒ ์ด๋ฌํ ์ข ๋ฅ์ ์ธ๋ถํ๋ ์ ์ด๊ถ์ ๋ถ์ฌํ๋ ๋ ์์ ์ ์ด๊ณ ๊ณต๊ฐ์ ์ธ API๋ฅผ ๋ณด๊ฒ ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฐ๋ฐ์ ๋๊ตฌ, ์ค์๊ฐ ํ์ ๊ธฐ๋ฅ ๋ฑ์ ์ํ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ
์ฐ๋ฆฌ์ ์ฌ์ธต ๋ถ์์ ๊ธ๋ก๋ฒ React ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ๋ช ๊ฐ์ง ํต์ฌ ๋ด์ฉ์ผ๋ก ์์ฝํด ๋ด ์๋ค.
- DX ๊ฒ์ ์ฒด์ธ์ :
experimental_useRefresh๋ React ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ๊ตฌ๋ํ๋ ์ ์์ค ์์ง์ผ๋ก, ์ฝ๋ ํธ์ง ์ค ์ปดํฌ๋ํธ ์ํ๋ฅผ ๋ณด์กดํ์ฌ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ๊ทน์ ์ผ๋ก ๊ฐ์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. - ํ๋ก๋์ ์ํฅ ์ ๋ก: ์ด ๋ฉ์ปค๋์ฆ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ ์๊ฒฉํ๊ฒ ๊ฐ๋ฐ ์์ ์ ๋ฌธ์ ์ ๋๋ค. ํ๋ก๋์ ๋น๋์์ ์์ ํ ์ ๊ฑฐ๋๋ฉฐ ์ต์ข ์ฌ์ฉ์์๊ฒ๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
- ๋น๋ก์ ์ธ ์ค๋ฒํค๋: ๊ฐ๋ฐ ์ค ์๋ก๊ณ ์นจ์ ์ฑ๋ฅ ๋น์ฉ์ ์ฝ๋ ๋ณ๊ฒฝ ๋ฒ์์ ์ ๋น๋กํฉ๋๋ค. ์๊ณ ๊ฒฉ๋ฆฌ๋ ๋ณ๊ฒฝ์ ๊ฑฐ์ ์ฆ๊ฐ์ ์ด๋ฉฐ, ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ณต์ ๋ก์ง์ ๋ณ๊ฒฝ์ ๋ ํฌ์ง๋ง ์ฌ์ ํ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ํคํ ์ฒ์ ์ค์์ฑ: ์ข์ React ์ํคํ ์ฒ(์์ ์ปดํฌ๋ํธ, ์ ๊ด๋ฆฌ๋ ์ํ)๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก๋์ ์ฑ๋ฅ์ ํฅ์์ํฌ ๋ฟ๋ง ์๋๋ผ ๋น ๋ฅธ ์๋ก๊ณ ์นจ์ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ๊ฐ๋ฐ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋งค์ผ ์ฌ์ฉํ๋ ๋๊ตฌ๋ฅผ ์ดํดํ๋ฉด ๋ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ ํจ๊ณผ์ ์ผ๋ก ๋๋ฒ๊น
ํ ์ ์์ต๋๋ค. experimental_useRefresh๋ฅผ ์ง์ ํธ์ถํ ์ผ์ ์๊ฒ ์ง๋ง, ๊ทธ๊ฒ์ด ๋น์ ์ ๊ฐ๋ฐ ๊ณผ์ ์ ๋ ์ํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋์์์ด ๋
ธ๋ ฅํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ ๋น์ ์ด ์ํ ์ ๊ตํ ์ํ๊ณ์ ๋ํ ๋ ๊น์ ๊ฐ์ฌ๋ฅผ ๊ฐ๊ฒ ํฉ๋๋ค. ์ด ๊ฐ๋ ฅํ ๋๊ตฌ๋ค์ ๋ฐ์๋ค์ด๊ณ , ๊ทธ๋ค์ ๊ฒฝ๊ณ๋ฅผ ์ดํดํ๋ฉฐ, ๊ณ์ํด์ ๋๋ผ์ด ๊ฒ๋ค์ ๋ง๋ค์ด ๋๊ฐ์ธ์.