본문 바로가기

[React]

React Virtual DOM 정리하기

React를 배우다 보면 반복적으로 등장하는 개념 중 하나가 바로 Virtual DOM(가상 돔)이에요.
공부하면서 "왜 React는 빠를까?"에 대한 해답을 찾고 싶었고,
결국 그 중심에는 Virtual DOM이 있었습니다.

이 글은 제가 공부한 내용을 정리하며,
“React는 DOM을 어떻게 다루기에 이렇게 효율적일까?”라는 질문에 답을 찾은 과정을 공유하려고 씁니다.


📚 DOM이란 무엇일까?

먼저, DOM에 대한 개념을 정확히 짚고 넘어가야 해요.

DOM (Document Object Model)
= HTML 문서를 트리 구조의 객체로 표현한 것

예를 들어, 우리가 HTML을 이렇게 작성하면

 
<body>
  <h1>안녕하세요</h1>
  <p>React 공부 중입니다</p>
</body>

브라우저는 이 문서를 아래처럼 트리 형태로 해석합니다:

document
 └── html
      └── body
           ├── h1
           └── p

JavaScript에서는 DOM을 조작하기 위해 getElementById(), querySelector() 같은 메서드를 사용하죠.
이런 식으로 특정 요소에 접근해 내용을 바꾸고, 스타일을 적용하고, 추가하거나 삭제하는 게 바로 DOM 조작입니다.


DOM 조작은 비용이 크다

공부하면서 놀랐던 건 단순히 텍스트 하나 바꾸는 것처럼 보여도
DOM 조작에는 다음과 같은 복잡한 과정이 따라온다는 거예요.....

  • HTML 재파싱
  • CSS 재계산
  • 레이아웃 계산
  • 화면 다시 그림 (Repaint, Reflow)

특히 여러 요소를 한 번에 조작할 경우, 이 부담은 더 커집니다.
DOM 자체는 가벼운 구조지만 브라우저가 이를 반영해 UI를 다시 렌더링하는 과정이 꽤나 무겁다는 걸 처음 알게 되었어요.


그래서 등장한 해결책: Virtual DOM

React는 이 문제를 해결하기 위해 DOM을 직접 조작하지 않아요.
대신 메모리 상의 Virtual DOM이라는 객체를 활용해,
화면 변경을 가볍고 빠르게 처리합니다.

Virtual DOM이란?

  • 실제 DOM을 본뜬 자바스크립트 객체(실제 UI에는 직접적으로 나타나진 않음)
  • 화면에 직접 영향을 주지는 않고 메모리에서만 존재
  • 상태가 바뀔 때마다 새 Virtual DOM을 생성
  • 이전 Virtual DOM과 비교(diffing) 후 변경된 부분만 실제 DOM에 반영

React의 Virtual DOM 렌더링 구조

이해를 돕기 위해, 제가 정리한 React의 Virtual DOM 렌더링 흐름입니다👇



📌 흐름 요약

  1. JSX 작성 → 우리가 쓰는 컴포넌트 코드
  2. Virtual DOM 생성 → JSX를 기반으로 메모리 안에 구조화
  3. ReactDOM → 실제 HTML로 변환
  4. 상태 변경 발생 → setState()
  5. 새 Virtual DOM 생성
  6. 이전과 새로운 Virtual DOM 비교(Diffing)
  7. 변경된 부분만 실제 DOM에 반영(Patch)

 Diffing 알고리즘은 어떻게 작동할까?

공부하면서 가장 흥미로웠던 부분 중 하나는 바로 두 개의 Virtual DOM을 비교하는 방법이에요.

React는 이걸 효율적으로 하기 위해 몇 가지 규칙을 둡니다:

  1. 다른 태그는 새로 그림
    <div> → <span>이면 완전히 새로 렌더링
  2. 같은 태그는 속성과 자식만 비교
    <p class="a"> → <p class="b">
  3. 리스트는 key 속성으로 추적
    key가 없으면 전체를 다시 탐색해야 하므로 성능 저하 발생

이러한 Diffing 알고리즘 덕분에 React는 복잡한 UI도 매우 빠르게 비교하고 반영할 수 있어요.


배치 업데이트(Batch Update)

DOM 조작에서 가장 비용이 큰 건 화면을 다시 그리는 것이에요.
그래서 React는 DOM 변경을 하나하나 즉시 적용하지 않고
변경된 요소들을 모아서 한 번에 처리해요.

이걸 Batch Update라고 부르며
성능을 높이는 핵심 메커니즘 중 하나입니다.


Virtual DOM vs Real DOM 한눈에 비교

  Virtual DOM  Real DOM
구조 자바스크립트 객체로 구성된 트리 구조 HTML 기반의 브라우저 내부 트리
위치 메모리 안 (React 내부) 브라우저 엔진 내부
렌더링 방식 변경 전, 메모리에서 시뮬레이션 직접 브라우저 화면(UI)에 렌더링
접근/조작 방식 간접적 (변경 사항을 계산 후 Patch) 직접 요소에 접근하고 수정
속도 및 성능 빠름 – 변경된 부분만 반영 (최소 DOM 조작) 느림 – 변경 시 전체 구조 탐색 또는 재계산 가능성 있음

 

💡 정리 포인트

  • Virtual DOM은 React의 내부 렌더링 최적화를 위한 구조로, 실질적인 UI 변경 전 시뮬레이션을 통해 성능을 끌어올립니다.
  • Real DOM은 실제로 사용자에게 보이는 웹페이지 구조로 직접 조작할수록 렌더링 비용이 커집니다.

 

✅ 정리하며

이번에 공부한 내용을 정리해보면

  1. DOM은 웹페이지를 구성하는 기본 단위이며 트리 구조를 가진다.
  2. DOM 조작은 리소스를 많이 사용하는 무거운 작업이다.
  3. React는 Virtual DOM이라는 개념을 통해
    변경 사항을 먼저 메모리에서 계산하고 최소한만 실제 DOM에 반영한다.
  4. 이 과정에서 Diffing 알고리즘, Patch, Batch Update 같은 최적화 전략이 적용된다.