Published On

BOM(Browser Object Model)과 DOM(Document Object Model)


BOM(Browser Object Model)DOM(Document Object Model)은 웹 브라우저 내에서 작동하는 두 가지 주요 객체 모델입니다.

BOM과 DOM이 무엇이며, 이들의 차이점 및 상호 작용 방법에 대하여 밑에서 그림을 보면서 자세히 살펴보겠습니다.

  • 일단 두 가지 모두 Object Model. 즉, 객체 입니다.

BOM(Browser Object Model)이란?

bom

BOM은 브라우저의 창이나 프레임을 포함한 웹페이지의 모든 요소를 객체로 다루어 접근할 수 있게 하는 모델입니다.

즉, BOM을 통해 브라우저 창과 관련된 다양한 기능(예: 창 크기 변경, URL 변경 등)을 스크립트로 제어할 수 있습니다.

가장 널리 알려진 BOM 객체 중 하나는 window 객체인데, 이는 브라우저의 창을 나타냅니다.

DOM(Document Object Model)이란?

dom

DOM은 HTML 문서의 구조를 객체 형태로 표현한 것으로, 웹 페이지의 문서를 프로그래밍적으로 제어할 수 있는 API를 제공합니다.

HTML이나 XML 문서의 각 요소를 노드(node)라는 객체로 표현하며, 이를 통해 문서 구조에 접근하고 수정할 수 있습니다.

가장 기본이 되는 객체는 document 객체입니다. BOM

BOM과 DOM의 차이점

BOM과 DOM은 모두 웹 페이지를 스크립트를 통해 제어하기 위한 객체 모델입니다만, 그 적용 범위와 사용 목적에서 차이를 보입니다.

아래 표는 BOM과 DOM의 주요 차이점, 객체들을 정리한 것입니다

기준BOMDOM
주요 객체windowdocument
적용 범위브라우저 창 및 기능문서 구조 및 내용
사용 예창 크기 변경, URL 접근요소 추가, 수정, 삭제
구분객체설명주요 속성 / 메서드
BOMwindow브라우저 창을 나타내는 최상위 객체. 전역 함수와 변수가 속해 있음.window.open(), window.alert(), window.innerWidth, window.location
location현재 페이지의 URL 정보를 담고 있는 객체.location.href, location.reload(), location.assign(), location.pathname
navigator브라우저와 운영체제 정보를 제공. 사용자의 에이전트나 온라인 상태를 감지.navigator.userAgent, navigator.onLine, navigator.language
history사용자가 방문한 페이지 기록을 관리.history.back(), history.forward(), history.length
screen사용자의 화면 정보 제공. 해상도 및 색상 깊이 등을 알 수 있음.screen.width, screen.height, screen.availWidth, screen.colorDepth
DOMdocumentHTML 문서의 루트 객체. 웹 페이지의 콘텐츠를 프로그래밍적으로 조작 가능.document.title, document.body, document.getElementById()
ElementHTML 요소를 나타내며 DOM 트리의 각 노드로 구성됨.element.innerHTML, element.classList, element.style
TextHTML 요소의 텍스트 노드를 나타냄.textNode.nodeValue
Attribute요소의 속성 노드를 나타냄.element.getAttribute(), element.setAttribute()
EventDOM에서 발생하는 사용자 상호작용을 나타냄.addEventListener(), removeEventListener(), event.type

주요 BOM 객체

bom

window 객체

  • 브라우저의 창을 대표합니다. 전역 JavaScript 객체, 함수, 변수 등이 이 객체의 멤버가 됩니다.
  • 다른 BOM 객체에 접근하기 위한 기점 역할을 합니다.
  • 팝업 창을 생성(window.open)하거나, 창의 크기를 조절(window.resizeTo)하는 등의 작업을 할 수 있습니다.

location 객체

  • 현재 창의 URL을 나타냅니다.
  • URL을 파싱하여 프로토콜, 호스트 이름, 경로 등을 별도의 속성으로 제공합니다.
  • location.href를 사용해 페이지를 다른 URL로 리다이렉트할 수 있습니다.
  • 브라우저 자체에 대한 정보를 제공합니다.
  • 브라우저의 이름, 버전, 사용자의 운영체제 정보 등을 포함합니다.
  • 사용자가 웹 서핑을 하는 동안 브라우저의 기능을 감지하는 데 사용될 수 있습니다.

