Virtual DOM이란 무엇인가?
DOM을 직접 조작하는 방식에서 렌더링의 비효율적인 문제와 최적화 및 유지보수가 어려운 점을 해결하기 위해서 나온 기술입니다. DOM과 유사한 객체를 메모리에 구현하고 변경사항이 생기면 메모리에 올라간 Virtual DOM을 수정하고 DOM과 비교해서 다른 점들만 DOM에 반영합니다. 이로 인해 더 반응성이 빠른 웹을 구현할 수 있습니다.
Virtual DOM은 아래와 같은 문제를 해결하기 위해서 나온 기술이다.
위와 같은 문제가 왜 생기고 Virtual DOM이 어떤식으로 해결해주는지 알기 위해서는 브라우저의 동작 원리와 DOM에 대해서 알아야한다.
DOM은 문서 객체 모델이라고 하는데 JavaScript 같은 스크립팅언어에서 다룰수 있게 웹페이지를 연결해주는 역할을 한다.
아래 설명중에 그나마 본인에게 와닿는 설명을 사용해서 이해해보자.
DOM
이다.DOM
이다.DOM
DOM
은 자바스크립트를 통해 동적으로 변경할 수 있으며 변경된 DOM
은 렌더링에 반영된다.DOM
은 HTML elements, Attributes, Css styles, Events, Methods 등을 제어할 수 있는 표준 인터페이스를 제공하며 웹 페이지를 구성하는 요소를 구조화해서 나타낸 객체이고, 이 객체를 이용해서 웹페에지 구성요소를 제어할 수 있다.브라우저에서 DOM은 어떻게 동작될까? 간단하게만 알아보자.
일단 아래 그램은 Webkit을 기준으로 그려져있다.
즉, DOM은 해당 과정을 계속해서 반복하는데 정말 사소한 일을 하더라도 DOM이 반복작업을 하게된다.
옛날에는 웹 사이트가 몇 페이지 없었지만 요즘에는 수 십, 수 백개의 페이지로 이뤄져 있는데, 이런 잦은 렌더링은 비효율적일 수 밖에 없다. 또한 최근의 모던 웹인 SPA는 HTML 문서가 하나이면서 여러 동적인 기능이 들어가기 때문에 무거운 HTML 문서를 지속적으로 리렌더링 해줘야한다.
그래서 Virtual DOM이 등장하게 되었다.
Virtual DOM은 DOM과 유사한 역할을 담당하는 객체이다. 다시 말해서, 변경 사항을 DOM에 직접 수정하는게 아니라 중간 단계로 Virtual DOM을 수정하고 Virtual DOM을 통해서 DOM을 수정하게 한다.
예를 들어 ul 태그 안에 li를 변경하면 Virtual DOM을 통해 li 태그를 변경하고 Virtual DOM과 실제 DOM을 비교해서 변경된 부분을 한 번만 DOM에 변경해서 렌더링을 일으킨다.
위와 같이 가상 DOM은 DOM이 생성되기 전에 이전 상태 값과 수정사항을 비교해서 달라진 부분만 DOM에게 한 번에 전달해서 딱 한 번만 렌더링을 진행한다.
빨간 부분에 수정사항이 생기면 가상 DOM이 달라진 값을 탐지하고 변경해서 최종적인 결과물을 실제 DOM에 전달하게 된다. 만약 가상 DOM이 아니라 DOM이었다면 렌더링을 처음부터 해야했기 때문에 모든 동그라미가 다 빨간색으로 바뀌었을 것이다.
참조
howdy-mj | DOM과 Virtual Dom이란?
JEONG_AMATEUR | Virtual DOM 동작 원리와 이해 (with 브라우저의 렌더링 과정)
j_user0719 | DOM , Virtual DOM
woong-jae | 브라우저(Browser)의 작동원리
이도현 | 리액트 Virtual-DOM 에 대해서 설명해주세요.