Document Object Model(DOM)

2025. 10. 16. 00:20·Computer Science/Web Development

웹페이지를 개발하다 보면 DOM(Document Object Model)이 자주 등장한다. DOM은 단순히 HTML 문서를 보여주는 것이 아니라, 웹 문서를 프로그래밍적으로 접근하고 조작할 수 있는 트리 구조의 모델이다. 브라우저는 HTML과 CSS를 파싱해 DOM과 CSSOM을 생성하고, 이를 결합해 렌더 트리를 만들기 때문에 DOM을 이해하는 것은 웹 개발의 핵심이다.

 

1. DOM 이란?

DOM은 웹 문서의 구조화된 표현을 제공하며, HTML이나 XML 문서의 모든 요소, 속성, 텍스트를 노드로 나타낸다. 트리 구조를 가지고 있어 각 요소는 부모와 자식 관계를 갖고, 개발자는 이를 통해 특정 노드에 접근하거나 조작할 수 있다.

예를 들어 자바스크립트를 사용하면 페이지의 내용을 동적으로 변경할 수 있다.

document.getElementById('title').textContent = 'DOM 이해하기';

 

2. DOM 조작 방법

DOM을 조작하는 방법에는 크게 5가지가 있다.

  1. 요소 선택 - getElementById, getElementsByClassName, querySelector 등으로 원하는 요소를 선택할 수 있다.
  2. 요소 생성 - document.createElement로 새로운 요소를 만들 수 있다.
  3. 요소 추가/제거 - appendChild, insertBefore, removeChild, replaceChild 등을 사용해 트리에 요소를 추가하거나 삭제할 수 있다.
  4. 속성 변경 - setAttribute, getAttribute, removeAttribute로 요소 속성을 제어할 수 있다.
  5. 내용 변경 - innerHTML은 HTML 태그를 포함한 콘텐츠를 설정하고, textContent는 텍스트만 변경한다.

 

// innerHTML
document.getElementById('example').innerHTML = '<b>Bold Text</b>';

// textContent
document.getElementById('example').textContent = 'Plain Text';

주의 - innerHTML은 DOM을 다시 생성하기 때문에 성능과 보안에 영향을 줄 수 있고, textContent는 단순 텍스트만 처리하므로 안전하다.

 

3. DOM 이벤트 처리

웹에서는 다양한 이벤트가 발생한다. 클릭, 키 입력, 마우스 이동뿐만 아니라 DOM 자체가 변할 때도 이벤트가 발생한다. 자바스크립트에서는 addEventListener를 통해 이벤트 핸들러를 등록할 수 있다.

document.getElementById('myButton').addEventListener('click', function(event) {
    alert('버튼 클릭!');
});

 

이벤트 위임(Event Delegation)

많은 자식 요소에 이벤트를 등록해야 할 때, 부모 요소에 한 번만 등록하는 것이 효율적이다. 이를 이벤트 위임이라고 한다.

이 방법을 사용하면 메모리 사용량을 줄이고, 동적으로 생성된 요소에도 이벤트를 적용할 수 있다.

document.getElementById('parent').addEventListener('click', function(event) {
    if (event.target && event.target.matches('li.item')) {
        console.log('리스트 아이템 클릭!');
    }
});

 

4. DOM과 성능 최적화

DOM 조작은 브라우저의 렌더링에 직접 영향을 준다. 요소를 반복적으로 수정하면 리플로우(Reflow)와 리페인트(Repaint)가 발생해 성능이 떨어진다. (리플로우와 리페인트 알아보기)

 

이를 최소화하는 방법은 다음과 같다.

  • 여러 번 수정하지 말고, DocumentFragment나 변수에 모아 한 번에 적용
  • 인라인 스타일보다 CSS 클래스 토글을 사용
  • 자주 변경되는 요소를 최소화하고, DOM 접근 횟수를 줄임

 

5. 마무리

DOM은 단순한 개념 같지만, 페이지 구조와 이벤트 처리, 성능 최적화까지 연결되어 있어 웹 개발의 기초이자 핵심이다. 코드를 직접 작성하고 실습하며 DOM의 동작 원리를 체감하여 빠르게 이해해보자.

'Computer Science > Web Development' 카테고리의 다른 글

JWT(Json Web Token)  (0) 2025.10.17
SPA, CSR, SSR, 그리고 Hybrid Rendering — 웹 렌더링의 진화  (0) 2025.10.17
z-index가 같아도 겹치는 순서가 달라지는 이유  (0) 2025.10.16
브라우저의 동작 원리  (0) 2025.10.15
브라우저의 구조와 웹 스토리지  (0) 2025.10.15
'Computer Science/Web Development' 카테고리의 다른 글
  • SPA, CSR, SSR, 그리고 Hybrid Rendering — 웹 렌더링의 진화
  • z-index가 같아도 겹치는 순서가 달라지는 이유
  • 브라우저의 동작 원리
  • 브라우저의 구조와 웹 스토리지
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Other than Tech
        • 잡생각
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Threads and Multithreading
    Data Structure
    딥다이브
    스코프
    이벤트
    Operating System
    polylingo
    Network
    mobile app
    프론트엔드 성능 최적화 가이드
    자바스크립트
    모던 자바스크립트 Deep Dive
    CPU scheduling algorithm
    database
    need a database
    커리어
    structure of os
    indie hacker
    How memory manage data
    Shared resources
    testing
    DOM
    leetcode
    Time complexity and Space complexity
    Javascript Essentials
    VoiceJournal
    자바스크립트 딥다이브
    TCP/IP
    Binary Tree BFS
    js pattern
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
Document Object Model(DOM)
상단으로

티스토리툴바