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

  • HTML 태그: SPAN 태그와 DIV 태그 차이와 용도

    웹 페이지를 구성할 때 자주 사용되는 태그가 div 태그와 span 태그 그리고 p 태그입니다. p(paragraph)는 단락을 나타내는 의미적 요소입니다. div(division)는 구획 및 구분의 약자로, 문서의 구조를 나누는 데 사용하는 블록 태그입니다. span은 텍스트 일부를 감싸는 데 사용하는 범용 태그입니다. 목차✅ DOM이란 무엇인가?🔲 HTML과 DOM의 관계🔲 W3C와 DOM 표준✅ DOM 트리의 구조와 구성 요소🔲…

  • 캐싱 개념과 분류: 웹사이트 성능 최적화 | 원리와 활용 | 서버 측 캐시 5가지와 클라이언트 캐시

    사이트 성능 최적화란 사용자에게 더 빠른 로딩 속도와 쾌적한 경험을 제공하기 위해 웹 자원과 서버 구조를 효율적으로 관리하는 작업입니다. 이를 위해 일반적으로 캐싱, 파일 최적화, 전송 최적화, 서버 최적화 네 가지 핵심 전략이 활용됩니다. 캐시를 통해 반복되는 데이터를 저장하고, 파일 최적화를 통해 CSS·JS·이미지 등의 용량을 줄이며, 전송 최적화에서는 압축과 CDN, HTTP/2 등을 활용해…

  • 티스토리 단점과 장점

    한국에서 가장 많이 사용하는 블로그는 네이버 블로그와 티스토리 블로그입니다. 티스토리 단점과 장점은 어떤 점이 있는지 알아 보겠습니다. 목차✅ DOM이란 무엇인가?🔲 HTML과 DOM의 관계🔲 W3C와 DOM 표준✅ DOM 트리의 구조와 구성 요소🔲 노드(Node)란?🔲 주요 노드: 요소, 텍스트, 속성🔲 기타 노드 유형 요약🔲 부모/자식/형제 관계✅ DOM 생성 과정: 브라우저 렌더링 흐름🔲 CSSOM과 렌더 트리🔲 DOMContentLoaded…

  • [Google Analytics GA4] 구글 애널리틱스 GA4 설치하기

    구글 애널리틱스 GA4로 사이트의 기본적인 접속 통계 및 실시간 사용자를 확인 할 수 있습니다. GA4 신규 생성 방법에 대해 알아 보겠습니다. GA4 신규 세팅을 위해서는 운영중인 URL이 있는 웹사이트가 있어야 합니다. ※ 애널리틱스 카테고리는 [계정]과 그 하위 카테고리인 [속성]에서 거의 모든 설정을 한다고 본 후에 시작하는 것이 좋습니다. 목차✅ DOM이란 무엇인가?🔲 HTML과 DOM의…

  • 한글 맞춤법 검사기-부산대학교 맞춤법 검사기N네이버 맞춤법 검사기

    한글 맞춤법 검사기는 부산대학교 맞춤법 검사기와 네이버의 맞춤법 검사기 두 개가 가장 널리 사용되고 있습니다. 목차✅ DOM이란 무엇인가?🔲 HTML과 DOM의 관계🔲 W3C와 DOM 표준✅ DOM 트리의 구조와 구성 요소🔲 노드(Node)란?🔲 주요 노드: 요소, 텍스트, 속성🔲 기타 노드 유형 요약🔲 부모/자식/형제 관계✅ DOM 생성 과정: 브라우저 렌더링 흐름🔲 CSSOM과 렌더 트리🔲 DOMContentLoaded vs Load…

  • 구글 PDF 번역 &이미지 번역 2가지 기능

    Google 번역은 일반적인 기계 번역 외에도 PDF 파일 번역과 이미지 내의 글자를 렌즈 번역할 수 있습니다. 구글 PDF 번역이 설치해야 하는 다른 번역 프로그램이나 웹 사이트보다 더 나은 이유는 설치의 번거로움이나 번역 파일의 크기 문제로 인한 오류가 상대적으로 없다는 것입니다. 구글의 PDF 번역과 이미지 번역에 대해 각각 알아 보겠습니다. 목차✅ DOM이란 무엇인가?🔲 HTML과…

답글 남기기

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

Prove your humanity: 8   +   4   =