본문으둜 κ±΄λ„ˆλ›°κΈ°

🎈 Chapter 4: μž¬μ‘°μ • (reconciliation)

μž¬μ‘°μ • μ΄ν•΄ν•˜κΈ°β€‹

일괄 μ²˜λ¦¬β€‹

λ¦¬μ•‘νŠΈλŠ” μž¬μ‘°μ • κ³Όμ •μ—μ„œ μ—¬λŸ¬ 가상 DOM μ—…λ°μ΄νŠΈλ₯Ό λͺ¨μ•„ ν•œ 번의 DOM μ—…λ°μ΄νŠΈλ‘œ κ²°ν•©ν•œ ν›„ μ‹€μ œ DOM에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό 일괄 μ²˜λ¦¬ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ‹€μ œ DOM을 μ—…λ°μ΄νŠΈν•˜λŠ” νšŸμˆ˜κ°€ 쀄어 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯이 κ°œμ„ λ©λ‹ˆλ‹€.

function Example() {
const [count, setCount] = useState(0);

const handleClick = () => {
setCount((prevCount) => prevCount + 1);
setCount((prevCount) => prevCount + 1);
setCount((prevCount) => prevCount + 1);
}

return (
<div>
<p>카운트: {count}</p>
<button onClick={handleClick}>증가</button>
</div>
)
}

λ¦¬μ•‘νŠΈλŠ” 일괄 μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— count + 1을 λ”°λ‘œ μ‹€ν–‰ν•΄ DOM을 μ„Έ 번 μ—…λ°μ΄νŠΈν•˜λŠ” λŒ€μ‹  count + 3둜 DOM을 ν•œ 번만 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

κΈ°μ‘΄ κΈ°μˆ β€‹

μŠ€νƒ μž¬μ‘°μ •μžβ€‹

μŠ€νƒ μž¬μ‘°μ •μžλŠ” μž‘μ—…μ„ μΌμ‹œ μ€‘μ§€ν•˜κ±°λ‚˜ μ—°κΈ°ν•˜μ§€ μ•Šκ³  순차적으둜 λ³€κ²½ 사항을 λ Œλ”λ§ν•©λ‹ˆλ‹€.
계산 λΉ„μš©μ΄ λΉ„μ‹Ό μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§μ„ 막아 버리면 μ‚¬μš©μž μž…λ ₯이 λˆˆμ— 띄가 버벅거리며 화면에 ν‘œμ‹œλ©λ‹ˆλ‹€. μŠ€νƒ μž¬μ‘°μ •μžλŠ” μ—…λ°μ΄νŠΈμ˜ μš°μ„ μˆœμœ„λ₯Ό μ„€μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 덜 μ€‘μš”ν•œ μ—…λ°μ΄νŠΈκ°€ 더 μ€‘μš”ν•œ μ—…λ°μ΄νŠΈλ₯Ό λ°©ν•΄ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

νŒŒμ΄λ²„ μž¬μ‘°μ •μžβ€‹

νŒŒμ΄λ²„ μž¬μ‘°μ •μ—λŠ” μ‘°μ •μžλ₯Ό μœ„ν•œ μž‘μ—… λ‹¨μœ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” νŒŒμ΄λ²„λΌλŠ” 데이터 ꡬ쑰가 μ‚¬μš©λ©λ‹ˆλ‹€. νŒŒμ΄λ²„λŠ” λ¦¬μ•‘νŠΈ μ—˜λ¦¬λ¨ΌνŠΈμ—μ„œ μƒμ„±λ˜λŠ”λ°, 핡심적인 차이점은 νŒŒμ΄λ²„λŠ” μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  수λͺ…이 κΈ΄ 반면 λ¦¬μ•‘νŠΈ μ—˜λ¦¬λ¨ΌνŠΈλŠ” μž„μ‹œμ μ΄κ³  μƒνƒœκ°€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

데이터 κ΅¬μ‘°λŸ¬μ„œμ˜ νŒŒμ΄λ²„β€‹

