Post

Virtual DOM

Virtual DOM

소개

Virtual DOM은 UI 라이브러리와 프레임워크(특히 React)에서 사용하는 개념으로, 실제 DOM을 조작하기 전에 메모리 내에서 가상의 DOM 트리를 생성하여 변경 사항을 적용하는 방식입니다. 이 접근 방식은 DOM 조작의 성능을 최적화하고, 효율적인 업데이트를 가능하게 합니다.

Virtual DOM의 동작 방식

1. 가상 DOM 트리 생성

UI가 처음 렌더링될 때, Virtual DOM은 실제 DOM과 동일한 구조를 가진 가상의 트리를 메모리 내에 생성합니다.

1
2
3
4
5
6
const virtualDOM = (
  <div>
    <h1>Hello, world!</h1>
    <p>This is a virtual DOM example.</p>
  </div>
);

2. 변경 사항 반영

상태(state)나 속성(props)이 변경되면, Virtual DOM은 새로운 가상 트리를 생성하여 변경된 부분을 반영합니다.

1
2
3
4
5
6
const updatedVirtualDOM = (
  <div>
    <h1>Hello, world!</h1>
    <p>This is an updated virtual DOM example.</p>
  </div>
);

3. 차이점 비교 (Diffing)

새로운 가상 트리와 이전 가상 트리를 비교하여 변경된 부분을 찾아냅니다. 이 과정을 “diffing”이라고 합니다.

4. 실제 DOM 업데이트 (Reconciliation)

변경된 부분만 실제 DOM에 반영합니다. 이를 통해 불필요한 DOM 조작을 최소화하여 성능을 최적화할 수 있습니다.

1
2
// 실제 DOM에서 변경된 부분만 업데이트
document.querySelector('p').textContent = 'This is an updated virtual DOM example.';

Virtual DOM의 장점

  1. 성능 최적화: 실제 DOM 조작은 비용이 많이 들기 때문에, 변경된 부분만 업데이트하여 성능을 최적화할 수 있습니다.
  2. 효율적인 업데이트: 가상 DOM을 사용하면 변경 사항을 메모리 내에서 처리하고, 실제 DOM에 최소한의 업데이트를 적용할 수 있습니다.
  3. 코드의 간결성: 개발자는 Virtual DOM을 통해 더 선언적이고 간결한 방식으로 UI를 작성할 수 있습니다.

Virtual DOM의 단점

  1. 추가적인 메모리 사용: 가상 DOM을 유지하기 위해 추가적인 메모리가 필요합니다.
  2. 복잡성 증가: Virtual DOM을 구현하고 관리하는 로직이 추가되면서 코드베이스의 복잡성이 증가할 수 있습니다.

예제

React에서의 Virtual DOM 사용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React, { useState } from 'react';
import ReactDOM from 'react-dom';

function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));

위 예제에서 상태가 변경될 때마다 React는 새로운 가상 DOM을 생성하고, 이전 가상 DOM과 비교하여 변경된 부분만 실제 DOM에 업데이트합니다.

결론

Virtual DOM은 UI 업데이트를 효율적으로 처리하기 위한 강력한 개념입니다. 가상 DOM을 통해 성능을 최적화하고, 더 나은 개발자 경험을 제공할 수 있습니다. React와 같은 라이브러리는 Virtual DOM을 활용하여 복잡한 애플리케이션에서도 효율적인 상태 관리를 가능하게 합니다.

다음시간에 계속…

image

This post is licensed under CC BY 4.0 by the author.