# [[DOM (Document Object Model)|DOM(Document Object Model]] ## πŸ“Œ Brief Summary DOM(Document Object Model)은 λΈŒλΌμš°μ €κ°€ HTML λ§ˆν¬μ—…μ„ λ‚΄λΆ€μ μœΌλ‘œ ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μƒμ„±ν•˜λŠ” 계측적인 트리 ꡬ쑰의 객체 λͺ¨λΈμž…λ‹ˆλ‹€ [1, 2]. λΈŒλΌμš°μ €κ°€ HTML 데이터λ₯Ό μˆ˜μ‹ ν•˜λ©΄μ„œ μ μ§„μ μœΌλ‘œ μƒμ„±ν•˜λ©°, μ›Ή νŽ˜μ΄μ§€μ˜ λͺ¨λ“  μ½˜ν…μΈ μ™€ μš”μ†Œ κ°„μ˜ ꡬ쑰적 관계λ₯Ό λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€ [1, 3, 4]. μžλ°”μŠ€ν¬λ¦½νŠΈ([[JavaScript|JavaScript]]) λ‚΄μ˜ λ‹€μ–‘ν•œ APIλ₯Ό 톡해 DOM에 μ ‘κ·Όν•˜κ³  이λ₯Ό λ™μ μœΌλ‘œ μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2]. ## πŸ“– Core Content - **DOM 생성 κ³Όμ • (DOM Construction Process)** λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° HTML λ¬Έμ„œλ₯Ό μˆ˜μ‹ ν•˜λ©΄ μ¦‰μ‹œ νŒŒμ‹±(Parsing)을 μ‹œμž‘ν•©λ‹ˆλ‹€ [5]. 이 과정은 전체 λ¬Έμ„œκ°€ λ„μ°©ν•˜κΈ°λ₯Ό 기닀리지 μ•Šκ³  점진적(incremental)으둜 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€ [1]. μˆ˜μ‹ λœ 데이터(λ°”μ΄νŠΈ)λŠ” 문자둜 λ³€ν™˜λ˜κ³ , 이후 토큰(tokens)으둜 λ³€ν™˜λœ λ‹€μŒ μ΅œμ’…μ μœΌλ‘œ λ…Έλ“œ(nodes)둜 λ³€ν™˜λ˜μ–΄ 계측적인 DOM 트리λ₯Ό ν˜•μ„±ν•©λ‹ˆλ‹€ [1, 6]. μ‹œμž‘ νƒœκ·Έ(startTag)와 μ’…λ£Œ νƒœκ·Έ(endTag) 사이에 λ‹€λ₯Έ νƒœκ·Έλ“€μ΄ ν¬ν•¨λ˜λŠ” λ°©μ‹μœΌλ‘œ λ…Έλ“œ κ°„μ˜ 계측 ꡬ쑰가 μ •μ˜λ©λ‹ˆλ‹€ [6]. - **트리 ꡬ쑰와 ꡬ성 (Tree Structure and Composition)** DOM νŠΈλ¦¬λŠ” λ¬Έμ„œμ˜ μ½˜ν…μΈ λ₯Ό λ¬˜μ‚¬ν•˜λ©°, `` μš”μ†Œκ°€ 트리 ꡬ쑰의 첫 번째 μš”μ†Œμ΄μž 루트(root) λ…Έλ“œκ°€ λ©λ‹ˆλ‹€ [4]. λ‹€λ₯Έ μš”μ†Œ μ•ˆμ— μ€‘μ²©λœ μš”μ†Œλ“€μ€ μžμ‹ λ…Έλ“œ(child nodes)κ°€ λ˜μ–΄ 트리 λ‚΄λΆ€μ—μ„œ 각 μš”μ†Œμ˜ 관계와 계측을 λ°˜μ˜ν•©λ‹ˆλ‹€ [4]. μƒμ„±λœ DOM νŠΈλ¦¬λŠ” 이후 μŠ€νƒ€μΌ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” [[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]]κ³Ό κ²°ν•©ν•˜μ—¬ 화면에 그렀질 μš”μ†Œλ₯Ό κ²°μ •ν•˜λŠ” λ Œλ” 트리([[Render Tree|Render Tree]])λ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€ [7, 8]. - **μ„±λŠ₯에 λ―ΈμΉ˜λŠ” 영ν–₯ (Performance Implications)** DOM 트리의 κΉŠμ΄μ™€ λ³΅μž‘μ„±μ€ λΈŒλΌμš°μ €μ˜ μ„±λŠ₯κ³Ό μ§κ²°λ©λ‹ˆλ‹€ [9]. DOM에 μ‘΄μž¬ν•˜λŠ” λ…Έλ“œμ˜ μˆ˜κ°€ λ§Žμ•„μ§ˆμˆ˜λ‘ λ Œλ” 트리 생성, λ ˆμ΄μ•„μ›ƒ(Layout), 페인트(Paint)와 같은 μ€‘μš” λ Œλ”λ§ 경둜([[Critical Rendering Path|Critical Rendering Path]])의 후속 μž‘μ—…μ— μ†Œμš”λ˜λŠ” μ‹œκ°„κ³Ό μ—°μ‚° 뢀담이 μ»€μ§€κ²Œ λ©λ‹ˆλ‹€ [3, 4, 9]. - **직접적인 DOM μ‘°μž‘μ˜ ν•œκ³„ (Limitations of Direct DOM Manipulation)** μžλ°”μŠ€ν¬λ¦½νŠΈ 등을 톡해 DOM을 직접 λ³€κ²½ν•˜λŠ” μž‘μ—…μ€ λΈŒλΌμš°μ €μ˜ λ ˆμ΄μ•„μ›ƒ(Reflow)κ³Ό 페인트 단계λ₯Ό μ§€μ†μ μœΌλ‘œ νŠΈλ¦¬κ±°ν•˜κΈ° λ•Œλ¬Έμ— 본질적으둜 속도가 느리고 λΉ„μš©μ΄ 많이 λ“­λ‹ˆλ‹€ [10]. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ³΅μž‘ν•΄μ§ˆ 경우 μ—¬λŸ¬ λ…Έλ“œλ₯Ό κ°œλ³„μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λ©΄ 쀑볡 연산이 λ°œμƒν•˜λ©°, μ΄λŠ” React와 같은 ν”„λ ˆμž„μ›Œν¬κ°€ 가상 DOM([[Virtual DOM|Virtual DOM]])을 λ„μž…ν•˜κ²Œ 된 핡심 배경이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [10]. ## πŸ”— Knowledge Connections - **Related Topics:** [[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]], Critical Rendering Path(CRP), Render Tree, [[Virtual DOM|Virtual DOM]], Reflow / Repaint - **Projects/Contexts:** λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ • ([[Browser|Browser]] Rendering Process), ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ μ΅œμ ν™” 및 React의 Virtual DOM λ„μž… λ°°κ²½ 이해 [7, 10, 11] - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ λͺ¨μˆœλœ μ •λ³΄λŠ” μ—†μŠ΅λ‹ˆλ‹€. 참고둜 DOM의 생성은 점진적(incremental)으둜 μ§„ν–‰λ˜μ–΄ λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•˜λŠ” λ™μ•ˆμ—λ„ 화면을 그리기 μ‹œμž‘ν•  수 μžˆμ§€λ§Œ, [[CSSOM|CSSOM]]의 생성은 λ Œλ”λ§μ„ 차단(render-[[Blocking|Blocking]])ν•œλ‹€λŠ” μ μ—μ„œ 두 λͺ¨λΈμ˜ ꡬ좕 방식에 차이가 μžˆμŠ΅λ‹ˆλ‹€ [3, 9]. --- *Last updated: 2026-04-25*