HTML, CSS, Javascript

[Javascript] DOM(The Document Object Model)

kimyongjun0129 2025. 4. 20. 09:52

 

 

 

개요

브라우저에는 웹 문서를 해석할 수 있는 랜더링 엔진이 있다. 랜더링 엔진은 HTML 파일을 할 줄 한 줄 해석한다. 해석이 완료되면 웹 문서를 객체화(Document Object Model)하여 자바스크립트에서 접근할 수 있게 해준다. 문서를 객체화(DOM)한다는게 무엇일까?

 

 


 

 

DOM

DOM은 두 가지 의미가 있다. 하나는 HTML 문서의 트리 구조(실체)이고 다른 하나는 그 구조를 만들고 조작하는 데 필요한 API와 규칙을 정의한 표준 명세(설계도)가 있다. 혼동하지 않도록 한다.

 

 

DOM 구조(실체)

  • 문서 객체 모델(Document Object Model, 이하 DOM)이라고 한다.
  • DOM은 HTML 코드를 자바스크립트가 다룰 수 있게 객체화 한 것이다.
  • Tree 구조를 갖는다. (DOM Tree)

예를 들어, HTML 문서가 다음과 같을 때

<!DOCTYPE html>
<html>
  <head>
     <title>DOM</title>
  </head>
  <body>
    <h1>Hello world!</h1>
  </body>
</html>

 

브라우저는 다음과 같이 문서를 객체화(DOM)한다.

document
└── html
    |── head
    |   └── title
    └── body
        └── h1

각 요소(<html>, <head>, <title>, <body>, <h1>)가 전부 객체로 표현되면, 자바스크립트가 document를 통해 이 객체들에 접근해서 내용을 바꾸거나, 삭제하거나, 새로 만들 수 있다.

 

그렇다면, document는 무엇일까?

 

document

DOM 구조(실체)에 접근할 수 있는 시작점(최상위 객체 중 하나)이다.

브라우저(실행 환경)가 자바스크립트에 제공하는 객체이다.

  • 자바스크립트가 document 객체를 통해 HTML 문서를 조작할 수 있도록 하기 위해서이다.
<!DOCTYPE html>
<html>
  <head>
    <title>DOM</title>
  </head>
  <body>
    <h1>Hello world!</h1>
  </body>
  <script>
    document.childNodes[1].childNodes[2].childNodes[1].innerText = "Bye World!";
  </script>
</html>

document 객체에서 자식 노드를 타고 들어가서 직접 그 노드의 값을 변경해줄 수 있다.

 

웹 페이지

 

 

일일이 이렇게 노드를 특정하고 바꿔주는건 무리가 있기 때문에 document 객체의 메서드를 활용하여, 이를  다음과 같이 간단하게 제어 할 수 있다.

<!DOCTYPE html>
<html>
  <head>
    <title>DOM</title>
  </head>
  <body>
    <h1>Hello world!</h1>
  </body>
  <script>
    const title = document.queryselector("h1");
    title.innerText = "Bye World!";
  </script>
</html>

이러한 메서드뿐 아니라 여러가지 속성들을 이용할 수 있도록, DOM 사양(설계도)에 맞춰 브라우저가 DOM(실체)를 구현한다.

그렇다면, DOM 사양은 무엇일까?

 

 

 

DOM 사양(설계도)

DOM(실체)을 만들고 조작하는 데 필요한 API와 규칙을 정의한 표준 명세(설계도)이다.

예를 들어, 

  • document.getElementById() 메서드가 존재해야한다.
  • Element 객체에는 innerHTML 속성이 있어야 한다.
  • Node는 childNodes를 가져야 한다.
  • 등등

W3C나 WHATWG가 이 표준을 작성하고, 브라우저들이 이를 토대로 DOM(실체)을 구현한다.

 

 


 

 

정리

1. DOM 사양(설계도)은 W3C/WHATWG가 정의한 표준이다.

2. 브라우저는 DOM 사양을 참고해서 DOM 객체(실체)를 구현한다.

3. 개발자는 그 구현체를 통해  자바스크립트로 HTML 문서를 조작할 수 있는 것이다.