UI ๋ฐ์์ฑ์ ์ ์งํ๋ ๋ฐ ์ค์ํ React Fiber์ ์์ ๋ฃจํ ์ค๋จ ๋ฐ ์ฌ๊ฐ ์ ๋ต์ ์ดํด๋ณด์ธ์. Fiber๊ฐ ๋ณต์กํ ์ ๋ฐ์ดํธ์์๋ ์ด๋ป๊ฒ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํ๋์ง ์์๋ณด์ธ์.
React Fiber ์์ ๋ฃจํ ์ค๋จ ๋ณต๊ตฌ: ํฌ๊ด์ ์ธ ์์ ์ฌ๊ฐ ์ ๋ต
React Fiber๋ React์ ์ฌ์กฐ์ (reconciliation) ์๊ณ ๋ฆฌ์ฆ์ ์์ ํ ์ฌ์์ฑํ ๊ฒ์ ๋๋ค. ์ฃผ์ ๋ชฉํ๋ ์ ๋๋ฉ์ด์ , ๋ ์ด์์, ์ ์ค์ฒ์ ๊ฐ์ ์์ญ์์์ ์ ํฉ์ฑ์ ๋์ด๋ ๊ฒ์ ๋๋ค. Fiber์ ํต์ฌ ์ธก๋ฉด ์ค ํ๋๋ ๋ ๋๋ง ์์ ์ ์ค๋จ, ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋ฐ ํฌ๊ธฐํ ์ ์๋ ๋ฅ๋ ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด React๋ ๋ณต์กํ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ ๋์๋ UI ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
React Fiber ์ํคํ ์ฒ ์ดํดํ๊ธฐ
์ค๋จ๊ณผ ์ฌ๊ฐ๋ฅผ ์ดํด๋ณด๊ธฐ ์ ์, Fiber ์ํคํ ์ฒ๋ฅผ ๊ฐ๋จํ ๋ณต์ตํด ๋ณด๊ฒ ์ต๋๋ค. React Fiber๋ ์ ๋ฐ์ดํธ๋ฅผ ์์ ์์ ๋จ์๋ก ๋๋๋๋ค. ๊ฐ ์์ ๋จ์๋ React ์ปดํฌ๋ํธ์ ์ฐ๊ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ธ Fiber๋ฅผ ๋ํ๋ ๋๋ค. ์ด Fiber๋ค์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ฐ์ํ๋ ํธ๋ฆฌ๋ฅผ ํ์ฑํฉ๋๋ค.
Fiber์ ์ฌ์กฐ์ ํ๋ก์ธ์ค๋ ๋ ๋จ๊ณ๋ก ๋๋ฉ๋๋ค:
- ๋ ๋ ๋จ๊ณ(Render Phase): DOM์ ์ด๋ค ๋ณ๊ฒฝ์ด ํ์ํ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ ๋น๋๊ธฐ์ ์ด๋ฉฐ ์ค๋จ๋ ์ ์์ต๋๋ค. ์ปค๋ฐํ ์ดํํธ ๋ชฉ๋ก์ ๊ตฌ์ฑํฉ๋๋ค.
- ์ปค๋ฐ ๋จ๊ณ(Commit Phase): ๋ณ๊ฒฝ ์ฌํญ์ DOM์ ์ ์ฉํฉ๋๋ค. ์ด ๋จ๊ณ๋ ๋๊ธฐ์ ์ด๋ฉฐ ์ค๋จ๋ ์ ์์ต๋๋ค. DOM์ด ์ผ๊ด๋๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ ๋ฐ์ดํธ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ ๋ฃจํ์ ๋ ๋๋ง์์์ ์ญํ
์์ ๋ฃจํ(work loop)๋ ๋ ๋๋ง ๊ณผ์ ์ ํต์ฌ์ ๋๋ค. Fiber ํธ๋ฆฌ๋ฅผ ์ํํ๋ฉฐ ๊ฐ Fiber๋ฅผ ์ฒ๋ฆฌํ๊ณ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฐ์ ํฉ๋๋ค. ์ฃผ์ ์์ ๋ฃจํ ํจ์๋ ์ข ์ข `workLoopSync`(๋๊ธฐ) ๋๋ `workLoopConcurrent`(๋น๋๊ธฐ)๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ๋ ์ด์ ํ ์ผ์ด ์๊ฑฐ๋ ๋์ ์ฐ์ ์์์ ์์ ์ด ์ค๋จ์ํฌ ๋๊น์ง ๊ณ์ ์คํ๋ฉ๋๋ค.
์ด์ ์ ์คํ(Stack) ์ฌ์กฐ์ ๊ธฐ์์๋ ๋ ๋๋ง ๊ณผ์ ์ด ๋๊ธฐ์ ์ด์์ต๋๋ค. ๋ง์ฝ ํฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ ์ฒด ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋ ๋๊น์ง ์ฐจ๋จ๋์์ต๋๋ค. ์ด๋ ์ข ์ข UI๊ฐ ๋ฉ์ถ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ต๋๋ค.
Fiber๋ ์์ ๋ฃจํ๊ฐ ์ค๋จ๋ ์ ์๋๋ก ํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. React๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ์ ์ด๊ถ์ ๋ค์ ์๋ณดํ์ฌ ์ฌ์ฉ์ ์ ๋ ฅ, ์ ๋๋ฉ์ด์ ๋ฐ ๊ธฐํ ๋์ ์ฐ์ ์์์ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฅ์๊ฐ ์คํ๋๋ ์ ๋ฐ์ดํธ ์ค์๋ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์ค๋จ: ์ธ์ ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ํ๋๊ฐ?
์์ ๋ฃจํ๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ค๋จ๋ ์ ์์ต๋๋ค:
- ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ: ํด๋ฆญ์ด๋ ํค ์ ๋ ฅ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋์ ์ฐ์ ์์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์์ ๋ฃจํ๊ฐ ์คํ๋๋ ๋์ ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด React๋ ํ์ฌ ์์ ์ ์ค๋จํ๊ณ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ํ์ ์ฌ๋ผ์ด์ค ๋ง๋ฃ: React๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค. ๊ฐ ์์ ์๋ ์คํํ ์ ์๋ ํ์ ์ฌ๋ผ์ด์ค๊ฐ ์ฃผ์ด์ง๋๋ค. ์์ ์ด ํ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ด๊ณผํ๋ฉด React๋ ์ด๋ฅผ ์ค๋จํ๊ณ ๋ธ๋ผ์ฐ์ ์ ์ ์ด๊ถ์ ๋๊ฒจ์ค๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ค์ผ์ค๋ง: ์ต์ ๋ธ๋ผ์ฐ์ ์๋ ์์ฒด์ ์ธ ์ค์ผ์ค๋ง ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. React๋ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ ์ค์ผ์ค๋ฌ์ ํ๋ ฅํด์ผ ํฉ๋๋ค.
ํ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ด ์๋ค: ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ํ๋์ ํ์ดํํ๋ ๋์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๊ฐ ๋ ๋๋ง๋๊ณ ์์ต๋๋ค. ์ค๋จ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ๋ ๋๋ง ๊ณผ์ ์ด UI๋ฅผ ์ฐจ๋จํ์ฌ ์ ๋ ฅ ํ๋๊ฐ ์๋ตํ์ง ์๊ฒ ๋ ์ ์์ต๋๋ค. Fiber์ ์ค๋จ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด React๋ ๋ ๋๋ง ๊ณผ์ ์ ์ผ์ ์ค์งํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ๋ค์ ๋ ๋๋ง์ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
์์ ์ฌ๊ฐ ์ ๋ต: React๋ ์ด๋ป๊ฒ ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ ์์ํ๋๊ฐ
์์ ๋ฃจํ๊ฐ ์ค๋จ๋๋ฉด React๋ ๋์ค์ ์์ ์ ์ฌ๊ฐํ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์์ ์ฌ๊ฐ ์ ๋ต์ด ํ์ํ ๋ถ๋ถ์ ๋๋ค. React๋ ์งํ ์ํฉ์ ์ ์คํ๊ฒ ์ถ์ ํ๊ณ ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ ์์ํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ค์์ ์ฌ๊ฐ ์ ๋ต์ ํต์ฌ์ ์ธ ์ธก๋ฉด์ ๋ถ์ํ ๊ฒ์ ๋๋ค:
1. ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก์์ Fiber ํธ๋ฆฌ
Fiber ํธ๋ฆฌ๋ ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ ๋ React๊ฐ ๊ธฐ์กด ํธ๋ฆฌ๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋ ์๋ก์ด ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด์ ํธ๋ฆฌ๋ ์ ํธ๋ฆฌ๊ฐ DOM์ ์ปค๋ฐ๋ ์ค๋น๊ฐ ๋ ๋๊น์ง ๋ณด์กด๋ฉ๋๋ค.
์ด ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋๋ถ์ React๋ ์งํ ์ํฉ์ ์์ง ์๊ณ ์์ ํ๊ฒ ์์ ๋ฃจํ๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค. ์์ ๋ฃจํ๊ฐ ์ค๋จ๋๋ฉด React๋ ๋ถ๋ถ์ ์ผ๋ก ์์ฑ๋ ์ ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ , ์ค๋น๊ฐ ๋๋ฉด ์ด์ ํธ๋ฆฌ์์ ์์ ์ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
2. `finishedWork` ๋ฐ `nextUnitOfWork` ํฌ์ธํฐ
React๋ ๋ ๋๋ง ๊ณผ์ ๋์ ๋ ๊ฐ์ง ์ค์ํ ํฌ์ธํฐ๋ฅผ ์ ์งํฉ๋๋ค:
- `nextUnitOfWork`: ๋ค์์ ์ฒ๋ฆฌํด์ผ ํ Fiber๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ด ํฌ์ธํฐ๋ ์์ ๋ฃจํ๊ฐ ์งํ๋จ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- `finishedWork`: ์๋ฃ๋ ์์ ์ ๋ฃจํธ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ๊ฐ Fiber๋ฅผ ์๋ฃํ ํ ์ดํํธ ๋ชฉ๋ก์ ์ถ๊ฐ๋ฉ๋๋ค.
์์ ๋ฃจํ๊ฐ ์ค๋จ๋์์ ๋, `nextUnitOfWork` ํฌ์ธํฐ๋ ์์ ์ฌ๊ฐ์ ํต์ฌ์ ์ฅ๊ณ ์์ต๋๋ค. React๋ ์ด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋จ๋ ์ง์ ๋ถํฐ Fiber ํธ๋ฆฌ ์ฒ๋ฆฌ๋ฅผ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
3. ์ปจํ ์คํธ ์ ์ฅ ๋ฐ ๋ณต์
๋ ๋๋ง ๊ณผ์ ๋์ React๋ ํ์ฌ ๋ ๋๋ง ํ๊ฒฝ์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ์งํฉ๋๋ค. ์ด ์ปจํ ์คํธ์๋ ํ์ฌ ํ ๋ง, ๋ก์ผ์ผ ๋ฐ ๊ธฐํ ๊ตฌ์ฑ ์ค์ ๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ํฌํจ๋ฉ๋๋ค.
์์ ๋ฃจํ๊ฐ ์ค๋จ๋๋ฉด React๋ ํ์ฌ ์ปจํ ์คํธ๋ฅผ ์ ์ฅํด์ผ ์์ ์ ์ฌ๊ฐํ ๋ ๋ณต์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ๋๋ง ๊ณผ์ ์ด ์ฌ๋ฐ๋ฅธ ์ค์ ์ผ๋ก ๊ณ์๋ ์ ์์ต๋๋ค.
4. ์ฐ์ ์์ ์ง์ ๋ฐ ์ค์ผ์ค๋ง
React๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์์ ์ ์ค์๋์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ํ ๋นํฉ๋๋ค. ์ฌ์ฉ์ ์ํธ์์ฉ๊ณผ ๊ฐ์ ๋์ ์ฐ์ ์์์ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ฎ์ ์ฐ์ ์์์ ์์ ๋ณด๋ค ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์์ ๋ฃจํ๊ฐ ์ค๋จ๋๋ฉด React๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ์์ ์ ๋จผ์ ์ฌ๊ฐํ ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฅ ์ค์ํ ์์ ์ด ๋จผ์ ์๋ฃ๋์ด UI ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ด ์คํ๋๋ ๋์ ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ค๊ณ ์์ํด ๋ด ์๋ค. React๋ ์ ๋๋ฉ์ด์ ๋ ๋๋ง์ ์ค๋จํ๊ณ ๋ฒํผ ํด๋ฆญ ํธ๋ค๋ฌ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ ๋ค์, ๊ทธ๊ฒ์ด ์๋ฃ๋๋ฉด ์ผ์ ์ค์ง๋์๋ ์ง์ ๋ถํฐ ์ ๋๋ฉ์ด์ ๋ ๋๋ง์ ์ฌ๊ฐํฉ๋๋ค.
์ฝ๋ ์์ : ์ค๋จ ๋ฐ ์ฌ๊ฐ ์ค๋ช
๋ด๋ถ ๊ตฌํ์ ๋ณต์กํ์ง๋ง, ๊ฐ๋จํ ์์ ๋ฅผ ํตํด ๊ฐ๋ ์ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค:
```javascript let nextUnitOfWork = null; let shouldYield = false; // Simulate yielding to the browser function performWork(fiber) { // ... process the fiber ... if (shouldYield) { // Pause the work and schedule it to resume later requestIdleCallback(() => { nextUnitOfWork = fiber; // Store the current fiber workLoop(); }); return; } // ... continue to the next fiber ... nextUnitOfWork = fiber.child || fiber.sibling || fiber.return; if (nextUnitOfWork) { performWork(nextUnitOfWork); } } function workLoop() { while (nextUnitOfWork && !shouldYield) { nextUnitOfWork = performWork(nextUnitOfWork); } } // Start the initial work nextUnitOfWork = rootFiber; workLoop(); ```์ด ๊ฐ๋จํ ์์ ์์ `shouldYield`๋ ์ค๋จ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. `requestIdleCallback`์ `workLoop`๊ฐ ๋์ค์ ์ฌ๊ฐ๋๋๋ก ์ค์ผ์ค๋งํ์ฌ ์ฌ๊ฐ ์ ๋ต์ ํจ๊ณผ์ ์ผ๋ก ๋ณด์ฌ์ค๋๋ค.
์ค๋จ ๋ฐ ์ฌ๊ฐ์ ์ด์
React Fiber์ ์ค๋จ ๋ฐ ์ฌ๊ฐ ์ ๋ต์ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ํฅ์๋ UI ๋ฐ์์ฑ: ์์ ๋ฃจํ๊ฐ ์ค๋จ๋ ์ ์๋๋ก ํจ์ผ๋ก์จ React๋ ์ฅ์๊ฐ ์คํ๋๋ ์ ๋ฐ์ดํธ ์ค์๋ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ: ๋ฐ์์ฑ์ด ์ข์ UI๋ ์ฌ์ฉ์๊ฐ ์ง์ฐ์ด๋ ๋ฉ์ถค ์์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉํ ์ ์์ผ๋ฏ๋ก ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
- ํฅ์๋ ์ฑ๋ฅ: React๋ ์ค์ํ ์์ ์ ์ฐ์ ์ฒ๋ฆฌํ๊ณ ๋ ์ค์ํ ์์ ์ ์ง์ฐ์ํด์ผ๋ก์จ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
- ๋์์ฑ ๋ ๋๋ง(Concurrent Rendering) ์ง์: ์ค๋จ๊ณผ ์ฌ๊ฐ๋ ๋์์ฑ ๋ ๋๋ง์ ํ์์ ์ด๋ฉฐ, ์ด๋ฅผ ํตํด React๋ ์ฌ๋ฌ ๋ ๋๋ง ์์ ์ ๋์์ ์ํํ ์ ์์ต๋๋ค.
๋ค์ํ ์ปจํ ์คํธ์ ๊ฑธ์น ์ค์ ์์
๋ค์์ React Fiber์ ์ค๋จ ๋ฐ ์ฌ๊ฐ๊ฐ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง์ ๋ํ ๋ช ๊ฐ์ง ์ค์ ์์์ ๋๋ค:
- ์ ์์๊ฑฐ๋ ํ๋ซํผ (๊ธ๋ก๋ฒ ์๋น์ค): ๋ณต์กํ ์ํ ๋ชฉ๋ก์ด ์๋ ๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์์ํด ๋ณด์ธ์. ์ฌ์ฉ์๊ฐ ํ์ํ ๋, ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์ปดํฌ๋ํธ๊ฐ ์ง์ฐ ๋ก๋ฉ๋๋ ๋์์๋ React Fiber๋ ๋ถ๋๋ฌ์ด ์คํฌ๋กค ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค. ์ค๋จ ๊ธฐ๋ฅ์ ์ฅ๋ฐ๊ตฌ๋์ ์ํ ์ถ๊ฐ์ ๊ฐ์ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฐ์ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์์ ์์น๋ ์ธํฐ๋ท ์๋์ ๊ด๊ณ์์ด UI ๋ฉ์ถค ํ์์ ๋ฐฉ์งํฉ๋๋ค.
- ๋ํํ ๋ฐ์ดํฐ ์๊ฐํ (๊ณผํ ์ฐ๊ตฌ - ๊ตญ์ ํ์ ): ๊ณผํ ์ฐ๊ตฌ์์๋ ๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ๊ฐ ์ผ๋ฐ์ ์ ๋๋ค. React Fiber๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณผํ์๋ค์ด ์ง์ฐ ์์ด ๋ฐ์ดํฐ๋ฅผ ํ๋, ์ด๋, ํํฐ๋งํ๋ฉฐ ์ค์๊ฐ์ผ๋ก ์ด๋ฌํ ์๊ฐํ์ ์ํธ์์ฉํ ์ ์์ต๋๋ค. ์ค๋จ ๋ฐ ์ฌ๊ฐ ์ ๋ต์ ์๋ก์ด ๋ฐ์ดํฐ ํฌ์ธํธ ๋ ๋๋ง๋ณด๋ค ์ํธ์์ฉ์ ์ฐ์ ์ํ์ฌ ์ํํ ํ์์ ์ด์งํฉ๋๋ค.
- ์ค์๊ฐ ํ์ ๋๊ตฌ (๊ธ๋ก๋ฒ ํ): ๋ฌธ์๋ ๋์์ธ์ ๋ํด ํ์ ํ๋ ๊ธ๋ก๋ฒ ํ์๊ฒ ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. React Fiber๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋์์ ๋ณ๊ฒฝ ์์ ์ ์ํํ๋ ๋์์๋ ์ฌ์ฉ์๊ฐ ์ํํ๊ฒ ๋ฌธ์๋ฅผ ์ ๋ ฅํ๊ณ ํธ์งํ ์ ์์ต๋๋ค. ์์คํ ์ ํค ์ ๋ ฅ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฐ์ ์ํ์ฌ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ๊ณผ ๊ด๊ณ์์ด ๋ชจ๋ ์ฐธ๊ฐ์์๊ฒ ๋ฐ์์ฑ ์๋ ๋๋์ ์ ์งํฉ๋๋ค.
- ์์ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ (๋ค์ํ ์ฌ์ฉ์ ๊ธฐ๋ฐ): ์ด๋ฏธ์ง, ๋น๋์ค, ํ ์คํธ๊ฐ ํฌํจ๋ ํผ๋๋ฅผ ๋ ๋๋งํ๋ ์์ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํฐ ์ด์ ์ ์ป์ต๋๋ค. React Fiber๋ ํผ๋๋ฅผ ๋ถ๋๋ฝ๊ฒ ์คํฌ๋กคํ ์ ์๊ฒ ํ๋ฉฐ, ํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ์ฝํ ์ธ ์ ๋ ๋๋ง์ ์ฐ์ ์ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ '์ข์์'๋ ๋๊ธ ๋ฌ๊ธฐ์ ๊ฐ์ ๊ฒ์๋ฌผ๊ณผ ์ํธ์์ฉํ๋ฉด React๋ ํผ๋ ๋ ๋๋ง์ ์ค๋จํ๊ณ ์ฆ์ ํด๋น ์ํธ์์ฉ์ ์ฒ๋ฆฌํ์ฌ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ ์ฐํ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ค๋จ ๋ฐ ์ฌ๊ฐ๋ฅผ ์ํ ์ต์ ํ
React Fiber๊ฐ ์ค๋จ ๋ฐ ์ฌ๊ฐ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง, ์ด ๊ธฐ๋ฅ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
- ๋ณต์กํ ๋ ๋๋ง ๋ก์ง ์ต์ํ: ํฐ ์ปดํฌ๋ํธ๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ปดํฌ๋ํธ๋ก ๋ถํดํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ๋จ์ผ ์๊ฐ ๋จ์์ ์ํํด์ผ ํ ์์ ์ ์์ด ์ค์ด๋ค์ด React๊ฐ ์์ ์ ์ค๋จํ๊ณ ์ฌ๊ฐํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ (Memoization) ๊ธฐ์ ์ฌ์ฉ: ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํด `React.memo`, `useMemo`, `useCallback`์ ์ฌ์ฉํ์ธ์. ์ด๋ ๋ ๋๋ง ๊ณผ์ ์์ ์ํํด์ผ ํ ์์ ์ ์์ ์ค์ฌ์ค๋๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ต์ ํ: ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๊ฐ์ ์ต์ํํ์ธ์.
- ์ปดํฌ๋ํธ ์ง์ฐ ๋ก๋ฉ(Lazy Load): `React.lazy`๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํ์ธ์. ์ด๋ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์น ์์ปค(Web Workers) ์ฌ์ฉ: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๊ฒฝ์ฐ, ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ๋ณ๋์ ์ค๋ ๋๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์ด๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ UI ๋ฐ์์ฑ์ ํฅ์์ํต๋๋ค.
์ผ๋ฐ์ ์ธ ํจ์ ๊ณผ ์ด๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ
React Fiber์ ์ค๋จ ๋ฐ ์ฌ๊ฐ ๊ธฐ๋ฅ์ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ํจ๊ณผ๋ฅผ ์ ํดํ ์ ์๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ํจ์ ์ด ์์ต๋๋ค:
- ๋ถํ์ํ ์ํ ์ ๋ฐ์ดํธ: ์ปดํฌ๋ํธ์์ ์ฆ์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ ๋ฐํ๋ฉด ๊ณผ๋ํ ๋ฆฌ๋ ๋๋ง์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ๊ฐ ํ์ํ ๋๋ง ์ ๋ฐ์ดํธ๋๋๋ก ํ์ธ์. React ํ๋กํ์ผ๋ฌ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์๋ณํ์ธ์.
- ๋ณต์กํ ์ปดํฌ๋ํธ ํธ๋ฆฌ: ๊น๊ฒ ์ค์ฒฉ๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ ์ฌ์กฐ์ ์ ํ์ํ ์๊ฐ์ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ๋ฉด ํธ๋ฆฌ๋ฅผ ๋ ํํํ ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋งํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค์ธ์.
- ์ฅ๊ธฐ ์คํ ๋๊ธฐ ์์ : ๋ ๋ ๋จ๊ณ ๋ด์์ ๋ณต์กํ ๊ณ์ฐ์ด๋ ๋คํธ์ํฌ ์์ฒญ๊ณผ ๊ฐ์ ์ฅ๊ธฐ ์คํ ๋๊ธฐ ์์ ์ ์ํํ์ง ๋ง์ธ์. ์ด๋ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๊ณ Fiber์ ์ด์ ์ ๋ฌดํจํํ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ์์ (์: `async/await`, `Promise`)์ ์ฌ์ฉํ๊ณ ์ด๋ฌํ ์์ ์ ์ปค๋ฐ ๋จ๊ณ๋ ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์ด๋ํ์ธ์.
- ์ปดํฌ๋ํธ ์ฐ์ ์์ ๋ฌด์: ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ ๋นํ์ง ์์ผ๋ฉด UI ๋ฐ์์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค. `useTransition`๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ํ์ํ์ฌ React๊ฐ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฐ์ ์ฒ๋ฆฌํ๋๋ก ํ์ธ์.
๊ฒฐ๋ก : ์ค๋จ๊ณผ ์ฌ๊ฐ์ ํ์ ๋ฐ์๋ค์ด๊ธฐ
React Fiber์ ์์ ๋ฃจํ ์ค๋จ ๋ฐ ์ฌ๊ฐ ์ ๋ต์ ๊ณ ์ฑ๋ฅ์ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ณ ์ด ๊ธ์์ ์ค๋ช ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด, ๋ณต์กํ๊ณ ๊น๋ค๋ก์ด ํ๊ฒฝ์์๋ ๋ถ๋๋ฝ๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ค๋จ๊ณผ ์ฌ๊ฐ๋ฅผ ์์ฉํจ์ผ๋ก์จ, React๋ ๊ฐ๋ฐ์๋ค์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๊ธ์ ์ ์ธ ๊ฒฝํ์ ๋ณด์ฅํ๋ฉฐ, ๋ค์ํ ์ฌ์ฉ์ ์ํธ์์ฉ๊ณผ ๋ฐ์ดํฐ ๋ณต์ก์ฑ์ ์ฝ๊ณ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์ง์ ํ ์ธ๊ณ์ ์์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ์ง์ํฉ๋๋ค.