DOM(Document Object Model) 구조와 정의

대부분의 웹페이지는 HTML로 구성되어 있지만, 우리가 브라우저에서 상호 작용하는 것은 단순한 정적인 HTML 문서가 아닙니다. 웹페이지는 브라우저에 의해 DOM(Document Object Model)이라는 구조화된 객체 모델로 변환되며, 이 DOM을 통해 JavaScript는 페이지의 내용을 읽고 수정할 수 있습니다.

DOM은 웹의 핵심 작동 원리이자 프로그래밍 가능한 웹의 뼈대입니다. 버튼 클릭, 폼 입력, 실시간 데이터 변경 등 우리가 웹에서 경험하는 대부분의 동적인 동작은 DOM 조작을 통해 이루어집니다.

이 섹션은 DOM의 정의부터 시작하여, HTML과의 관계, 표준화 된 구조로서의 DOM의 역할을 확인하고 DOM이 왜 중요한지 이해하여 웹 개발 및 SEO나 웹 성능 최적화에도 훨씬 깊이 있는 접근을 목적으로 합니다.

✅ DOM이란 무엇인가?

  • ↳ DOM의 정의

DOM(Document Object Model)HTML이나 XML 문서를 객체 기반으로 표현한 트리 구조입니다. 브라우저는 HTML을 해석해 각 요소를 객체화하여 메모리에 구성된 DOM 트리를 생성합니다. 이 트리는 JavaScript를 통해 접근하고 조작할 수 있으며, 문서의 구조나 내용, 스타일 등을 동적으로 변경할 수 있게 해 줍니다.

DOM은 ‘문서(document)’를 ‘객체(object)’로 모델링한 것으로, 개발자가 웹페이지를 프로그래밍 적으로 제어할 수 있는 핵심 수단입니다.

🔲 HTML과 DOM의 관계

HTML은 단지 마크업 언어일 뿐이지만, 브라우저는 이 HTML을 분석해 DOM이라는 객체 기반 구조로 변환합니다. 우리가 보는 웹페이지의 버튼, 이미지, 링크 등은 모두 DOM의 일부분으로 표현되며, JavaScript는 이 DOM을 통해 해당 요소들을 선택하고 조작합니다.

즉, HTML은 정적인 문서, DOM은 해석된 동적 구조이며, DOM은 HTML을 기반으로 생성되지만 JavaScript와 상호작용이 가능한 형태로 존재합니다.

HTML5[기본 구조]

🔲 W3C와 DOM 표준

DOM은 국제 웹 표준 기구인 W3C에서 정의한 표준 명세를 따릅니다. DOM은 단일 기술이 아니라 HTML DOM, XML DOM, SVG DOM 등 다양한 문서 유형에 따라 세분화된 API 집합으로 구성됩니다.

W3C는 DOM을 다음과 같이 정의합니다.

“DOM은 프로그램과 스크립트가 문서의 내용, 구조 및 스타일에 동적으로 접근하고 업데이트할 수 있도록 하는 플랫폼 및 언어 중립 인터페이스입니다.”

✅ DOM 트리의 구조와 구성 요소

📦 Node(DOM의 모든 노드 유형의 최상위 개념)
   ├─ 🧱 Element Node
├─🆔 nodeType: 1
└─🧩HTML 요소 태그 (예: <div>, <p>, <a>)
 DOM 조작에서 가장 핵심적으로 사용
 주요 DOM 구성 요소 

   ├─ 🔧 Attribute Node
├─🆔 nodeType: 2
└─🧩HTML 요소의 속성 (예: href, id, class )
 HTML5 이후엔 getAttribute 등으로 접근 (직접 DOM 트리에는 포함되지 않음)
 주요 DOM 구성 요소 

   ├─ 📝 Text Node
├─🆔 nodeType: 3
└─요소 내부의 텍스트 콘텐츠 (예: "Hello World")
 주요 DOM 구성 요소 

   ├─ 💬 Comment Node
├─🆔 nodeType: 8
└─ <!-- 주석 내용 --> 형태의 노드

   ├─ 📄 Document Node
├─🆔 nodeType: 9
└─ 문서 전체를 대표하는 최상위 노드 (`document` 객체)

   ├─ 📑 DocumentType Node
├─ 🆔 nodeType: 10
└─ <!DOCTYPE html>  같은 문서 유형 선언 노드

   └─ 🧭 ProcessingInstruction Node
       ├─ 🆔 nodeType: 7
       └─ XML 문서에서 처리 명령을 정의할  사용

🔲 노드(Node)란?

DOM은 트리 형태의 구조로 구성되며, 이 트리의 각 구성 요소는 노드라 불립니다. 노드는 크게 7가지 유형이 있으며, 이 중에서 가장 많이 사용되는 것은 요소 노드, 텍스트 노드, 속성 노드입니다.