νŒŒμ΄λ²„ μž¬μ‘°μ •μžλŠ” μ—…λ°μ΄νŠΈμ˜ μš°μ„ μˆœμœ„λ₯Ό μ •ν•˜κ³  이에 따라 λ™μ‹œ 싀행을 κ°€λŠ₯μΌ€ ν•΄μ„œ λ¦¬μ•‘νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯κ³Ό 응닡성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. νŒŒμ΄λ²„ 데이터 κ΅¬μ‘°λŠ” λ³€κ²½ κ°€λŠ₯ν•œ μΈμŠ€ν„΄μŠ€λ‘œ μ„€κ³„λ˜μ—ˆμœΌλ©° μ‘°μ • κ³Όμ •μ—μ„œ ν•„μš”μ— 따라 μ—…λ°μ΄νŠΈλ˜κ³  μž¬λ°°μΉ˜λ©λ‹ˆλ‹€.
νŒŒμ΄λ²„ μž¬μ‘°μ •μ—λŠ” ν˜„μž¬ νŒŒμ΄λ²„ νŠΈλ¦¬μ™€ λ‹€μŒ νŒŒμ΄λ²„ 트리λ₯Ό 비ꡐ해 μ–΄λŠ λ…Έλ“œλ₯Ό μ—…λ°μ΄νŠΈ, μΆ”κ°€, μ œκ±°ν• μ§€ νŒŒμ•…ν•˜λŠ” μž‘μ—…μ΄ ν¬ν•¨λ©λ‹ˆλ‹€.

μ‘°μ • κ³Όμ • 쀑에 νŒŒμ΄λ²„ μž¬μ‘°μ •μžλŠ” 가상 DOM의 각 λ¦¬μ•‘νŠΈ μ—˜λ¦¬λ¨ΌνŠΈμ— λŒ€ν•΄ νŒŒμ΄λ²„ λ…Έλ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. νŒŒμ΄λ²„ λ…Έλ“œκ°€ μƒμ„±λ˜λ©΄ νŒŒμ΄λ²„ μž¬μ‘°μ •μžλŠ” μž‘μ—… 루프(work loop)λ₯Ό μ‚¬μš©ν•΄ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. μž‘μ—… λ£¨ν”„λŠ” 루프 νŒŒμ΄λ²„ λ…Έλ“œμ—μ„œ μ‹œμž‘ν•΄ μ»΄ν¬λ„ŒνŠΈ 트리λ₯Ό 따라 λ‚΄λ €κ°€λ©΄μ„œ μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•œ 경우 각 νŒŒμ΄λ²„ λ…Έλ“œλ₯Ό "더티"둜 ν‘œμ‹œν•©λ‹ˆλ‹€. 끝에 λ„λ‹¬ν•˜λ©΄ λ‹€μ‹œ λ°˜λŒ€λ‘œ μˆœνšŒν•˜λ©΄μ„œ λΈŒλΌμš°μ €μ˜ DOM νŠΈλ¦¬μ™€λŠ” λΆ„λ¦¬λœ μƒˆ DOM 트리λ₯Ό λ©”λͺ¨λ¦¬μ— μƒμ„±ν•©λ‹ˆλ‹€. μƒˆ DOM νŠΈλ¦¬λŠ” 이후 νšŒλ©΄μ— λ°˜μ˜λ©λ‹ˆλ‹€.
이 μž‘μ—…μ€ 두 κ°€μ§€ ν•¨μˆ˜λ‘œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. beginWork(μž‘μ—… μ‹œμž‘)λŠ” μœ„μ—μ„œ μ•„λž˜λ‘œ μ΄λ™ν•˜λ©° μ»΄ν¬λ„ŒνŠΈλ₯Ό "μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•¨"으둜 ν‘œμ‹œν•˜κ³ , completeWork(μž‘μ—… μ™„λ£Œ)λŠ” λ‹€μ‹œ μœ„λ‘œ μ΄λ™ν•˜λ©° λΈŒλΌμš°μ €μ—μ„œ λΆ„λ¦¬λœ μ‹€μ œ DOM μ—˜λ¦¬λ¨ΌνŠΈμ˜ 트리λ₯Ό λ©”λͺ¨λ¦¬μ— κ΅¬μ„±ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ˜€ν”„μŠ€ν¬λ¦° λ Œλ”λ§ ν”„λ‘œμ„ΈμŠ€λŠ” μ‚¬μš©μžκ°€ λ³Ό 수 μ—†μœΌλ―€λ‘œ μ–Έμ œλ“ μ§€ μ€‘λ‹¨ν•˜κ³  버릴 수 μžˆμŠ΅λ‹ˆλ‹€.

더블 버퍼링​

더블 버퍼링은 컴퓨터 κ·Έλž˜ν”½ 및 λΉ„λ””μ˜€ μ²˜λ¦¬μ—μ„œ κΉœλ°•μž„μ„ 쀄이고 체감 μ„±λŠ₯을 κ°œμ„ ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. 이 κΈ°μˆ μ€ μ΄λ―Έμ§€λ‚˜ ν”„λ ˆμž„μ„ μ €μž₯ν•˜κΈ° μœ„ν•œ 두 개의 버퍼(λ˜λŠ” λ©”λͺ¨λ¦¬ 곡간)λ₯Ό μƒμ„±ν•˜κ³  일정 κ°„κ²©μœΌλ‘œ 두 버퍼λ₯Ό μ „ν™˜ν•΄ μ΅œμ’… μ΄λ―Έμ§€λ‚˜ λ™μ˜μƒμ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

