클론코더

용어 사전

DOMDocument Object Model

HTML의 태그를 부모와 자식으로 이은 트리. 브라우저는 이걸 보고 화면을 그리고, 크롤러는 여기서 값을 꺼낸다

HTML에서 다른 태그를 감싸는 태그는 부모, 감싸인 태그는 자식이 됩니다. 같은 부모를 둔 태그끼리는 형제입니다. 이 관계를 따라 태그를 이으면 맨 위에서 아래로 뻗는 트리가 되고, 이 트리를 DOM이라고 부릅니다. 트리의 한 칸 한 칸은 요소(Element)라고 합니다.

<body>
  <article>
    <h3>책 제목</h3>
    <p class="price">£51.77</p>
  </article>
</body>
body 아래 article, article 아래 h3(책 제목)와 p.price(£51.77)가 있는 트리. article에는 부모, h3에는 자식, p.price에는 형제라는 표시가 붙어 있다. h3와 p.price는 article의 자식이고, 같은 부모를 둔 형제입니다.
위 HTML을 DOM 트리로 그린 모습

브라우저와 크롤러가 DOM으로 하는 일

브라우저는 HTML을 받으면 파싱해서 DOM을 만들고, DOM을 보고 화면을 그립니다. 크롤러도 같은 방법으로 DOM을 만들지만 화면은 그리지 않습니다. 대신 DOM에서 필요한 요소를 선택자로 찾아 값을 꺼냅니다. 그래서 크롤러가 읽는 것은 우리가 보는 화면이 아니라, 그 화면을 만든 DOM입니다.

JavaScript는 DOM을 고칩니다

버튼을 누르면 글자가 바뀌거나 목록이 늘어나는 건 JavaScript가 DOM을 고쳤기 때문입니다. 아래 코드는 DOM에서 첫 번째 h3를 찾아 글자를 바꿉니다.

document.querySelector("h3").textContent = "바뀐 제목";

이렇게 바뀐 DOM은 서버가 처음 보낸 HTML과 다릅니다. 화면에는 보이는 글자가 크롤러 결과에는 없을 때, 그 글자는 대개 JavaScript가 나중에 넣은 것입니다.

아래 트리에서 요소를 눌러 부모, 자식, 형제를 확인해 보세요. 그다음 [JavaScript로 DOM 바꾸기]를 누르면 DOM과 서버가 보낸 HTML이 어떻게 달라지는지 볼 수 있습니다.

직접 해 보기부모 · 자식 · 형제 찾기

서버가 보낸 HTML

  1. 1<body>
  2. 2 <h1>책방</h1>
  3. 3 <article>
  4. 4 <h3>책 A</h3>
  5. 5 <p class="price">£51</p>
  6. 6 </article>
  7. 7 <article>
  8. 8 <h3>책 B</h3>
  9. 9 <p class="price">£53</p>
  10. 10 </article>
  11. 11</body>

지금 DOM (요소를 눌러 보세요)

article의 부모는 body, 자식은 h3, p.price, 형제는 h1, article입니다.

AI에게 물을 때

"화면에 버튼이 안 보여요"라는 문제도 DOM으로 나눠 물을 수 있습니다. 버튼 요소가 DOM에 아예 없는지, 있는데 숨겨져 있는지에 따라 원인이 다릅니다.

"개발자 도구 Elements 패널에서 보면 버튼 요소는 DOM에 있는데 화면에 안 보여. 이 요소를 숨기는 CSS가 어디서 오는지 찾아 줘."

헷갈리기 쉬운 말

HTML과 DOM

HTML은 서버가 보낸 글자이고, DOM은 그 글자를 읽어 만든 트리입니다. 페이지가 열린 뒤 JavaScript가 DOM을 고치면 둘의 내용이 달라집니다. 브라우저의 페이지 소스 보기는 HTML을, 개발자 도구의 Elements 패널은 지금의 DOM을 보여 줍니다.

자세히 읽기

블로그 · 6분DOM이란? HTML과 DOM의 차이를 그림으로 이해하기

이 용어가 나오는 Lesson

함께 보면 좋은 용어