모든 HTML 요소는 하나의 노드이며, 문서 전체를 대표하는 document 객체도 하나의 최상위 노드입니다. 즉, DOM은 “노드들의 계층 구조”라고 할 수 있습니다.

🔲 주요 노드: 요소, 텍스트, 속성

  • 🧱요소 노드
  • ↳ <div>, <p>, <a> 등 HTML 태그 하나하나가 모두 요소 노드입니다. 실제 페이지를 구성하는 주요 단위입니다.
  • 📝텍스트 노드
  • ↳ 요소 내부에 존재하는 텍스트 콘텐츠 자체를 나타냅니다. 예: <p>Hello</p> → “Hello”는 텍스트 노드입니다.
  • 🔧속성 노드
  • ↳ 요소의 부가 정보를 담고 있는 노드입니다. 예: <a href=”#”>에서 href는 속성 노드입니다.

이 세 가지 노드가 DOM을 구성하는 핵심이며, JavaScript는 이들을 선택하고 수정함으로써 페이지를 동적으로 제어할 수 있습니다.

🔲 기타 노드 유형 요약

  • 💬 주석 노드
  • ↳ <!– 이렇게 쓰이는 주석 내용 –>을 표현하는 노드입니다.
  • 📄 문서 노드
  • ↳ 전체 DOM 트리의 최상위 객체로, 자바스크립트에서 사용하는 document 객체입니다.
  • 📑 문서유형 노드
  • ↳ <!DOCTYPE html>처럼 문서 유형을 선언하는 노드입니다.
  • 🧭 처리 명령 노드
  • ↳ XML 문서에서 처리 명령(PI)을 나타낼 때 사용됩니다.

🔲 부모/자식/형제 관계

DOM은 트리 구조이기 때문에 위계 관계가 존재합니다.

  • 👨‍👧부모 노드
  • ↳ 다른 노드를 포함하는 상위 노드입니다. 예: <ul>은 <li>들의 부모입니다.
  • 👨‍🎓자식 노드
  • ↳ 특정 노드 내부에 포함된 하위 노드입니다.
  • 🤝형제 노드
  • ↳ 동일한 부모 아래 위치한 노드들입니다.

이 관계 덕분에 JavaScript는 parentNode, childNodes, nextSibling, previousSibling 같은 프로퍼티를 통해 문서 구조를 탐색하거나 조작할 수 있습니다.

✅ DOM 생성 과정: 브라우저 렌더링 흐름

  • HTML 파싱과 DOM 트리 생성
📦 Document Object Model (DOM)
 ├─📄정의
└─ HTML 문서를 브라우저가 구조화한 **객체 트리 모델**
 HTML 요소들을 노드(Node) 구성
 JavaScript로 조작 가능

 └─🔁생성 과정
    ├─ HTML 파싱 시작
    ├─ DOM 트리 생성
    ├─ [이벤트] DOMContentLoaded 발생
└─ DOM이 완성됨 (스타일시트·이미지 등은 아직 로딩 중일  있음)
 JavaScript로 DOM 조작 가능한 상태

    ├─ CSS 파싱  CSSOM 생성
    ├─ DOM + CSSOM  렌더 트리 생성
    ├─ 렌더링 (Layout + Paint)
    └─ [이벤트] load 발생
        └─ 모든 리소스 로딩 완료 (이미지, iframe, 외부 스크립트 포함)

브라우저는 HTML 문서를 위에서 아래로 순차적으로 파싱하면서 DOM 트리를 구성합니다. 이 과정은 다음과 같이 진행됩니다.

  1. HTML Parser가 <html>, <head>, <body> 등 태그를 읽어가며 각 요소를 노드로 변환
  2. 이 노드들을 계층 구조로 연결해 DOM(Document Object Model) 트리를 생성
  3. DOM 트리는 이후 JavaScript와 CSS 렌더링의 기반이 됩니다

이 시점에서 아직 CSS나 이미지 등은 완전히 적용되지 않았으며, 브라우저는 문서 구조만 우선 구성합니다.

🔲 CSSOM과 렌더 트리

HTML뿐 아니라 CSS도 별도로 파싱되어 CSSOM(CSS Object Model)이라는 객체 구조로 구성됩니다.

렌더링에 필요한 실제 트리는 아래와 같은 과정을 통해 형성됩니다.

  • 1. DOM + CSSOM → 렌더 트리 생성
  • 2. 각 요소가 어떻게 보일지 스타일 포함한 시각적 표현 구조로 바뀜
  • 3. 이 렌더 트리를 기준으로 브라우저는 레이아웃 계산과 그리기 작업을 수행함

렌더 트리는 display: none 요소는 제외하고, visibility: hidden 요소는 포함됩니다.

🔲 DOMContentLoaded vs Load 이벤트