νŒŒμ΄λ²„ μž¬μ‘°μ •μ€ 더블 버퍼링과 λΉ„μŠ·ν•©λ‹ˆλ‹€. μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•˜λ©΄ ν˜„μž¬ νŒŒμ΄λ²„ νŠΈλ¦¬κ°€ ν¬ν¬λ˜μ–΄ μ£Όμ–΄μ§„ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ˜ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜μ˜ν•˜λ„λ‘ μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€. 이λ₯Ό λ Œλ”λ§μ΄λΌκ³  ν•©λ‹ˆλ‹€. κ·Έ ν›„ ν˜„μž¬ 트리λ₯Ό λŒ€μ²΄ν•  νŠΈλ¦¬κ°€ μ€€λΉ„λ˜κ³  μ‚¬μš©μžκ°€ κΈ°λŒ€ν•˜λŠ” μƒνƒœλ₯Ό μ •ν™•ν•˜κ²Œ λ°˜μ˜ν•˜λ©΄, 더블 λ²„νΌλ§μ—μ„œ λΉ„λ””μ˜€ 버퍼λ₯Ό κ΅μ²΄ν•˜λŠ” κ²ƒμ²˜λŸΌ ν˜„μž¬ νŒŒμ΄λ²„ νŠΈλ¦¬μ™€ κ΅μ²΄λ©λ‹ˆλ‹€. 이λ₯Ό μž¬μ‘°μ •μ˜ 컀밋 단계 λ˜λŠ” 컀밋이라고 ν•©λ‹ˆλ‹€.

νŒŒμ΄λ²„ μž¬μ‘°μ •μžλ₯Ό μ‚¬μš©ν•˜λ©΄ JSX μ—˜λ¦¬λ¨ΌνŠΈμ˜ μ‚¬μš©μž μ •μ˜ νŠΈλ¦¬μ—μ„œ 두 κ°€μ§€ νŠΈλ¦¬κ°€ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. "ν˜„μž¬" νŒŒμ΄λ²„λ₯Ό ν¬ν•¨ν•˜λŠ” νŠΈλ¦¬μ™€ μž‘μ—…μš© νŒŒμ΄λ²„λ₯Ό ν¬ν•¨ν•˜λŠ” νŠΈλ¦¬μž…λ‹ˆλ‹€.

νŒŒμ΄λ²„ μž¬μ‘°μ •β€‹

νŒŒμ΄λ²„ μž¬μ‘°μ •μ€ λ Œλ”λ§ 단계와 컀밋 λ‹¨κ³„λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. λ¦¬μ•‘νŠΈλŠ” λ Œλ”λ§ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  이λ₯Ό DOM에 μ»€λ°‹ν•΄μ„œ μ‚¬μš©μžμ—κ²Œ 보여 μ£ΌκΈ° 전에 μ–Έμ œλ“  폐기할 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ Œλ”λ§ 쀑단이 κ°€λŠ₯ν•΄μ§„ κ²ƒμž…λ‹ˆλ‹€. λ Œλ”λ§μ΄ 쀑단 κ°€λŠ₯ν•œ λ“― λ³΄μ΄λŠ” μ΄μœ λŠ” λ¦¬μ•‘νŠΈ μŠ€μΌ€μ€„λŸ¬κ°€ 5λ°€λ¦¬μ΄ˆλ§ˆλ‹€ 싀행을 메인 μŠ€λ ˆλ“œλ‘œ 돌렀주기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ Œλ”λ§ 단계​

λ Œλ”λ§ λ‹¨κ³„λŠ” ν˜„μž¬ νŠΈλ¦¬μ—μ„œ μƒνƒœ λ³€κ²½ μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ μ‹œμž‘ν•©λ‹ˆλ‹€. λ¦¬μ•‘νŠΈλŠ” 각 νŒŒμ΄λ²„λ₯Ό μž¬κ·€μ , λ‹¨κ³„μ μœΌλ‘œ μˆœνšŒν•˜κ³  μ—…λ°μ΄νŠΈκ°€ 보λ₯˜ μ€‘μ΄λΌλŠ” μ‹ ν˜Έ ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•΄ λŒ€μ²΄ νŠΈλ¦¬μ— μ˜€ν”„μŠ€ν¬λ¦° λ³€κ²½ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

