Files
2nd/10_Wiki/Topics/동시성 렌더링 (Concurrent Rendering).md
T

3.7 KiB

동시성 렌더링 (Concurrent Rendering)

📌 Brief Summary

동시성 렌더링(Concurrent Rendering)은 React의 Fiber 아키텍처를 기반으로 메인 스레드를 동기적으로 차단하지 않고 렌더링 작업을 중단 및 재개할 수 있도록 하는 렌더링 방식입니다 [1, 2]. 이 기술은 전체 렌더링 작업을 작은 단위로 쪼개어 처리하는 타임 슬라이싱(Time-Slicing)을 통해, 긴급한 사용자 상호작용을 우선적으로 처리할 수 있도록 브라우저에 제어권을 양보합니다 [2-4]. 이를 통해 무거운 연산이 백그라운드에서 진행되는 동안에도 UI의 반응성을 부드럽게 유지할 수 있습니다 [4, 5].

📖 Core Content

  • Fiber 아키텍처와 작업 분할 (Time-Slicing) 기존의 동기식 스택 리컨실러(Stack Reconciler)가 메인 스레드를 길게 차단하여 UI가 멈추는 문제를 해결하기 위해, React 16부터 도입된 Fiber 아키텍처는 동시성 렌더링을 지원합니다 [1, 2]. 전체 렌더링 작업을 '작업 단위(unit of work)'인 Fiber 노드로 나누어 처리하며, 각 작업 후 브라우저에 제어권을 양보(yield)하여 더 높은 우선순위의 작업(예: 사용자 입력)이 있는지 확인합니다 [3, 6]. 렌더링 단계는 이렇게 중단과 재개가 가능하지만, 실제 DOM을 변경하는 커밋 단계는 동기적으로 처리됩니다 [7, 8].

  • 우선순위 기반의 레인(Lane) 모델 동시성 렌더링은 '레인(Lane)'이라는 비트마스크 시스템을 통해 렌더링 작업의 우선순위를 관리합니다 [9, 10]. 클릭이나 타이핑 같은 사용자 상호작용은 가장 높은 우선순위(Sync Lane)로 즉시 처리되고, 화면에 보이지 않는 요소의 렌더링이나 무거운 데이터 업데이트는 낮은 우선순위(Idle 또는 Default Lane)로 미루어집니다 [9, 11].

  • React 18/19의 동시성 훅 (Concurrent Features) [[useTransition|useTransition]][[useDeferredValue|useDeferredValue]] 훅은 이 동시성 렌더링 모델을 직접적으로 활용합니다 [5]. useTransition은 대규모 목록 필터링과 같은 비긴급 상태 업데이트의 우선순위를 낮춰 입력 지연을 방지하며 [5, 12], useDeferredValue는 무거운 렌더링 계산이 필요한 값의 적용을 지연시킵니다 [12, 13].

  • 동시성 하이드레이션 (Concurrent Hydration) React 18부터는 하이드레이션 과정에도 동시성 렌더링이 적용됩니다 [14]. 거대한 덩어리의 하이드레이션 작업을 작은 조각으로 나누어 브라우저의 상호작용 처리를 방해하지 않게 하며, Suspense와 결합할 경우 사용자가 상호작용하는 UI 컴포넌트부터 우선적으로 하이드레이션하여 초기 로딩 성능(Total Blocking Time)을 크게 개선합니다 [14, 15].

🔗 Knowledge Connections

  • Related Topics: React Fiber Architecture, Time-Slicing, Lane Model, Reconciliation
  • Projects/Contexts: React 18/19 Performance Optimization, Concurrent Hydration
  • Contradictions/Notes: 동시성 렌더링 기능(useTransition, useDeferredValue 등)은 애플리케이션의 실제 코드 실행 속도를 높이는 것이 아니라, 무거운 연산 중에도 긴급한 피드백을 방해하지 않도록 처리 순서를 조정함으로써 앱이 더 빠르게 "느껴지도록(feel faster)" 체감 성능을 향상시키는 역할을 합니다 [16].

Last updated: 2026-04-25