# [[React 18 자동 일괄 처리 및 React 19 컴파일러 최적화 적용]]

## 📌 Brief Summary
React 18의 자동 일괄 처리(Automatic Batching)와 React 19의 컴파일러(React Compiler)는 애플리케이션의 렌더링 성능을 극대화하고 개발자의 부담을 줄이기 위한 핵심 아키텍처 변화입니다. 자동 일괄 처리는 여러 상태 업데이트를 단일 리렌더링으로 묶어 가상 DOM의 비교 연산을 최소화합니다. React 19 컴파일러는 빌드 타임에 코드를 분석하여 수동으로 수행하던 메모이제이션 작업을 자동으로 처리함으로써, 불필요한 연쇄 렌더링을 세밀하게 방지합니다.

## 📖 Core Content
**React 18 자동 일괄 처리 (Automatic Batching)**
*   **작동 원리 및 변화:** React 18 이전에는 React 이벤트 핸들러 내에서 발생하는 상태 업데이트만 일괄 처리(Batching)의 대상이었습니다 [1, 2]. 그러나 React 18부터는 프로미스(Promise), `setTimeout`, 비동기 API 호출, 네이티브 이벤트 핸들러 등 출처와 상관없이 동일한 이벤트 루프 내에서 발생하는 모든 상태 업데이트를 자동으로 묶어서 한 번만 리렌더링합니다 [3-6].
*   **성능 향상:** 이 기능은 가상 DOM(Virtual DOM)의 diffing 횟수를 줄여 CPU 작업량을 크게 감소시킵니다 [4]. 벤치마크 결과에 따르면, 데이터 집약적인 대시보드에서 자동 일괄 처리를 활성화할 경우 총 렌더링 횟수가 최대 40% 감소하고 피크 로드 시 프레임 속도가 25% 향상되는 성능 이점을 보였습니다 [3, 7].
*   **예외 처리 (Opt-out):** 개발자가 즉각적인 DOM 업데이트를 보장받아야 하는 상황(예: 입력 후 즉시 포커스 이동)에서는 `flushSync` API를 사용하여 자동 일괄 처리를 건너뛰고 동기적으로 렌더링을 강제할 수 있습니다 [7-10].

**React 19 컴파일러 최적화 (React Compiler)**
*   **수동 메모이제이션의 한계 해결:** 이전에는 렌더링 최적화를 위해 개발자가 `useMemo`, `useCallback`, `React.memo`를 수동으로 적용해야 했습니다 [11, 12]. 이는 인지적 부담을 가중시키고 의존성 배열(dependency array)을 잘못 설정하거나 참조 동일성(referential equality)을 놓쳐 최적화가 깨지는 등 유지보수 문제를 유발했습니다 [13, 14].
*   **빌드 타임 자동화 및 AST 분석:** React 19 컴파일러(구 React Forget)는 빌드 도구 단계에서 코드의 추상 구문 트리(AST)를 분석하여 데이터 흐름을 추적합니다 [15, 16]. 코드를 정적 값(Static)과 반응형 값(Reactive)으로 분류하고, 최적의 위치에 자동으로 메모이제이션 경계를 삽입하여 렌더링 최적화 작업의 상당 부분을 제거합니다 [15-17].
*   **세밀한 캐싱 (Granular Optimization):** 컴파일러는 전체 컴포넌트를 래핑하는 대신 `<h2>`, `<button>`과 같은 개별 JSX 요소와 특정 계산식들을 독립적으로 분리하여 캐싱합니다 [18, 19]. 결과적으로 속성(Props)이나 상태가 변경되지 않은 하위 컴포넌트의 불필요한 연쇄 리렌더링을 매우 정밀하게 차단합니다 [15, 20].
*   **도입 효과:** 수동 메모이제이션 없이도 동일하거나 그 이상의 성능을 제공하며, 상호작용 속도(Interaction to Next Paint, INP)를 크게 개선합니다. 실제로 Meta의 프로덕션 적용 테스트에서 렌더링 횟수 60% 감소 및 사용자 상호작용 속도 2.5배 향상 등의 효과가 입증되었습니다 [21, 22].

## 🔗 Knowledge Connections
- **Related Topics:** [[가상 DOM (Virtual DOM) 및 Diffing 알고리즘]], [[수동 메모이제이션 (useMemo, useCallback, React.memo)]], [[flushSync 및 startTransition]], [[동시성 렌더링 (Concurrent Rendering)]]
- **Projects/Contexts:** [[대규모 데이터 대시보드 성능 최적화]], [[Meta의 프로덕션(Instagram, Quest Store) 최적화 도입 사례]]
- **Contradictions/Notes:** React 컴파일러가 대부분의 수동 메모이제이션을 대체하지만, 매 렌더링마다 새로운 객체 참조를 반환하는 서드파티 라이브러리를 사용할 경우 자동 메모이제이션 체인이 깨질 수 있으므로 이러한 특정 상황에서는 여전히 수동 메모이제이션(`useMemo`, `useCallback`)이 필요할 수 있습니다 [23-25].

---
*Last updated: 2026-04-25*