beginWork(μž‘μ—… μ‹œμž‘)​

beginWorkλŠ” μž‘μ—…μš© νŠΈλ¦¬μ— μžˆλŠ” νŒŒμ΄λ²„ λ…Έλ“œμ˜ μ—…λ°μ΄νŠΈ ν•„μš” μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. μ—¬λŸ¬ ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•˜κ³  κ³„μ†ν•΄μ„œ λ‹€μŒ νŒŒμ΄λ²„ λ…Έλ“œλ‘œ μ΄λ™ν•˜λ©° 트리의 맨 μ•„λž˜μ— 도달할 λ•ŒκΉŒμ§€ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이 μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ νŒŒμ΄λ²„ λ…Έλ“œμ—μ„œ completeWorkλ₯Ό ν˜ΈμΆœν•˜κ³  λ‹€μ‹œ 거슬러 μ˜¬λΌκ°€λ©° μˆœνšŒν•©λ‹ˆλ‹€.

completeWork(μž‘μ—… μ™„λ£Œ)​

completeWork ν•¨μˆ˜λŠ” μž‘μ—…μš© νŒŒμ΄λ²„ λ…Έλ“œμ— μ—…λ°μ΄νŠΈλ₯Ό μ μš©ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ—…λ°μ΄νŠΈλœ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ‹€μ œ DOM 트리λ₯Ό μƒˆλ‘­κ²Œ μƒμ„±ν•©λ‹ˆλ‹€. 이 μž‘μ—…μ„ 톡해 DOMμ—μ„œ λΆ„λ¦¬λœ 트리λ₯Ό λΈŒλΌμš°μ €κ°€ μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” μ˜μ—­ λ°”κΉ₯에 κ΅¬μ„±ν•©λ‹ˆλ‹€. 이 μ—˜λ¦¬λ¨ΌνŠΈ νŠΈλ¦¬κ°€ 아직 λΈŒλΌμš°μ € λ‚΄ λ¬Έμ„œμ— μΆ”κ°€λ˜μ§€ μ•Šμ€ μƒνƒœμΈ 것에 μœ μ˜ν•˜μ„Έμš”. λ¦¬μ•‘νŠΈλŠ” ν™”λ©΄ λ°–μ—μ„œ λ‹€μŒμ— 보여 쀄 UIλ₯Ό λ§Œλ“€μ—ˆμ„ λΏμž…λ‹ˆλ‹€. ν™”λ©΄ λ°–μ—μ„œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©΄ 쀑단할 수 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈκ°€ κ³„μ‚°ν•˜λŠ” λ‹€μŒ μƒνƒœλŠ” 아직 화면에 κ·Έλ €μ§€μ§€ μ•Šμ•˜μœΌλ―€λ‘œ, λ§Œμ•½ μš°μ„ μˆœμœ„κ°€ 더 높은 μ—…λ°μ΄νŠΈκ°€ μ˜ˆμ•½λ˜λ©΄ μ—¬κΈ°μ„œ λ§Œλ“€μ–΄μ§„ UIλŠ” λ²„λ €μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

beginWorkκ°€ νŒŒμ΄λ²„ λ…Έλ“œμ—μ„œ "μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•¨" μƒνƒœμ— λŒ€ν•œ ν”Œλž˜κ·Έ 생성 역할을 ν•œλ‹€λ©΄, completeWorkλŠ” 호슀트 ν™˜κ²½μ— 컀밋할 μƒˆ 트리λ₯Ό κ΅¬μ„±ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

컀밋 단계​

컀밋 λ‹¨κ³„λŠ” λ Œλ”λ§ λ‹¨κ³„μ—μ„œ 가상 DOM에 적용된 λ³€κ²½ 사항을 μ‹€μ œ DOM에 λ°˜μ˜ν•©λ‹ˆλ‹€. 컀밋 λ‹¨κ³„μ—μ„œλŠ” μƒˆ 가상 DOM νŠΈλ¦¬κ°€ 호슀트 ν™˜κ²½μ— μ»€λ°‹λ˜κ³  μž‘μ—…μš© νŠΈλ¦¬κ°€ ν˜„μž¬ 트리둜 λ°”λ€λ‹ˆλ‹€.
컀밋 λ‹¨κ³„λŠ” λ³€ν˜„ 단계와 λ ˆμ΄μ•„μ›ƒ λ‹¨κ³„λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

λ³€ν˜• 단계​

