한준호

[Vue.js] DOM과 가상DOM 본문

Frontend/Vue js

[Vue.js] DOM과 가상DOM

igoman2 2021. 3. 8. 20:05
728x90

■DOM(Document Object Model)

- 웹 페이지를 객체로 표현하는 모델.

 

 

 

■Dom은 어떻게 움직일까

 

Dom의 활동 흐름

1. 브라우저는 HTML Parser를 통해 HTML 태그를 파싱하여 돔 트리 를 구성한다.

 또한 브라우저는 스타일 시트에서 CSS Parser를 통해 Css를 파싱하여 스타일 규칙 을 만들어낸다.

2. 돔 트리와 스타일 규칙이 합쳐져 렌더 트리 를 만들어낸다.

 

그런데 DOM에는 수 천개의 노드들이 존재하고 이에 대한 수정을 필요로 한다면?

브라우저의 속도가 현저히 낮아질 것이다.

 

현재 웹 개발은 DOM의 변경에 맞추어 렌더링도 여러번 하는 구조이다. 즉 DOM에 변경사항이 생겨서 DOM을 조작해야 한다면 모든 과정이 비용이다.

이런 이슈를 해결하기 위해 가상 DOM이 등장했다.

 

■가상 DOM이란?

기존에는 화면의 변경사항이 생기면 직접 조작하여 브라우저에 반영하였다. 

<div id="main">
    <h1>Header</h1>
    <p>Description</p>
</div>

라는 HTML 문서가 있으면

document.getElementById('main').appendChild('<p>Hello World</p>'); ​

와 같이 main이라는 div 속성에 접근하여 변경한다.(DOM API를 사용하여 DOM을 변경)

 

 

가상 DOM은 자바스크립트 객체로 HTML을 표현한다.

// Pseudo-code of a DOM node represented as Javascript
​
Let domNode = {
  tag: 'div',
  attributes: { id: 'main' }
  children: [
      // where the h1 & the p's would go
  ]
};

domNode.children.push('<p>Hello World</p>');

이와 같이 DOM을 변경한다.

이렇게 여러 상태를 변화하고 마지막에 진짜 DOM과 비교하여 바뀐 부분들을 한번에 적용하는 방법으로 DOM의 렌더링 횟수를 줄일 수 있게 된다.

sync(originalDomNode, domNode);

 

기존 DOM에서 10개의 변화가 생긴다면 10번(진짜 10번까진 안해도 되지만)의 렌더링을 하지만 가상 DOM은 한번에 렌더링이 가능하다.

 

★가상 DOM이 추상화했다는 개념은 기존에 DOM을 제어하던 DOM API를 직접 호출하지 않고 Vue, React 같은 프레임워크가 알아서 하도록 추상화했다는 의미이다.

 

 

 

■그 외 특징

 

  • 0.1초마다 화면에 데이터가 변경된다면? Virtual DOM으로 0.5초씩 모아가지고 렌더링을 적게할 수 있을까? → 안된다. 동시에 변경되는 것에 한해서만 렌더링된다.

  • React나 Vue등을 이용해서 Virtual DOM을 쓰면 무조건 빠른가? → 아니다. 똑같이 최적화를 해야한다. (슬라이드를 옮기거나 무한 스크롤등의 움직임이 있을 때는 Virtual DOM을 이용해서 반복 렌더링을 하지 않도록 해줘야한다.)

  • Virtual DOM은 메모리에 존재한다. DOM에 준하는 무거운 객체(Virtual DOM)가 메모리에 상주(?)하고 있기 때문에 메모리의 사용이 많이 늘어날 수 밖에 없다. --> 메모리에 존재하므로 처음부터 다 렌더링을 하지만 속도가 빠름

  • Virtual DOM을 조작하는 것도 엄청나게 많은 컴포넌트를 조작하게 된다면 오버헤드가 생기기 마련이다. Virtual DOM 제어가 DOM 직접 제어에 비해 상대적으로 비용이 적게 들 뿐이다.



출처: 

https://jeong-pro.tistory.com/210

 

Virtual DOM 동작 원리와 이해 (with 브라우저의 렌더링 과정)

Virtual DOM? 1. Virtual DOM이란? → "DOM을 추상화한 가상의 객체" DOM을 추상화한 가상의 객체라고 표현해봤습니다. (개인이 내린 정의) 그러면 우선 저 문장을 이해하기 위해서 DOM이란 뭔지 알아야합니

jeong-pro.tistory.com

kkodu.tistory.com/1

 

Vue.js : 새롭게 추가된 Virtual DOM

Vue.js : Virtual DOM.md Vue.js 2.0에 새롭게 추가된 "Virtual DOM"에 대하여... Vue.js 는 주로 Angular와 React의 장점들을 고루 갖고 있는 특징이 있다. 이번에 Vue.js 2.0 버전의 주요 특징..

kkodu.tistory.com

 

spoit.tistory.com/24

 

DOM과 가상DOM 쉽게 이해해 보기

리액트와 상태관리 툴(리덕스 등)을 사용하다 보면 불변성에 대해 항상 신경을 써야 한다. 그리고 왜 불변성을 신경 써야 하는지 이해하려면 가상 DOM에 대한 이해가 필요하다고 판단하였다. 헷

spoit.tistory.com

 

728x90

'Frontend > Vue js' 카테고리의 다른 글

컴포넌트 사이즈를 동적으로 가져오기  (0) 2021.04.08
부모-자식 간 데이터 전송  (0) 2021.03.24
computed / watch  (0) 2021.03.23
React 와 Vue.js  (0) 2021.03.08
Vue.js Web Font(웹폰트) 적용  (0) 2021.03.05
Comments