LumoMate
LumoMate/용어집/SurfaceWeb

DOM

DOM(Document Object Model)은 브라우저가 HTML 문서를 메모리에 트리 구조로 표현한 것입니다. 자바스크립트는 이 트리를 읽고 수정해서 화면을 동적으로 바꿉니다.
DOM의 개념을 표현한 편집형 일러스트.

쉬운 설명

사용자가 보는 웹 페이지는 사실 두 단계로 존재합니다. 서버에서 받은 HTML 텍스트, 그리고 브라우저가 그 텍스트를 해석해 만든 트리 — 이 트리가 DOM입니다. <div> 안에 <p>가 있고 그 안에 <span>이 있는 구조가 트리의 가지처럼 표현됩니다.

DOM이 필요한 이유는 두 가지입니다. ① 사용자가 어디를 누르는지·어떤 키를 눌렀는지 같은 이벤트를 구조적으로 잡기 위해. ② 자바스크립트가 화면을 부분적으로 바꿀 수 있게 하기 위해. 우리가 '좋아요'를 누르면 카운터가 즉시 1 올라가는 것도, 모달이 떴다 사라지는 것도 — 모두 자바스크립트가 DOM 트리의 한 노드를 바꿔 일어나는 일입니다.

자바스크립트가 'document.querySelector(...)'로 어떤 요소를 찾는다는 건 이 트리에서 노드를 찾는 일이고, 'element.textContent = ...'로 글을 바꾸면 트리가 갱신되고 브라우저가 그 변화를 화면에 다시 그립니다. 노드를 새로 만들거나 지우는 일도 같은 트리 위에서 일어납니다.

DOM은 강력하지만 직접 다루기가 까다롭습니다. 페이지가 복잡해질수록 '어느 노드를 언제 어떻게 바꿀지'를 사람이 다 추적하기 어렵습니다. 그래서 React·Vue·Svelte 같은 프레임워크가 등장했습니다. 이들은 '지금 상태가 이러면 DOM이 이렇게 생겨야 한다'를 선언하면, 프레임워크가 차이를 계산해 DOM을 자동으로 갱신합니다.

초보자가 헷갈리는 점: DOM은 HTML 원문이 아닙니다. 브라우저가 만든 메모리상의 표현이고, 자바스크립트가 바꾸는 건 DOM뿐이라 페이지를 새로고침하면 다시 원본 HTML에서 시작합니다. 또 DOM 조작이 느리다는 말은 정확히는 '레이아웃·페인트가 다시 일어나는 게 비싸다'는 뜻이고, 그래서 가상 DOM·키 관리 같은 최적화 기법이 나왔습니다.

DOM의 개념을 본문 안에서 다른 각도로 비춰 보는 편집형 일러스트.
FIG. 1DOM을 다른 각도에서 다시 봅니다.

비유로 보면

DOM은 음악 악보를 펴 놓고 한 줄씩 고쳐 가며 즉시 연주하는 모습과 비슷합니다. 종이 악보(HTML 원문)는 그대로지만, 우리가 보는 연주(화면)는 매번의 즉석 수정(DOM 변경)에 따라 달라집니다. 새로고침하면 종이 악보에서 다시 시작합니다.

어디에서 만나나

모든 동적인 웹 페이지의 기반. 단순한 광고 배너부터 노션·피그마 같은 복잡한 SPA까지, 화면 위에서 일어나는 모든 변화는 결국 DOM 변경의 합입니다. 모바일 앱(웹뷰)·전자책 리더·일부 게임 UI에도 같은 모델이 들어가 있습니다.

작은 예시

이메일 앱에서 안 읽은 메일을 클릭하면 굵은 글씨가 일반 글씨로 바뀌고, 받은편지함의 '안 읽음 (3)' 카운터가 즉시 (2)로 줄어듭니다. 이 모든 변화는 자바스크립트가 DOM의 해당 노드 속성을 바꿔서 일어나는 일입니다.

자주 하는 오해

오해
흔한 오해 셋. ① 'DOM = HTML' — HTML은 원본 텍스트, DOM은 브라우저가 만든 메모리 트리입니다. ② 'DOM 조작이 곧 느리다' — 한두 번은 빠르지만, 같은 작업을 반복하거나 큰 영역을 다시 그리면 비싸집니다. ③ '리액트가 DOM을 안 쓴다' — 결국 DOM을 쓰지만, 사람 대신 프레임워크가 효율적으로 다룬다고 보는 게 정확합니다.

한 줄 정리

DOM은 브라우저의 '살아 있는 화면 표현'입니다. 그 트리를 누가, 언제, 얼마나 다듬는가에 따라 사용자가 느끼는 부드러움이 결정됩니다.
매주 월요일 오전 8시

한 주에 한 통,
오래 남는 이해를 보냅니다.

흘려보내지 않는 글만 골라 보내드립니다. 광고와 추적, 외부로 빠지는 미끼 링크 없이 메일 안에서 끝나는 한 통입니다.

언제든 한 번의 클릭으로 해지할 수 있습니다. 스팸은 보내지 않습니다.