# [[Fiber Architecture]] ## πŸ“Œ[[ brief]] Summary React 16μ—μ„œ λ„μž…λœ Fiber [[Architecture]]λŠ” λ™μ‹œμ„± λ Œλ”λ§([[Concurrent Rendering]])을 μ§€μ›ν•˜κΈ° μœ„ν•΄ 근본적으둜 μž¬μž‘μ„±λœ React의 μž¬μ‘°μ •([[Reconciliation]]) μ—”μ§„μž…λ‹ˆλ‹€ [1-3]. 기쑴의 동기식 λ Œλ”λ§μ΄ 메인 μŠ€λ ˆλ“œλ₯Ό μ°¨λ‹¨ν•˜μ—¬ UIκ°€ λ©ˆμΆ”λ˜ 문제λ₯Ό ν•΄κ²°ν•˜κ³ μž, λ Œλ”λ§ μž‘μ—…μ„ 'νŒŒμ΄λ²„(Fiber)'λΌλŠ” μž‘μ€ λ‹¨μœ„μ˜ λ…Έλ“œλ‘œ μͺΌκ°œμ–΄ μ μ§„μ μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€ [4, 5]. 이λ₯Ό 톡해 ReactλŠ” λ Œλ”λ§μ„ μΌμ‹œ μ€‘μ§€ν•˜κ±°λ‚˜ λΈŒλΌμš°μ €μ— μ œμ–΄κΆŒμ„ μ–‘λ³΄ν•˜κ³ , μš°μ„ μˆœμœ„κ°€ 높은 μž‘μ—…μ„ λ¨Όμ € μ²˜λ¦¬ν•œ ν›„ λ‹€μ‹œ λ Œλ”λ§μ„ μž¬κ°œν•˜λŠ” νƒ€μž„ μŠ¬λΌμ΄μ‹±([[Time-Slicing]]) μŠ€μΌ€μ€„λ§μ„ κ΅¬ν˜„ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [4-6]. ## πŸ“– Core Content * **동기식 차단(Synchronous [[Blocking]])의 ν•œκ³„ 극볡:** Fiber λ„μž… μ΄μ „μ˜ ReactλŠ” 'μŠ€νƒ μž¬μ‘°μ •μž(Stack Reconciler)'λ₯Ό μ‚¬μš©ν•˜μ—¬ 전체 μ»΄ν¬λ„ŒνŠΈ 트리λ₯Ό 단일 μž¬κ·€ 호좜둜 동기 μ²˜λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€ [4]. 이 방식은 λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λΈŒλΌμš°μ €μ˜ ν”„λ ˆμž„ μ˜ˆμ‚°(16.6ms)을 μ΄ˆκ³Όν•  경우 메인 μŠ€λ ˆλ“œλ₯Ό μ°¨λ‹¨ν•˜μ—¬ μ‚¬μš©μž μž…λ ₯μ΄λ‚˜ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ§€μ—°μ‹œμΌ°μŠ΅λ‹ˆλ‹€ [4]. FiberλŠ” μž‘μ—…μ„ μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ λΈŒλΌμš°μ €κ°€ 높은 μš°μ„ μˆœμœ„μ˜ μž‘μ—…μ„ κ°€λ‘œμ±„ μ²˜λ¦¬ν•  수 있게 ν•¨μœΌλ‘œμ¨ 이 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€ [4, 5, 7]. * **μž‘μ—… 루프(Work Loop)와 두 κ°€μ§€ λ Œλ”λ§ 단계:** Fiber의 μž¬μ‘°μ • 과정은 μž‘μ—… 쀑단과 μš°μ„ μˆœμœ„ 관리λ₯Ό μœ„ν•΄ 두 κ°€μ§€ λͺ…ν™•ν•œ λ‹¨κ³„λ‘œ λ‚˜λ‰©λ‹ˆλ‹€ [8]. * **λ Œλ”λ§ 단계 (Render Phase):** 이 λ‹¨κ³„λŠ” 비동기적이며 쀑단할 수 μžˆμŠ΅λ‹ˆλ‹€ [8]. μ‹€μ œ DOM을 λ³€κ²½ν•˜μ§€ μ•Šκ³  λ©”λͺ¨λ¦¬ μƒμ˜ νŒŒμ΄λ²„ 트리λ₯Ό μˆœνšŒν•˜λ©΄μ„œ 이전 μƒνƒœμ™€ μƒˆλ‘œμš΄ μƒνƒœμ˜ 차이λ₯Ό κ³„μ‚°ν•˜κ³ , 변경이 ν•„μš”ν•œ νŒŒμ΄λ²„λ“€μ˜ λͺ©λ‘(Effect list)을 κ΅¬μ„±ν•©λ‹ˆλ‹€ [8, 9]. 더 높은 μš°μ„ μˆœμœ„ μž‘μ—…μ΄ λ“€μ–΄μ˜€λ©΄ μΌμ‹œ 쀑단, 폐기 λ˜λŠ” μž¬μ‹œμž‘λ  수 μžˆμœΌλ―€λ‘œ, 이 λ‹¨κ³„μ—μ„œλŠ” μ‚¬μ΄λ“œ μ΄νŽ™νŠΈκ°€ λ°œμƒν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€ [8-10]. * **컀밋 단계 (Commit Phase):** 이 λ‹¨κ³„λŠ” 동기적이며 쀑단할 수 μ—†μŠ΅λ‹ˆλ‹€ [11]. λ Œλ”λ§ λ‹¨κ³„μ—μ„œ λ§Œλ“€μ–΄μ§„ λ³€κ²½ 사항(μ‚½μž…, μ‚­μ œ, μ—…λ°μ΄νŠΈ)을 ν•œ λ²ˆμ— μ‹€μ œ DOM에 μ μš©ν•©λ‹ˆλ‹€ [9, 11, 12]. 이 μ‹œμ μ— μ‹€μ œ DOM이 λ³€ν˜•λ˜λ©° 각쒅 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ‚˜ λ ˆμ΄μ•„μ›ƒ μ΄νŽ™νŠΈ(`useLayoutEffect`)κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€ [11, 12]. * **레인(Lane) λͺ¨λΈμ„ ν†΅ν•œ μš°μ„ μˆœμœ„ μŠ€μΌ€μ€„λ§:** FiberλŠ” 32λΉ„νŠΈ μ •μˆ˜ λΉ„νŠΈλ§ˆμŠ€ν¬ μ‹œμŠ€ν…œμΈ '레인(Lane)'을 μ‚¬μš©ν•˜μ—¬ μž‘μ—…μ˜ μš°μ„ μˆœμœ„λ₯Ό μ •λ°€ν•˜κ²Œ κ΄€λ¦¬ν•©λ‹ˆλ‹€ [13, 14]. ν΄λ¦­μ΄λ‚˜ 타이핑 λ“± 즉각적 λ°˜μ‘μ΄ ν•„μš”ν•œ μž‘μ—…(Sync Lane), 슀크둀링(InputContinuous Lane), 일반적인 μƒνƒœ μ—…λ°μ΄νŠΈ(Default Lane), λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…(Idle Lane)으둜 μ—…λ°μ΄νŠΈλ₯Ό λΆ„λ₯˜ν•©λ‹ˆλ‹€ [6, 15]. 이λ₯Ό 톡해 μ‚¬μš©μž μƒν˜Έμž‘μš©κ³Ό 같은 'κΈ΄κΈ‰ν•œ' μ—…λ°μ΄νŠΈκ°€ 데이터 λ Œλ”λ§ 같은 'λΉ„κΈ΄κΈ‰' UI μ „ν™˜λ³΄λ‹€ λ¨Όμ € μ²˜λ¦¬λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€ [6, 16]. * **μž‘μ—… μ§„ν–‰ μƒνƒœ(WIP) 트리 관리:** ReactλŠ” ν˜„μž¬ 화면에 κ·Έλ €μ§„ μƒνƒœλ₯Ό 좔적할 뿐만 μ•„λ‹ˆλΌ μž‘μ—… 쀑인 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” WIP(Work-in-progress) 트리λ₯Ό λ³„λ„λ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€ [10]. μŠ€μΌ€μ€„λŸ¬μ˜ μš°μ„ μˆœμœ„μ— 따라 메인 μŠ€λ ˆλ“œκ°€ λ°”μ˜λ©΄ 이 WIP 트리의 μž‘μ—…μ„ μΌμ‹œ μ€‘μ§€ν•˜κ³ , λΈŒλΌμš°μ €κ°€ 유휴 μƒνƒœμΌ λ•Œ λ‹€μ‹œ μž¬κ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Virtual DOM]], [[Reconciliation]], [[Concurrent Rendering]], [[Critical Rendering Path]] - **Projects/Contexts:** [[React 16+ Core Engine]], [[λΈŒλΌμš°μ € 메인 μŠ€λ ˆλ“œ μ΅œμ ν™” 및 νƒ€μž„ μŠ¬λΌμ΄μ‹±]] - **Contradictions/Notes:** Fiber의 λ™μ‹œμ„± λ Œλ”λ§ κΈ°λŠ₯(예: `[[useTransition]]`, `[[useDeferredValue]]`)은 μ½”λ“œμ˜ 물리적인 μ‹€ν–‰ 속도λ₯Ό λ†’μ΄λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€ [17]. 무거운 μ—°μ‚°μœΌλ‘œ μΈν•œ 병λͺ©μ΄ 즉각적인 μ‚¬μš©μž μƒν˜Έμž‘μš©μ„ λ°©ν•΄ν•˜μ§€ μ•Šλ„λ‘ λ’€λ‘œ λ―Έλ£Έ(Deferring)으둜써, 체감 μ„±λŠ₯(Perceived Performance) μΈ‘λ©΄μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 훨씬 "더 λΉ λ₯΄κ²Œ λŠκ»΄μ§€λ„λ‘" λ§Œλ“œλŠ” 것이 ν•΅μ‹¬μž…λ‹ˆλ‹€ [17]. --- *Last updated: 2026-04-25*