# [[React 16+ Core Engine|React 16+ Core Engine]] ## πŸ“Œ Brief Summary React 16+ 핡심 엔진인 νŒŒμ΄λ²„(Fiber) μ•„ν‚€ν…μ²˜λŠ” λ™μ‹œμ„± λ Œλ”λ§([[Concurrent Rendering|Concurrent Rendering]])을 μ§€μ›ν•˜κΈ° μœ„ν•΄ μ™„μ „νžˆ μž¬μž‘μ„±λœ React의 μž¬μ‘°μ •(Reconciliation) μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€ [1, 2]. κ³Όκ±° λ™κΈ°μ μœΌλ‘œ 전체 μ»΄ν¬λ„ŒνŠΈ 트리λ₯Ό ν•œ λ²ˆμ— μ²˜λ¦¬ν•˜μ—¬ 메인 μŠ€λ ˆλ“œλ₯Ό μ°¨λ‹¨ν•˜λ˜ λ°©μ‹μ—μ„œ λ²—μ–΄λ‚˜, λ Œλ”λ§ μž‘μ—…μ„ '**νŒŒμ΄λ²„ λ…Έλ“œ(Fiber node)**'λΌλŠ” μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ μ§„μ μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€ [1-3]. 이 κ΅¬μ‘°λŠ” μ‹œκ°„ λΆ„ν• ([[Time-Slicing|Time-Slicing]]) 및 레인(Lane) λͺ¨λΈμ„ ν†΅ν•œ μž‘μ—… μš°μ„ μˆœμœ„ μ§€μ • κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬, 무거운 λ Œλ”λ§ 쀑에도 κΈ΄κΈ‰ν•œ μ‚¬μš©μž μž…λ ₯ μ²˜λ¦¬κ°€ μ§€μ—°λ˜μ§€ μ•Šλ„λ‘ UI λ°˜μ‘μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€ [2-6]. ## πŸ“– Core Content **가상 DOMκ³Ό νŒŒμ΄λ²„ 데이터 ꡬ쑰** κΈ°μ‘΄ React의 가상 DOM은 λΆˆλ³€μ„±(Immutable)을 λ λŠ” κ΅¬μ‘°μ˜€μœΌλ‚˜, 단일 μžμ‹ λ…Έλ“œλ₯Ό μ—¬λŸ¬ κ³³μ—μ„œ κ³΅μœ ν•  λ•Œμ˜ μ°Έμ‘° 문제 등을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ React 16+ 엔진은 λ³€κ²½ κ°€λŠ₯ν•œ '**증강 DOM(Augmented DOM)**' ν˜•νƒœμΈ νŒŒμ΄λ²„(Fiber) 데이터 ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€ [7]. νŒŒμ΄λ²„ 트리λ₯Ό κ΅¬μ„±ν•˜λŠ” 각 μ»΄ν¬λ„ŒνŠΈ(νŒŒμ΄λ²„ λ…Έλ“œ)λŠ” μ»΄ν¬λ„ŒνŠΈμ˜ νƒ€μž…, μƒνƒœ, 속성(props)은 λ¬Όλ‘  λΆ€λͺ¨, μžμ‹, ν˜•μ œ λ…Έλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€ [8, 9]. **μž‘μ—… 루프(Work Loop)와 μŠ€μΌ€μ€„λŸ¬ λ©”μ»€λ‹ˆμ¦˜** νŒŒμ΄λ²„ μž¬μ‘°μ • 엔진은 μž‘μ—… 루프λ₯Ό 톡해 ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ νŒŒμ΄λ²„ λ…Έλ“œλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€ [2]. μŠ€μΌ€μ€„λŸ¬λŠ” 레인 λͺ¨λΈμ— λ”°λ₯Έ μš°μ„ μˆœμœ„μ™€ 남은 ν”„λ ˆμž„ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ λ‹€μŒ μ²˜λ¦¬ν•  μž‘μ—… λ‹¨μœ„λ₯Ό μ„ νƒν•©λ‹ˆλ‹€ [10, 11]. ν•˜λ‚˜μ˜ μž‘μ—… λ‹¨μœ„λ₯Ό 마칠 λ•Œλ§ˆλ‹€ λΈŒλΌμš°μ €μ— μ œμ–΄κΆŒμ„ 양보(Yield)ν•΄μ•Ό ν•  κΈ΄κΈ‰ν•œ μž‘μ—…(μ‚¬μš©μž μž…λ ₯ λ“±)이 μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ 처리 μˆœμ„œλ₯Ό μœ μ—°ν•˜κ²Œ μ‘°μ •ν•©λ‹ˆλ‹€ [10, 11]. μ§„ν–‰ μ€‘μ΄λ˜ μž‘μ—…(WIP, Work-in-Progress)은 μš°μ„ μˆœμœ„μ— 따라 μΌμ‹œ 쀑지(Pause), 재개(Resume), 폐기(Discard), λ˜λŠ” μž¬μƒμ„±λ  수 μžˆμŠ΅λ‹ˆλ‹€ [12]. **μž¬μ‘°μ •(Reconciliation)의 2단계 뢄리** νŒŒμ΄λ²„ μ•„ν‚€ν…μ²˜λŠ” λ Œλ”λ§ μž‘μ—…μ˜ 쀑단 및 μš°μ„ μˆœμœ„ 처리λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λ €κ³  전체 과정을 두 κ°€μ§€ λͺ…ν™•ν•œ λ‹¨κ³„λ‘œ λΆ„λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€ [13]. * **λ Œλ”λ§ 단계 (Render Phase):** 이 λ‹¨κ³„λŠ” 비동기적이며 **μ€‘λ‹¨λ˜κ±°λ‚˜ μž¬μ‹œμž‘λ  수 μžˆλŠ” 순수 μ—°μ‚° κ³Όμ •**μž…λ‹ˆλ‹€ [13, 14]. νŒŒμ΄λ²„ 트리λ₯Ό μˆœνšŒν•˜λ©΄μ„œ 이전 μƒνƒœμ™€ μƒˆλ‘œμš΄ μƒνƒœμ˜ 차이λ₯Ό κ³„μ‚°ν•˜κ³ (Diffing), λ…Έλ“œ μ‚½μž…, μ—…λ°μ΄νŠΈ, μ‚­μ œμ™€ 같은 μ΄νŽ™νŠΈ(Effect) νƒœκ·Έλ₯Ό ν• λ‹Ήν•˜μ—¬ 변경이 ν•„μš”ν•œ νŒŒμ΄λ²„λ“€λ§Œ λͺ¨μ€ 'μ΄νŽ™νŠΈ 리슀트'λ₯Ό μ„ ν˜•μ μœΌλ‘œ κ΅¬μΆ•ν•©λ‹ˆλ‹€ [5, 13-15]. 이 λ‹¨κ³„μ—μ„œλŠ” μ‹€μ œ DOM을 직접 μˆ˜μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [13, 14]. * **컀밋 단계 (Commit Phase):** λ Œλ”λ§ 단계와 달리 **λ™κΈ°μ‹μœΌλ‘œ μ§„ν–‰λ˜λ©° μ ˆλŒ€ 쀑단될 수 μ—†μŠ΅λ‹ˆλ‹€** [14, 16, 17]. λ Œλ”λ§ λ‹¨κ³„μ—μ„œ μƒμ„±λœ μ΄νŽ™νŠΈ 리슀트λ₯Ό λ°”νƒ•μœΌλ‘œ μ‹€μ œ DOM 변이(μ‚½μž…, μ‚­μ œ, μ—…λ°μ΄νŠΈ)λ₯Ό ν•œ λ²ˆμ— μ μš©ν•©λ‹ˆλ‹€ [14-16]. DOM이 λ³€κ²½λœ 직후, `useLayoutEffect`κ°€ λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  이후 화면이 κ·Έλ €μ§„(Paint) λ’€ λΉ„λ™κΈ°μ μœΌλ‘œ `useEffect`κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€ [14, 16-18]. **μš°μ„ μˆœμœ„ 관리와 레인(Lane) λͺ¨λΈ** λ³΅μž‘ν•œ μ—…λ°μ΄νŠΈλ“€μ˜ μš°μ„ μˆœμœ„λ₯Ό μ •κ΅ν•˜κ²Œ 닀루기 μœ„ν•΄ ReactλŠ” 32λΉ„νŠΈ μ •μˆ˜ λΉ„νŠΈλ§ˆμŠ€ν¬ μ‹œμŠ€ν…œμΈ '**레인(Lane) λͺ¨λΈ**'을 μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€ [5, 6, 19]. 이 μ‹œμŠ€ν…œμ€ μ‚¬μš©μž 클릭/타이핑과 같은 '동기적(Sync) 레인', 슀크둀 같은 '연속적(InputContinuous) 레인', 데이터 페칭 λ“±μ˜ 'κΈ°λ³Έ(Default) 레인', 그리고 '유휴(Idle) 레인' λ“±μœΌλ‘œ μž‘μ—…μ˜ μ€‘μš”λ„λ₯Ό μ„ΈλΆ„ν™”ν•©λ‹ˆλ‹€ [4, 20]. 레인 λͺ¨λΈμ˜ λΉ„νŠΈ 연산을 톡해 λ Œλ”λŸ¬λŠ” μ—¬λŸ¬ μš°μ„ μˆœμœ„κ°€ κ²ΉμΉ˜λŠ” μƒν™©μ—μ„œλ„ κ°€μž₯ μ€‘μš”ν•œ μž‘μ—…μ„ λ¨Όμ € 화면에 λ°˜μ˜ν•  수 μžˆλ„λ‘ μ œμ–΄ν•©λ‹ˆλ‹€ [6, 18, 19]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Virtual DOM|Virtual DOM]], Reconciliation, Concurrent Rendering, [[Lane Model|Lane Model]], [[Time Slicing|Time-slicing]] - **Projects/Contexts:** [[React 18|React 18]] Automatic Batching, React Server Components (RSC - **Contradictions/Notes:** λ Œλ”λ§ 단계(Render Phase)λŠ” 높은 μš°μ„ μˆœμœ„ μž‘μ—…μ΄ λ“€μ–΄μ˜¬ 경우 μ–Έμ œλ“  μ€‘λ‹¨λ˜κ±°λ‚˜ μž¬μ‹œμž‘λ  수 μžˆμœΌλ―€λ‘œ 이 λ‹¨κ³„μ˜ λ‚΄λΆ€ μ—°μ‚°μ—λŠ” μ ˆλŒ€ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ(DOM μ‘°μž‘ λ“±)κ°€ ν¬ν•¨λ˜μ–΄μ„œλŠ” μ•ˆ 되며, λΆ€μˆ˜ 효과 μ²˜λ¦¬λŠ” λ°˜λ“œμ‹œ λ™κΈ°μ μœΌλ‘œ 보μž₯λ˜λŠ” 컀밋 단계(Commit Phase)에 λ°°μΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [13, 14, 16, 17]. --- *Last updated: 2026-04-25*