본문 바로가기
개발 언어/자바스크립트 33가지 개념

[JavaScript 33가지 개념] 13. DOM과 Layout Trees

by 우주다람쥐 2024. 11. 28.
반응형

 

웹 개발에서 DOM(Document Object Model)은 HTML 문서를 조작하고 화면에 콘텐츠를 표시하는 데 중요한 역할을 합니다. 이 글에서는 DOM의 개념, 동작 방식, 그리고 Layout Trees가 어떻게 화면 렌더링과 연결되는지 알아보겠습니다.


1. DOM이란 무엇인가?

DOM은 웹 페이지의 HTML 또는 XML 문서를 객체로 표현하는 프로그래밍 인터페이스입니다. 이를 통해 JavaScript를 사용하여 문서 구조, 콘텐츠, 그리고 스타일을 동적으로 변경할 수 있습니다.

  • HTML 코드
<html>
  <body>
    <h1>Hello, World!</h1>
    <p>This is a paragraph.</p>
  </body>
</html>

 

  • DOM 구조
Document
 └── html
     ├── body
         ├── h1
         └── p

 

DOM은 트리 구조로 구성되며, 각 HTML 태그는 노드(node)로 표현됩니다. 이를 통해 프로그래밍 언어(JavaScript 등)로 문서를 쉽게 조작할 수 있습니다.


2. DOM의 주요 개념

  1. 노드(Node)
    DOM의 각 요소(HTML 태그, 텍스트, 속성 등)는 노드로 표현됩니다. 노드는 다음과 같이 분류됩니다:
    • Element Node: HTML 요소를 나타냅니다. (예: <div>)
    • Text Node: HTML 요소 내부의 텍스트를 나타냅니다. (예: "Hello, World!")
    • Attribute Node: HTML 속성을 나타냅니다. (예: class="example")
  2. DOM 조작
    JavaScript를 사용해 DOM을 동적으로 변경할 수 있습니다.
// 요소 선택
const heading = document.querySelector('h1');

// 콘텐츠 변경
heading.textContent = 'Welcome to the DOM!';

// 스타일 변경
heading.style.color = 'blue';

 


3. Layout Trees란 무엇인가?

Layout Trees는 웹 브라우저가 DOM과 CSSOM(CSS Object Model)을 결합하여 페이지 레이아웃을 생성하는 과정에서 만들어집니다.

  • DOM: 문서의 구조(HTML)를 나타냅니다.
  • CSSOM: 스타일 정보를 나타냅니다.
  • Layout Tree: DOM과 CSSOM을 기반으로 화면에 표시될 요소만을 포함한 구조입니다.

4. DOM, CSSOM, 그리고 Layout Tree의 관계

브라우저가 HTML과 CSS를 렌더링할 때 다음 단계를 거칩니다:

  1. HTML 파싱 → DOM 생성
    브라우저는 HTML 파일을 읽어 DOM 트리를 만듭니다.
  2. CSS 파싱 → CSSOM 생성
    CSS 파일을 읽어 CSSOM을 만듭니다.
  3. DOM + CSSOM → Render Tree 생성
    DOM과 CSSOM을 결합하여 Render Tree를 생성합니다. 여기서 **보이지 않는 요소(예: display: none 설정된 요소)**는 제외됩니다.
  4. Layout
    Render Tree를 기반으로 각 요소의 위치와 크기를 계산합니다.
  5. Painting
    요소를 픽셀로 그려 화면에 출력합니다.

5. Layout Tree의 중요한 특징

  1. 효율적인 렌더링
    Layout Tree는 보이지 않는 요소를 제외하므로, 브라우저는 화면에 필요한 정보만 처리합니다.
  2. 동적 DOM 변경
    DOM을 변경하면 Layout Tree가 업데이트되며, 이를 Reflow 또는 Repaint라 부릅니다.
    • Reflow: 레이아웃을 다시 계산해야 하는 경우.
    • Repaint: 요소의 시각적 속성(색상, 배경 등)이 변경된 경우.
const box = document.querySelector('.box');
box.style.width = '200px'; // Reflow 발생
box.style.backgroundColor = 'red'; // Repaint 발생

 


6. DOM과 Layout Tree 활용 예시

2. 동적 콘텐츠 생성
JavaScript로 DOM을 생성하여 콘텐츠를 동적으로 추가할 수 있습니다.

const container = document.querySelector('.container');
const newElement = document.createElement('div');
newElement.textContent = 'I am dynamically created!';
container.appendChild(newElement);

 

2. 레이아웃 최적화
DOM 조작이 Layout Tree에 불필요한 영향을 주지 않도록 최적화합니다.

  • DOM 변경을 최소화하기 위해 DocumentFragment를 사용합니다.
const fragment = document.createDocumentFragment();
for (let i = 0; i < 1000; i++) {
    const div = document.createElement('div');
    div.textContent = `Item ${i}`;
    fragment.appendChild(div);
}
document.body.appendChild(fragment);

7. 결론

DOM은 웹 문서의 구조를 프로그래밍적으로 조작할 수 있게 해주는 핵심 개념이며, Layout Tree는 화면 렌더링의 효율성을 높이는 중요한 과정입니다. DOM과 Layout Tree의 원리를 이해하면 더 나은 성능과 사용자 경험을 제공하는 웹 애플리케이션을 개발할 수 있습니다.

 

 

 

출처
- https://www.digitalocean.com/community/tutorials/introduction-to-the-dom

- https://www.freecodecamp.org/news/whats-the-document-object-model-and-why-you-should-know-how-to-use-it-1a2d0bc5429d

- https://www.guru99.com/how-to-use-dom-and-events-in-javascript.html

 

 

반응형

댓글