프론트엔드분야를 공부하며 생길수 있는 의문점과 가져야할 지식에 대하여 공부하는 바를 적은 글입니다.
The Document Object Model(문서객체모델) 의 약자로, html, xml의 프로그래밍 인터페이스.
문서 객체란?
html, xml을 Java Script가 인식 / 사용 할 수 있는 객체로 만든것.
쉽게 말해 웹 브라우저가 html을 인식하는 방식
DOM은 tree구조로 이루어져있고, 이것을 DOM Tree 라고 한다.
즉, 브라우저가 html을 문저를 인식 / 이용할수 있도록 Tree 구조의 자료형으로 만든 것을 DOM이라 한다.
간단한 html을 통하여 예시를 들어보자.
<html>
<head>
<meta charset = "UTF-8"/>
<title/>
<head/>
<body>
<div>
<h1>~~~<h1/>
<p>xxx<p/>
<div/>
<div>
<ul>
<li>1. ~~<li/>
<li>2. xx<li/>
<ul/>
<div/>
<body/>
<html/>
위 작성된 코드의 html 구조대로 브라우저는 DOM Tree를 생성한다.
이렇게 Tree형태로 만들어 브라우저가 인식 / 이용할수 있도록 만드는 것이다.
위 트리구조에서 각각의 요소를 node라 한다.
Java Script의 Event => DOM에 해당 Event 반영 => 브라우저 리렌더링
원본 html 문서
<html>
Case 1
<html/>
생성된 DOM tree 구조
<html>
<head><head/>
<body>
Case 1
<body/>
<html/>
앞서 말했듯이, 사용자와 브라우저간의 인터랙션을 위해 DOM이 사용된다.
즉, DOM의 동적 변경이 가능하다는 뜻이고, 당연하게도 원본 html과 DOM Tree는 달라진다.
** Example for Case 2 **
var case2 = document.createElement("div");
var case2_text = document.createTextNode("This is Test");
case2.appendChild(case2_text);
document.body.appendChild(case2);
위 코드는 2번째 예시를 나타낸 것이다.
case2라는 변수는 document에 div 태그를 생성하고, case2_text라는 변수는 생성된 div 태그 안에 "This is Test"라는 텍스트 노드를 생성한다.
이후 최종적으로 document에 case2라는 변수, 즉 div 태그 안 텍스트를 추가한다.
Java Script를 사용하여 html문서를 동적으로 구조를 변경하였고, 원본 html과 DOM Tree는 당연하게도 구조가 다르다.