React Fiber์ ์์ ๋ฃจํ์ ์ค๋จ ๊ธฐ๋ฅ์ ๋ํ ์ฌ์ธต ๋ถ์. ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
React Fiber ์์ ๋ฃจํ ์ค๋จ: ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง ๋ง์คํฐํ๊ธฐ
React Fiber๋ React์ ์ฌ์กฐ์ (reconciliation) ์๊ณ ๋ฆฌ์ฆ์ ์์ ํ ์ฌ์์ฑํ ๊ฒ์ ๋๋ค. ์ด๋ React์ ์ด์ ๋ฒ์ , ํนํ ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ค๋ฃฐ ๋์ ์ฑ๋ฅ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๋์์ต๋๋ค. React Fiber์ ํต์ฌ ํ์ ์ค ํ๋๋ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ๊ณ ์ค์๋์ ๋ฐ๋ผ ์์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด React๋ ๊ณ์ฐ๋์ด ๋ง์ ์์ ์ ์ํํ ๋์๋ ๋ฐ์์ฑ์ ์ ์งํ๊ณ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ธฐ์กด React ์ฌ์กฐ์ ์ ์ดํด
Fiber ์ด์ ์๋ React์ ์ฌ์กฐ์ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ์ ์ด์์ต๋๋ค. ์ด๋ React๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ ๋๋ง์ ์์ํ๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ์ ์๋ตํ๊ฑฐ๋ ๋ค๋ฅธ ์์ ์ ์ํํ๊ธฐ ์ ์ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ์๋ฃํด์ผ ํจ์ ์๋ฏธํ์ต๋๋ค. ์ด๋ก ์ธํด ํนํ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฃฐ ๋ UI๊ฐ ์๋ตํ์ง ์๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์์ต๋๋ค. React๊ฐ ๊ธด ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํ๋ ๋์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ํ๋์ ํ์ดํํ๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ํ์ดํ ๊ฒฝํ์ด ๋๋ฆฌ๊ณ ๋ต๋ตํด์ง ์ ์์ต๋๋ค.
์ด๋ฌํ ๋๊ธฐ์ ํน์ฑ์ ๋ณ๋ชฉ ํ์์ ์ผ์ผ์ผฐ์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๊ฐ ์ปดํฌ๋ํธ๋ง๋ค ํธ์ถ ์คํ(call stack)์ด ์ฆ๊ฐํ์ฌ ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๊ณ ๋ฐ์์ฑ์ ๋ํ ์ฌ์ฉ์ ๊ธฐ๋์น๊ฐ ๋์์ง๋ฉด์ ์ด ๋ฌธ์ ๋ ์ ์ ๋ ์ฌ๊ฐํด์ก์ต๋๋ค.
React Fiber ์๊ฐ: ์ฌ์กฐ์ ์ ์ํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์
React Fiber๋ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ๋ ์์ ๋น๋๊ธฐ์ ์์ ๋จ์๋ก ๋ถํดํ์ฌ ๋๊ธฐ์ ์ฌ์กฐ์ ํ๋ก์ธ์ค์ ํ๊ณ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ฌํ ์์ ๋จ์๋ฅผ "ํ์ด๋ฒ(fiber)"๋ผ๊ณ ํฉ๋๋ค. ๊ฐ ํ์ด๋ฒ๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ๋ํ๋ด๋ฉฐ, React๋ ์ฐ์ ์์์ ๋ฐ๋ผ ํ์ด๋ฒ์ ๋ํ ์์ ์ ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ํฌ๊ธฐํ ์ ์์ต๋๋ค. ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ ์ ์๋ ์ด ๊ธฐ๋ฅ ๋๋ถ์ React Fiber๋ ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
React Fiber์ ํต์ฌ ๊ฐ๋
- ํ์ด๋ฒ(Fibers): ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ปดํฌ๋ํธ์ ์ ์ฌํ๊ฒ ์ํํด์ผ ํ ์์ ๋จ์๋ฅผ ๋ํ๋ ๋๋ค. ๊ฐ ํ์ด๋ฒ๋ ์ปดํฌ๋ํธ์ ์ํ, props ๋ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๊ด๊ณ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
- ์์ ๋ฃจํ(Work Loop): ํ์ด๋ฒ๋ฅผ ์ฒ๋ฆฌํ๊ณ DOM์ ์ ๋ฐ์ดํธํ๋ ์ญํ ์ ํ๋ React Fiber์ ํต์ฌ์ ๋๋ค.
- ์ค์ผ์ค๋ฌ(Schedulers): ์์ ์ ์ฐ์ ์์ ์ง์ ๋ฐ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค.
- ์ฐ์ ์์ ๋ ๋ฒจ(Priority Levels): ์ค์๋์ ๋ฐ๋ผ ์์ ์ ๋ถ๋ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค(์: ์ฌ์ฉ์ ์ ๋ ฅ ์ด๋ฒคํธ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ต๋๋ค).
React Fiber ์์ ๋ฃจํ
React Fiber ์์ ๋ฃจํ๋ ์๋ก์ด ์ฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฅ์ ๋๋ค. ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์ํํ๊ณ , ํ์ด๋ฒ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, DOM์ ์ ๋ฐ์ดํธํ๋ ์ญํ ์ ํฉ๋๋ค. ์์ ๋ฃจํ๋ ์ง์์ ์ธ ์ํ ์์์ ์๋ํ๋ฉฐ, ์ํํ ์์ ์ด ์๋์ง ๋์์์ด ํ์ธํฉ๋๋ค. ํต์ฌ์ ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ๋ฐ์ํ๋ฉด ์ธ์ ๋ ์ง ์์ ๋ฃจํ๋ฅผ ์ค๋จํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
์์ ๋ฃจํ์ ๋จ๊ณ
์์ ๋ฃจํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ๋ ๋ ๋จ๊ณ(Render Phase): ์ด ๋จ๊ณ์์๋ DOM์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ํ์ง ๊ฒฐ์ ํฉ๋๋ค. React๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์ํํ๋ฉฐ ํ์ฌ ์ํ์ ์๋ก์ด ์ํ๋ฅผ ๋น๊ตํ๊ณ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํฉ๋๋ค. ์ด ๋จ๊ณ๋ ์์ํ๋ฉฐ ๋ถ์์ฉ ์์ด ์ผ์ ์ค์ง, ์ค๋จ ๋๋ ๋ค์ ์์ํ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์์ DOM์ ์ ์ฉํด์ผ ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ธ "์ดํํธ ๋ฆฌ์คํธ(effect list)"๋ฅผ ์์ฑํฉ๋๋ค.
- ์ปค๋ฐ ๋จ๊ณ(Commit Phase): ์ด ๋จ๊ณ์์๋ ๋ณ๊ฒฝ ์ฌํญ์ DOM์ ์ ์ฉํฉ๋๋ค. ์ด ๋จ๊ณ๋ ๋๊ธฐ์ ์ด๋ฉฐ ์ค๋จ๋ ์ ์์ต๋๋ค. UI์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ค๋จ ์๋ ๋ฐฉ์
์ค์ผ์ค๋ฌ๋ ์ค๋จ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ฌ์ฉ์ ์ ๋ ฅ, ๋คํธ์ํฌ ์์ฒญ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ์ ๊ฐ์ ๊ฐ ์์ ์ ์ฐ์ ์์ ๋ ๋ฒจ์ ํ ๋นํฉ๋๋ค. ์์ ๋ฃจํ๋ ์คํ ๋๊ธฐ ์ค์ธ ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ์๋์ง ์ค์ผ์ค๋ฌ๋ฅผ ์ง์์ ์ผ๋ก ํ์ธํฉ๋๋ค. ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ๋ฐ๊ฒฌ๋๋ฉด, ์์ ๋ฃจํ๋ ํ์ฌ ์์ ์ ์ผ์ ์ค์งํ๊ณ ๋ธ๋ผ์ฐ์ ์ ์ ์ด๊ถ์ ์๋ณดํ์ฌ ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ์คํ๋๋๋ก ํฉ๋๋ค. ์ผ๋จ ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ์๋ฃ๋๋ฉด, ์์ ๋ฃจํ๋ ์ค๋จํ๋ ์ง์ ๋ถํฐ ์ด์ ์์ ์ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์๊ฐํด ๋ณด์ธ์: ๋น์ ์ด ํฐ ์คํ๋ ๋์ํธ ์์ (๋ ๋ ๋จ๊ณ)์ ํ๊ณ ์์ ๋ ์์ฌ์๊ฒ์ ์ ํ(๋ ๋์ ์ฐ์ ์์์ ์์ )๊ฐ ์ต๋๋ค. ๋น์ ์ ์ฆ์ ์คํ๋ ๋์ํธ ์์ ์ ๋ฉ์ถ๊ณ ์ ํ๋ฅผ ๋ฐ์ต๋๋ค. ํตํ๊ฐ ๋๋๋ฉด ๋ค์ ์คํ๋ ๋์ํธ๋ก ๋์๊ฐ ์ค๋จํ๋ ๋ถ๋ถ๋ถํฐ ์์ ์ ๊ณ์ํฉ๋๋ค.
์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง
์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ React Fiber์ ์ค๋จ ๊ธฐ๋ฅ์ด ์ ๊ณตํ๋ ํต์ฌ ์ด์ ์ ๋๋ค. ์ด๋ฅผ ํตํด React๋ ์ค์๋์ ๋ฐ๋ผ ์์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ์ฌ ๊ฐ์ฅ ์ค์ํ ์์ ์ด ๋จผ์ ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ ๋ฐ์์ฑ์ด ์ข๊ณ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
์ฐ์ ์์์ ์ข ๋ฅ
React๋ ๊ฐ๊ฐ ๋ค๋ฅธ ์ค์๋๋ฅผ ๊ฐ์ง ์ฌ๋ฌ ์ฐ์ ์์ ๋ ๋ฒจ์ ์ ์ํฉ๋๋ค:
- ์ฆ์ ์ฐ์ ์์(Immediate Priority): ์ฌ์ฉ์ ์ ๋ ฅ ์ด๋ฒคํธ์ ๊ฐ์ด ์ฆ์ ์คํ๋์ด์ผ ํ๋ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ฐจ๋จ ์ฐ์ ์์(User-Blocking Priority): ์ ๋๋ฉ์ด์ ๋ฐ ํธ๋์ง์ ๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ฐจ๋จํ๋ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ณดํต ์ฐ์ ์์(Normal Priority): ๋๋ถ๋ถ์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฎ์ ์ฐ์ ์์(Low Priority): ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ ๋ฐ ๋ถ์๊ณผ ๊ฐ์ด ์๊ฐ์ ๋ฏผ๊ฐํ์ง ์์ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ ํด ์ฐ์ ์์(Idle Priority): ๋ฐ์ดํฐ ํ๋ฆฌํ์นญ๊ณผ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ ํด ์ํ์ผ ๋ ์คํํ ์ ์๋ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง ์ค์ ์์
React๊ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํ๋ ๋์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ํ๋์ ํ์ดํํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ธ์. React Fiber๊ฐ ์๋ค๋ฉด, React๊ฐ ๋ชฉ๋ก ์ ๋ฐ์ดํธ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ํ์ดํ ๊ฒฝํ์ด ๋๋ฆฌ๊ณ ๋ต๋ตํด์ง ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ React Fiber๋ฅผ ์ฌ์ฉํ๋ฉด React๋ ๋ชฉ๋ก ์ ๋ฐ์ดํธ๋ณด๋ค ์ฌ์ฉ์ ์ ๋ ฅ ์ด๋ฒคํธ์ ์ฐ์ ์์๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์ฆ, React๋ ๋ชฉ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ผ์ ์ค์งํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ๋ค์ ๋ชฉ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ฌ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ์ดํ ๊ฒฝํ์ด ๋ถ๋๋ฝ๊ณ ๋ฐ์์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
๋ ๋ค๋ฅธ ์๋ก ์์ ๋ฏธ๋์ด ํผ๋๋ฅผ ์๊ฐํด ๋ณด์ธ์. ์๋ก์ด ๋๊ธ ํ์๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ค๋๋๊ณ ๋ ๊ด๋ จ๋ ์ฝํ ์ธ ๋ฅผ ๋ก๋ํ๋ ๊ฒ๋ณด๋ค ์ฐ์ ๋์ด์ผ ํฉ๋๋ค. Fiber๋ ์ด๋ฌํ ์ฐ์ ์์ ์ง์ ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ์ต๊ทผ ํ๋์ ๋จผ์ ๋ณผ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ์ค์ง์ ์ธ ์์ฌ์
React Fiber์ ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ ์ดํดํ๋ ๊ฒ์ ๊ฐ๋ฐ์์๊ฒ ์ฌ๋ฌ ๊ฐ์ง ์ค์ง์ ์ธ ์์ฌ์ ์ ์ค๋๋ค:
- ์ค์ ๊ฒฝ๋ก ์ต์ ํ: ๊ฐ์ฅ ์ค์ํ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ณํ๊ณ ์ต๊ณ ์ฐ์ ์์๋ก ์ฒ๋ฆฌ๋๋๋ก ํฉ๋๋ค.
- ์ค์ํ์ง ์์ ์์ ์ง์ฐ: ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ ๋ฐ ๋ถ์๊ณผ ๊ฐ์ ์ค์ํ์ง ์์ ์์ ์ ๋ฎ์ ์ฐ์ ์์ ๋ ๋ฒจ๋ก ์ง์ฐ์ํต๋๋ค.
- `useDeferredValue` ํ ์ฌ์ฉ: React 18์ ๋์ ๋ ์ด ํ ์ ์ฌ์ฉํ๋ฉด UI์ ๋ ์ค์ํ ๋ถ๋ถ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- `useTransition` ํ ์ฌ์ฉ: ์ด ํ ์ ์ฌ์ฉํ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ํธ๋์ง์ ์ผ๋ก ํ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ๋ฐ์ดํธ๊ฐ ์ฒ๋ฆฌ๋๋ ๋์ React๊ฐ UI ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ์ง์ํฉ๋๋ค.
- ์ฅ๊ธฐ ์คํ ์์ ํผํ๊ธฐ: ์ฅ๊ธฐ ์คํ ์์ ์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๋๋ก ํฉ๋๋ค.
React Fiber ๋ฐ ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ ์ด์
React Fiber์ ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ํฅ์๋ ๋ฐ์์ฑ: ๊ณ์ฐ๋์ด ๋ง์ ์์ ์ ์ํํ ๋์๋ React๋ ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ: ์ฌ์ฉ์๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉํ ๋์๋ ๋ ๋ถ๋๋ฝ๊ณ ์ ์ฐํ UI๋ฅผ ๊ฒฝํํฉ๋๋ค.
- ๋ ๋์ ์ฑ๋ฅ: React๋ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ๊ณ ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ํผํ ์ ์์ต๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ์ฒด๊ฐ ์ฑ๋ฅ: ๋์ ๋ณด์ด๋ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ๋์ด๊ณ ๋ ์ค์ํ ์์ ์ ์ง์ฐ์ํด์ผ๋ก์จ React๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
React Fiber๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ช ์ฌํด์ผ ํ ๋ช ๊ฐ์ง ๊ณผ์ ์ ๊ณ ๋ ค์ฌํญ๋ ์์ต๋๋ค:
- ๋ณต์ก์ฑ ์ฆ๊ฐ: React Fiber์ ์ํคํ ์ฒ์ ์์ ๋ฃจํ๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น : ๋น๋๊ธฐ ๋ ๋๋ง์ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๋๊ธฐ ๋ ๋๋ง์ ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
- ํธํ์ฑ: React Fiber๋ ๋๋ถ๋ถ์ ๊ธฐ์กด React ์ฝ๋์ ํ์ ํธํ๋์ง๋ง, ์ผ๋ถ ์ค๋๋ ์ปดํฌ๋ํธ๋ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ์ ์์ต๋๋ค. ์ ๊ทธ๋ ์ด๋ ์ค์๋ ํญ์ ์ ์คํ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค.
- ๊ธฐ์(Starvation) ๊ฐ๋ฅ์ฑ: ํญ์ ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ๋๊ธฐ ์ค์ด๋ผ๋ฉด ๋ฎ์ ์ฐ์ ์์์ ์์ ์ด ์ ํ ์คํ๋์ง ์๋ ์๋๋ฆฌ์ค๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ ์ ์ ํ ์ฐ์ ์์ ์ง์ ์ด ์ค์ํฉ๋๋ค.
์ ์ธ๊ณ์ ์์
React Fiber์ ์ด์ ์ ๋ณด์ฌ์ฃผ๋ ๋ค์ ๊ธ๋ก๋ฒ ์์๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์:
- ์ ์์๊ฑฐ๋ ํ๋ซํผ (๊ธ๋ก๋ฒ): ์์ฒ ๊ฐ์ ์ ํ์ด ์๋ ์ด์ปค๋จธ์ค ์ฌ์ดํธ๋ React Fiber๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ถ์ฒ ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ ์ค์ํ ์์ ๋ณด๋ค ์ ํ ์ธ๋ถ ์ ๋ณด ํ์ ๋ฐ ์ฌ์ฉ์ ์ํธ์์ฉ(์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ, ๊ฒฐ๊ณผ ํํฐ๋ง)์ ์ฐ์ ์์๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์์ ์์น๋ ์ธํฐ๋ท ์๋์ ๊ด๊ณ์์ด ๋น ๋ฅด๊ณ ๋ฐ์์ ์ธ ์ผํ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ธ์ต ๊ฑฐ๋ ํ๋ซํผ (๋ฐ๋, ๋ด์, ๋์ฟ): ๋น ๋ฅด๊ฒ ๋ณํํ๋ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ์ค์๊ฐ ๊ฑฐ๋ ํ๋ซํผ์ ๊ณผ๊ฑฐ ์ฐจํธ๋ ๋ด์ค ํผ๋๋ฅผ ํ์ํ๋ ๊ฒ๋ณด๋ค ํ์ฌ ๊ฐ๊ฒฉ๊ณผ ํธ๊ฐ์ฐฝ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ฐ์ ์ํด์ผ ํฉ๋๋ค. React Fiber๋ ์ด๋ฌํ ์ฐ์ ์์ ์ง์ ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ํธ๋ ์ด๋๊ฐ ์ต์ํ์ ์ง์ฐ ์๊ฐ์ผ๋ก ๊ฐ์ฅ ์ค์ํ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๊ต์ก ํ๋ซํผ (์ธ๋, ๋ธ๋ผ์ง, ๋ฏธ๊ตญ): ๋ํํ ์ฐ์ต ๋ฌธ์ ์ ๋น๋์ค ๊ฐ์๊ฐ ์๋ ์จ๋ผ์ธ ํ์ต ํ๋ซํผ์ React Fiber๋ฅผ ์ฌ์ฉํ์ฌ ๊ณผ์ ์งํ๋ฅ ํ์์ค ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ ์ค์ํ ์์ ๋ณด๋ค ์ฐ์ต ์ค ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ ์ฌ์์ ์ฐ์ ์์๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์ด๋ ๋ค์ํ ์ธํฐ๋ท ์ฐ๊ฒฐ ํ๊ฒฝ์ ํ์๋ค์๊ฒ ์ํํ๊ณ ๋ชฐ์ ๋ ๋์ ํ์ต ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
- ์์ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ (์ ์ธ๊ณ): ์์ ๋ฏธ๋์ด ํ๋ซํผ์ ์ค๋๋ ์ฝํ ์ธ ๋ฅผ ๋ก๋ํ๊ฑฐ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ํํ๋ ๊ฒ๋ณด๋ค ์๋ก์ด ๊ฒ์๋ฌผ๊ณผ ์๋ฆผ์ ํ์ํ๋ ๊ฒ์ ์ฐ์ ์ํด์ผ ํฉ๋๋ค. React Fiber๋ ์ฆ์ ํ์ํ์ง ์์ '์ถ์ฒ ์น๊ตฌ'์ ๊ฐ์ ๊ฒ์ ์ฒ์ฒํ ์ ๋ฐ์ดํธํ๋ ๋์ ์ฌ์ฉ์์๊ฒ "์๋ก์ด ์์"์ ํ์ํ๋ ๊ฒ์ ์ฐ์ ์ํ ์ ์๋๋ก ํฉ๋๋ค.
Fiber๋ฅผ ์ฌ์ฉํ React ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: React DevTools๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ React๊ฐ ๋ ๋๋ง์ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ์๋นํ๋ ์์ญ์ ์๋ณํฉ๋๋ค. ์ด๋ ์๋ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ ํํ ์ฐพ์๋ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ๊ธฐ๋ฒ: `React.memo`, `useMemo`, `useCallback`์ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ์ด๋ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๊ณ ์ ๋ ฅ์ด ๋ณ๊ฒฝ๋์์ ๋๋ง ๋ฆฌ๋ ๋๋งํ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ถํ (Code Splitting): ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋๋๋ค. ์ด๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. `React.lazy`์ `Suspense`๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ถํ ์ ๊ตฌํํ์ธ์.
- ๋๊ท๋ชจ ๋ชฉ๋ก์ ์ํ ๊ฐ์ํ: ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๋ ๋๋งํ๋ ๊ฒฝ์ฐ, ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ์ฌ ํ๋ฉด์ ๋ณด์ด๋ ํญ๋ชฉ๋ง ๋ ๋๋งํฉ๋๋ค. `react-window`๋ `react-virtualized`์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
- ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง: ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง์ ๊ตฌํํ์ฌ ์ฌ์ฉ์ ์ ๋ ฅ์ด๋ ๋ค๋ฅธ ์ด๋ฒคํธ๋ก ์ธํด ํธ๋ฆฌ๊ฑฐ๋๋ ์ ๋ฐ์ดํธ ๋น๋๋ฅผ ์ ํํฉ๋๋ค. ์ด๋ ๊ณผ๋ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ๋ฐ ์์ฐ ์ต์ ํ: ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์์ฐ์ ์์ถํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํฉ๋๋ค. ๋ฐ์ํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ์ธ์.
- ์ฑ๋ฅ ์ ๊ธฐ ๋ชจ๋ํฐ๋ง: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๋ฐ์ํ ์ ์๋ ์๋ก์ด ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค. Google PageSpeed Insights ๋ฐ WebPageTest์ ๊ฐ์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ ์งํ๋ฅผ ์ถ์ ํ๊ณ ๊ฐ์ ์์ญ์ ํ์ ํ์ธ์.
๊ฒฐ๋ก
React Fiber์ ์์ ๋ฃจํ ์ค๋จ ๋ฐ ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ ๋๋ง์ ๊ณ ์ฑ๋ฅ์ ๋ฐ์ํ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๊ฐ๋ฐ์๋ React Fiber์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ๋ณต์กํ UI์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ค๋ฃฐ ๋์๋ ๋ถ๋๋ฝ๊ณ ์ ์ฐํ๋ฉฐ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ Fiber์ ์ํคํ ์ฒ ๊ฐ์ ์ ๊ธ๋ก๋ฒ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ํ๋์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ด์์ผ๋ก ๋จ์ ๊ฒ์ ๋๋ค.
์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๊ฐ๋ ๊ณผ ๊ธฐ์ ์ ์์ฉํ๋ฉด React Fiber์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ๊ณ ๋ค์ํ ํ๋ซํผ๊ณผ ์ฅ์น์์ ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์ ๋ง์กฑ๋๋ฅผ ๋์ด๊ณ ๋น์ฆ๋์ค ์ฑ๊ณต์ ์ด๋ ์ ์์ต๋๋ค. ์ต์ ๋ํฅ์ ๋ฐ๋ผ๊ฐ๊ณ ์ง์ ์ผ๋ก ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํด React ๊ฐ๋ฐ์ ์งํํ๋ ํ๊ฒฝ์ ์ง์์ ์ผ๋ก ๋ฐฐ์ฐ๊ณ ์ ์ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.