history 객체

  • 브라우저 세션의 히스토리(방문한 페이지 목록)를 관리합니다.
  • history.back(), history.forward() 메소드를 이용해 사용자가 방문했던 이전 또는 다음 페이지로 이동할 수 있습니다.

screen 객체

  • 사용자의 스크린(화면)에 대한 정보를 제공합니다.
  • 화면의 너비와 높이, 사용 가능한 색상의 수 등을 알 수 있습니다.
  • 웹 애플리케이션을 사용자의 디스플레이에 맞춰 최적화하는 데 사용될 수 있습니다.

document 객체

  • 현재 브라우저 창에 로드된 웹 문서를 대표합니다.
  • DOM(Document Object Model)의 진입점으로, 웹 페이지의 콘텐츠와 구조를 조작할 수 있게 해줍니다.
  • HTML 요소를 추가, 삭제, 수정하는 메소드를 제공합니다.
  • 이게 현재 설명하고 있는 DOM입니다.

주요 DOM 객체

dom

Document 객체

  • DOM 트리의 진입점으로, 전체 문서를 대표합니다.

  • 문서의 로딩, 문서 내 요소의 검색(getElementById, getElementsByClassName, querySelector 등), 요소 생성(createElement, createTextNode 등)과 같은 다양한 작업을 할 수 있는 메서드를 제공합니다.

요소(Element) 노드

  • HTML 요소(태그)를 나타내는 노드로, <div>, <p>, <a> 등의 태그와 매칭됩니다.

  • 요소 노드는 자식 노드를 가질 수 있으며, 텍스트 노드나 다른 요소 노드가 될 수 있습니다.

  • 요소의 속성을 접근하거나 수정할 수 있으며(getAttribute, setAttribute), 스타일이나 클래스를 조작하는 메서드(style, classList)도 제공합니다.

텍스트(Text) 노드

  • 요소 노드의 내용(텍스트)을 담고 있는 노드입니다.

  • 텍스트 노드는 자식 노드를 가질 수 없으며, 텍스트 내용만을 포함합니다.

속성(Attribute) 노드

  • 요소의 속성을 나타내는 노드로, 요소 노드와 연결되어 있습니다.

  • 예를 들어, <a href="abc.com">link <a>에서 href="abc.com" 부분이 속성 노드입니다.

속성 노드는 해당 속성의 이름과 값을 가집니다.

이벤트(Event)

  • DOM에서 이벤트는 문서나 문서 내 요소들에서 발생하는 다양한 상호작용(예: 클릭, 키보드 입력, 마우스 이동 등)을 나타냅니다.

  • 이벤트 리스너를 사용하여 특정 이벤트가 발생했을 때 실행될 콜백 함수를 지정할 수 있습니다(addEventListener).

코드를 통해 알아보기

아래의 HTML 파일이 있다고 가정합니다.

<!DOCTYPE html>
<html>
  <head>
    <title>My Document</title>
  </head>
  <body>
    <h1 id="main-heading">Hello, World!</h1>
    <p>This is a paragraph.</p>
  </body>
</html>

그 HTML파일의 DOM 트리는 아래와 같습니다.

DOM-treetext
document
 ├── html
      ├── head
      │    ├── title
      │    │    └── "My Document"
      └── body
           ├── h1#main-heading
           │    └── "Hello, World!"
           └── p
                └── "This is a paragraph."

JavaScript를 사용하여 DOM 요소에 접근하고 조작하는 예는 아래와 같습니다.

// 문서의 제목(title)을 변경
document.title = "New Title";

// id가 "main-heading"인 요소의 텍스트를 변경
var heading = document.getElementById("main-heading");
heading.innerText = "New Heading";

// 새로운 단락 요소를 생성하여 추가
var newParagraph = document.createElement("p");
newParagraph.innerText = "This is a new paragraph.";
document.body.appendChild(newParagraph);

요약

  • BOM은 브라우저 창과 관련된 정보와 기능을 제공하며, 브라우저의 창, URL, 히스토리, 화면 정보 등을 조작할 수 있습니다.

  • DOMHTML 문서의 구조와 내용을 조작하는 객체 모델로, 웹 페이지 내의 요소 추가, 삭제, 수정 등을 가능하게 합니다.

  • window 객체는 BOM의 최상위 객체이며, document 객체는 DOM의 진입점으로 웹 문서를 조작할 수 있습니다.