λ³€ν˜• λ‹¨κ³„λŠ” 컀밋 λ‹¨κ³„μ˜ 첫 λΆ€λΆ„μœΌλ‘œ, 가상 DOM에 적용된 λ³€κ²½ 사항을 μ‹€μ œ DOM에 λ°˜μ˜ν•©λ‹ˆλ‹€. 이 λ‹¨κ³„μ—μ„œ λ¦¬μ•‘νŠΈλŠ” μ μš©ν•  μ—…λ°μ΄νŠΈλ₯Ό μ‹λ³„ν•˜κ³  commitMutationEffectsλΌλŠ” 특수 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” λ Œλ”λ§ λ‹¨κ³„μ—μ„œ μž‘μ—…μš© 트리의 νŒŒμ΄λ²„ λ…Έλ“œμ— 적용된 μ—…λ°μ΄νŠΈλ₯Ό μ‹€μ œ DOM에 λ°˜μ˜ν•©λ‹ˆλ‹€.

λ ˆμ΄μ•„μ›ƒ 단계​

컀밋 λ‹¨κ²Œμ˜ λ‘˜μž¬ λΆ€λΆ„μœΌλ‘œ, DOMμ—μ„œ μ—…λ°μ΄νŠΈλœ λ…Έλ“œμ˜ μƒˆ λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•©λ‹ˆλ‹€. 이 λ‹¨κ³„μ—μ„œ λ¦¬μ•‘νŠΈλŠ” commitLayoutEffectsλΌλŠ” 특수 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” DOMμ—μ„œ μ—…λ°μ΄νŠΈλœ λ…Έλ“œμ˜ μƒˆ λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•©λ‹ˆλ‹€.
λ ˆμ΄μ•„μ›ƒ 단계가 μ™„λ£Œλ˜λ©΄, λ¦¬μ•‘νŠΈλŠ” λ Œλ”λ§ λ‹¨κ³„μ—μ„œ 가상 DOM에 μ μš©λ˜μ—ˆλ˜ λ³€κ²½ 사항을 μ‹€μž¬ DOM에 μ„±κ³΅μ μœΌλ‘œ λ°˜μ˜ν•˜κ²Œ λ©λ‹ˆλ‹€.

화면에 λͺ¨λ‘ ν‘œμ‹œν•˜κΈ°β€‹

λ¦¬μ•‘νŠΈλŠ” ν˜„μž¬ νŠΈλ¦¬λ‚˜ μž‘μ—…μš© 트리 쀑 ν•˜λ‚˜ μœ„μ— FiberRootNodeλ₯Ό λ‘‘λ‹ˆλ‹€. FiberRootNodeλŠ” μž¬μ‘°μ • κ³Όμ •μ˜ 컀밋 단계λ₯Ό κ΄€λ¦¬ν•˜λŠ” 핡심 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.
가상 DOM이 μ—…λ°μ΄νŠΈλ˜λ©΄ λ¦¬μ•‘νŠΈλŠ” ν˜„μž¬ 트리λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ€ 채 μž‘μ—…μš© 트리λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν˜„μž¬ μƒνƒœλ₯Ό μœ μ§€ν•˜λ©΄μ„œ 가상 DOM을 계속 λ Œλ”λ§ν•˜κ³  μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ Œλ”λ§ ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ£Œλ˜λ©΄ λ¦¬μ•‘νŠΈλŠ” commitRoot ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ μž‘μ—…μš© νŠΈλ¦¬μ— 적용된 λ³€κ²½ 사항을 μ‹€μ œ DOM에 μ»€λ°‹ν•©λ‹ˆλ‹€. commitRootλŠ” FiberRootNode의 포인터λ₯Ό ν˜„μž¬ νŠΈλ¦¬μ—μ„œ μž‘μ—…μš© 트리둜 μ „ν™˜ν•˜κ³ , μž‘μ—…μš© 트리λ₯Ό μƒˆλ‘œμš΄ ν˜„μž¬ 트리둜 λ§Œλ“­λ‹ˆλ‹€.

이 μ‹œμ λΆ€ν„° ν–₯ν›„ λͺ¨λ“  μ—…λ°μ΄νŠΈλŠ” μƒˆλ‘œμš΄ ν˜„μž¬ 트리 기반으둜 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 이 과정을 ν†΅ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•˜κ³ , μ—…λ°μ΄νŠΈλ₯Ό μ •ν™•ν•˜κ³  효율적으둜 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 이 λͺ¨λ“  μž‘μ—…μ€ μ¦‰μ‹œ λΈŒλΌμš°μ €μ— λ°˜μ˜λ©λ‹ˆλ‹€.