- Published on
React18 automatic batching (자동 일괄처리)
- Authors

- Name
- Deokgoo Kim
- 프로덕트 엔지니어 (8년차)
- Social links
- GitHub
Automatic Batching 이란?
개인적으로 react18에서 핵심 기능 중 하나가 automatic batching 이라고 생각된다.
내부소스, 외부 소스 상관없이 state 업데이트를 일괄처리하여 render가 한번에 이루어 질 수 있도록 하게 한다.
성능을 위해서 state변경을 묶어서 한번에 처리 해주며 render가 한번만 수행 할 수 있도록 도와준다.
우리는 React17 이전 버전에서는 일괄 처리하기 위해 ReactDOM.unstable_batchedUpdates 를 통해 무의미한 렌더링을 피하려고 노력하였고
React17 버전에서는 자동으로 내부 소스(클릭 이벤트 등) 한에서 batch 처리를 해주었다.
하지만 브라우저 이벤트의 업데이트 외 외부 소스(fetch, setTimeout 등)에 대해서는 일괄 처리하지 않았다.
기존 batching 은
React17 에서도 batching을 지원하지 않은 것이 아니다. 하지만 react18과 다른 점이 있다면
외부 소스(fetch, setTimeout 등)에 대해서는 일괄처리를 해주지 않았다.
그래서 성능 개선을 위하여 외부 소스 코드를 사용할때는 ReactDOM.unstable_batchedUpdates를 사용해줬었다.
아래 예시는 option을 선택하면 서버에 알리고 옵션 상태를 변경하는 예시가 있다고 가정하자 option1은 내부 소스이기 때문에 React 17 에서는 자동으로 state를 모아서 한번에 렌더링 한다. 하지만 option2는 외부 소스이기에 렌더가 두 번 일어난다.
React 18 에서는
ReactDOM.createRoot을 사용하게 되면 내부 소스, 외부 소스 Automatic Batching이 적용되어 있어 신경 쓰지 않아도 된다.
React18 automatic batching이 적용 안 됨
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
React18 automatic batching이 적용됨
const rootElement = document.getElementById("root");
ReactDOM.createRoot(rootElement).render(<App />);
Automatic Batching을 피하는 방법
경우에 따라 Batching이 필요 없을 때가 존재 할 것 이다. Batching을 피하기 위해서는 ReactDOM.flushSync() 을 사용해야한다.
const selectedOption2 = async () => {
await updateOptionFromServer();
ReactDOM.flushSync(() => {
setOption1(false);
})
ReactDOM.flushSync(() => {
setOption2(true);
})
};

관련 글
2026년 5월 31일
React Suspense 변천사와 React 19 실전 패턴
Suspense는 더 이상 로딩 스피너용이 아닙니다. React 19에서 비동기 데이터 스트리밍의 핵심이 된 Suspense의 진화 과정과 시니어 개발자를 위한 필수 디자인 패턴 3가지를 소개해보려고 합니다.
2026년 5월 5일
[대딸깍의 시대] 소프트웨어 엔지니어는 무엇을 공부해야 할까요?
AI 시대, 프롬프트 엔지니어링이 대세인 지금, 소프트웨어 엔지니어는 무엇을 공부해야 할까요? 변하지 않는 본질을 찾아가는 한 개발자의 고민과 방향성을 공유합니다.
2026년 4월 19일
JavaScript Proxy 패턴 소개
Vue.js 3 내부에서도 쓰이는 JavaScript Proxy 패턴의 탄생 배경과 실전 활용 사례를 정리했습니다.
댓글
새 글 알림 받기
실무에서 바로 써먹을 수 있는 개발 팁과 경험담을 받아보세요
개인정보는 뉴스레터 발송 목적으로만 사용되며, 언제든 구독을 해지할 수 있습니다.