브라우저의 렌더링 완료 시점을 감지하는 두 가지 주요 이벤트가 있습니다.

이벤트

발생 시점

설명

DOM
Content
Loaded

DOM 트리 완성 직후

HTML 파싱이 끝나고, 스크립트 실행 가능한 시점
(이미지, 스타일시트 로딩은 완료되지 않아도 됨)

Load

모든 리소스 로드 후

DOM + CSS + 이미지 + 외부 리소스까지의
모든 로드 완료된 후 발생

다음은 크롬 개발자 도구에서 확인할 수 있는 DOMContentLoaded와 Load 이벤트입니다.

크롬 개발자 도구-DOMContentLoaded & Load
DOM: Document Object Model

Similar Posts

  • DNS 레코드 확인 및 네임서버 성능 측정 사이트

    DNS(Domain Name System)는 호스트의 네트워크 주소 변경을 수행하기 위해 개발된 시스템입니다. 기본 호스트 서버로 연결되기 전에 보통의 경우 IP 주소를 대신해서 사용하는 주소인 도메인은 DNS에 의해 IP와 도메인을 연결해 줍니다.DNS 레코드 확인을 편하게 할 수 있는 “whatsmydns”와 DNS 서버의 성능을 측정할 수 있는 “DNSPerf”에 대해 알아 보겠습니다. 호스팅 서비스를 이용하게 되면 공유 호스팅과…

  • 웹 성능 최적화: 구조와 정의

    사용자 경험(UX), 검색 엔진 최적화(SEO), 전환율, 그리고 사이트 유지 비용까지 – 웹 성능은 단순히 ‘사이트 속도 향상’이 아닌 적용된 이후의 여러가지 효과에 복합적인 영향을 주는 핵심 요소입니다. 일반 웹사이트 그리고 워드프레스와 같이 다양한 테마와 플러그인이 공존하는 환경에서는, 성능 저하의 원인을 파악하고 그에 맞는 최적화 기법을 적용하는 것이 필수입니다. 이 글은 웹 성능 최적화를…

  • HTML이란 무엇인가? | HTML5 개념과 DOM 관계

    대부분의 웹 페이지는 HTML로 만들어져 있습니다. 우리가 브라우저에서 보는 텍스트, 이미지, 링크, 버튼 등은 모두 HTML을 통해 구조화되고 표현됩니다. HTML은 단순한 마크업 언어가 아니라, 웹이라는 공간의 기초 언어이자 모든 웹 개발의 출발점입니다. 특히 HTML5는 이전 버전과 달리 더 풍부한 의미 구조를 담을 수 있도록 진화했으며, 모바일 시대에 최적화된 표준으로 자리 잡았습니다. 이 페이지에서는…

  • [SEO] 애드센스를 이용한 효과적인 수익 창출을 하는 3가지 유형 웹사이트

    구글 애드센스(Google AdSense)는 광고주가 구글 애즈에서 광고를 올리면, 블로그, 포럼 사이트 등에서 애드센스 광고를 올려 수익을 창출하는 구조입니다. 애드센스를 이용한 효과적인 수익 창출을 하는 3개 웹사이트에 대해 알아 보겠습니다. 높은 CPC(클릭당 비용)이 발생하는 웹사이트는 어느 점에서 차이가 있을까요? 지속적이며 높은 수익을 낸 3가지 유형의 사이트입니다. 이 글은 구글 애드센스의 참고자료 웹페이지에서 참조 했습니다….

  • [SEO] 이미지 메타 데이터가 SEO에 미치는 영향 및 수정 방법

    웹 사이트를 운영하면서 비용이 발생하지 않는 유기적인 트래픽을 획득하려면 웹 사이트 속도, 백링크, 이미지 대체 텍스트 등 다양한 방법을 적용하며 운영하게 됩니다. 웹 사이트 SEO에 약간의 점수를 더 얻고 싶다면 이미지 메타 데이터에 대한 고려를 생각해 볼 수 있습니다. 생성한 콘텐츠가 첫 페이지에 뜨지만 1~3번째 노출하기 위한 여러가지 방법이 있지만 작문 실력 외에…

  • [SEO] Blog Post vs. Article: 차이점은 무엇인가?

    웹사이트 콘텐츠를 발행할 때 [블로그 포스트&기사] 둘 중에 어떤 콘텐츠를 발행하는 것이 맞는지 SEO 관점에서 고민할 수 있습니다. 아니면 구글링으로 검색한 웹페이지의 콘텐츠가 Blog 게시물인지 기사인지 생각해 보신 적이 있나요? Blog Post vs. Article 두 종류의 콘텐츠는 어떤 차이점을 가지고 있으며 비즈니스 관점에서 어떤 콘텐츠를 게시하는 것이 더 나을지 알아 보겠습니다. 목차✅ DOM이란…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 3   +   8   =