# [[React 18|React 18]] ## πŸ“Œ Brief Summary React 18은 λ Œλ”λ§ 과정을 μ΅œμ ν™”ν•˜μ—¬ ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚€λŠ” κΈ°λŠ₯을 λ„μž…ν•œ μ£Όμš” λ²„μ „μž…λ‹ˆλ‹€ [1-3]. 이 λ²„μ „μ˜ κ°€μž₯ 핡심적인 νŠΉμ§•μ€ 'μžλ™ 일괄 처리([[Automatic Batching|Automatic Batching]])'κ°€ 기본적으둜 ν™œμ„±ν™”λ˜μ–΄, λ‹€μ–‘ν•œ 비동기 μž‘μ—…μ˜ μƒνƒœ μ—…λ°μ΄νŠΈλ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ μ²˜λ¦¬ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€ [3-5]. 이λ₯Ό 톡해 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ°˜μ‘μ„±κ³Ό 전체적인 ν”„λ ˆμž„ 속도λ₯Ό λ§€λ„λŸ½κ²Œ κ°œμ„ ν•©λ‹ˆλ‹€ [2, 6, 7]. ## πŸ“– Core Content * **μžλ™ 일괄 처리(Automatic [[Batching|Batching]])의 μ „λ©΄ 적용** React 18 μ΄μ „μ—λŠ” `onClick`μ΄λ‚˜ `onChange` 같은 React의 λ„€μ΄ν‹°λΈŒ 이벀트 ν•Έλ“€λŸ¬ λ‚΄λΆ€μ˜ μ—…λ°μ΄νŠΈλ§Œ 일괄 μ²˜λ¦¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [2, 8, 9]. ν•˜μ§€λ§Œ React 18λΆ€ν„°λŠ” ν”„λ‘œλ―ΈμŠ€(Promises), `setTimeout`, `async/await` ν•¨μˆ˜μ™€ 같은 비동기 μž‘μ—… λ‚΄μ—μ„œ λ°œμƒν•˜λŠ” μƒνƒœ μ—…λ°μ΄νŠΈκΉŒμ§€ μΆœμ²˜μ— 상관없이 μžλ™μœΌλ‘œ 일괄 μ²˜λ¦¬ν•©λ‹ˆλ‹€ [2, 5, 8, 9]. 즉, λΉ λ₯Έ μ‹œκ°„ 내에 μ—¬λŸ¬ μƒνƒœ μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•΄λ„ DOM을 ν•œ 번만 μ—…λ°μ΄νŠΈν•˜μ—¬ μ„±λŠ₯ 병λͺ© ν˜„μƒμ„ λ°©μ§€ν•©λ‹ˆλ‹€ [4, 6, 10, 11]. * **가상 DOM([[Virtual DOM|Virtual DOM]]) Diffing ν”„λ‘œμ„ΈμŠ€ κ²½λŸ‰ν™”** μ—¬λŸ¬ μƒνƒœ λ³€ν™”λ₯Ό ν•œ 번의 λ¦¬λ Œλ”λ§μœΌλ‘œ κ²°ν•©ν•¨μœΌλ‘œμ¨ 가상 DOM의 Diffing μž‘μ—… 횟수 μžμ²΄κ°€ μ€„μ–΄λ“­λ‹ˆλ‹€ [12]. λ˜ν•œ `React.memo`λ‚˜ `useMemo` 등을 톡해 λ©”λͺ¨μ΄μ œμ΄μ…˜λœ 값에 λŒ€ν•œ 검사 νšŸμˆ˜λ„ 쀄어듀어, λ Œλ”λ§ μ£ΌκΈ° λ‹Ή CPU μž‘μ—…λŸ‰μ΄ λŒ€ν­ κ°μ†Œν•©λ‹ˆλ‹€ [12]. μ‹€μ œ 데이터 집약적인 λŒ€μ‹œλ³΄λ“œλ₯Ό λŒ€μƒμœΌλ‘œ ν•œ λ²€μΉ˜λ§ˆν¬μ— λ”°λ₯΄λ©΄, μžλ™ 일괄 처리λ₯Ό 톡해 전체 λ Œλ”λ§ νšŸμˆ˜κ°€ μ•½ 40% κ°μ†Œν•˜κ³  μ΅œλŒ€ λΆ€ν•˜ μ‹œ ν”„λ ˆμž„ 속도가 25% ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€ [1, 13]. * **μ—…λ°μ΄νŠΈ μš°μ„ μˆœμœ„ μ œμ–΄ κΈ°λŠ₯ ([[startTransition|startTransition]] & [[flushSync|flushSync]])** React 18은 λ Œλ”λ§ μš°μ„ μˆœμœ„λ₯Ό κ°œλ°œμžκ°€ 직접 μ œμ–΄ν•  수 μžˆλŠ” APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ [13]. * **`startTransition`**: λͺ©λ‘ 필터링과 같이 무겁고 κΈ΄κΈ‰ν•˜μ§€ μ•Šμ€ μƒνƒœ μ—…λ°μ΄νŠΈλ₯Ό ν‘œμ‹œν•˜μ—¬, μ‚¬μš©μžμ˜ νƒ€μ΄ν•‘μ΄λ‚˜ 클릭 같은 κΈ΄κΈ‰ν•œ μΈν„°λž™μ…˜μ„ μ°¨λ‹¨ν•˜μ§€ μ•Šλ„λ‘ 양보(yield)ν•©λ‹ˆλ‹€ [13, 14]. * **`flushSync`**: 즉각적인 UI μ—…λ°μ΄νŠΈκ°€ ν•„μˆ˜μ μΈ 경우(예: μƒνƒœ λ³€κ²½ μ§ν›„μ˜ μž…λ ₯ 포컀슀 μ§€μ • λ“±), Reactκ°€ μ—…λ°μ΄νŠΈλ₯Ό κ°•μ œλ‘œ λ™κΈ°μ‹μœΌλ‘œ λ°˜μ˜ν•˜κ²Œ λ§Œλ“€μ–΄ μžλ™ 일괄 μ²˜λ¦¬μ—μ„œ μ˜ˆμ™Έλ‘œ λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€ [7, 13-15]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Automatic Batching|Automatic Batching]], Virtual DOM, startTransition, [[flushSync|flushSync]] - **Projects/Contexts:** [[React Performance Optimization|React Performance Optimization]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ `flushSync`λ₯Ό μ‚¬μš©ν•΄ μžλ™ 일괄 처리λ₯Ό 막을 수 μžˆμ§€λ§Œ, 이λ₯Ό λ‚¨μš©ν•˜λ©΄ 일괄 처리둜 얻을 수 μžˆλŠ” μ„±λŠ₯ 이점이 λ¬΄νš¨ν™”λ  수 μžˆμœΌλ―€λ‘œ κΌ­ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ œν•œμ μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [7, 16]. --- *Last updated: 2026-04-25*