--- id: P-REINFORCE-AUTO-590D6E category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - λΈŒλΌμš°μ € DOM λˆ„μˆ˜ 탐지 및 λ Œλ”λ§ μ΅œμ ν™”" --- # [[λΈŒλΌμš°μ € DOM λˆ„μˆ˜ 탐지 및 λ Œλ”λ§ μ΅œμ ν™”]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **DOM λˆ„μˆ˜μ˜ 원리 및 μ£Όμš” λ°œμƒ νŒ¨ν„΄** * λΈŒλΌμš°μ € μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λŠ” λ©”λͺ¨λ¦¬κ°€ 'μ‚¬λΌμ§€λŠ”' 것이 μ•„λ‹ˆλΌ, GC 루트(window, ν™œμ„± ν΄λ‘œμ €, 이벀트 λ¦¬μŠ€λ„ˆ λ“±)μ—μ„œ 계속 μ ‘κ·Ό κ°€λŠ₯ν•œ μƒνƒœλ‘œ λ‚¨μ•„μžˆμ–΄ κ°€λΉ„μ§€ 컬렉터가 νšŒμˆ˜ν•˜μ§€ λͺ»ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€ [1]. * κ°€μž₯ λŒ€ν‘œμ μΈ νŒ¨ν„΄μ€ 'λΆ„λ¦¬λœ DOM λ…Έλ“œ(Detached DOM nodes)'μž…λ‹ˆλ‹€. μ΄λŠ” λ¬Έμ„œ(Document)μ—μ„œλŠ” μ œκ±°λ˜μ—ˆμœΌλ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜λ‚˜ Map/Set μ—”νŠΈλ¦¬μ— μ˜ν•΄ μ°Έμ‘°κ°€ μœ μ§€λ˜μ–΄, ν•΄λ‹Ή μš”μ†Œμ™€ κ·Έ ν•˜μœ„ 트리 전체가 λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆλŠ” ν˜„μƒμž…λ‹ˆλ‹€ [2, 7]. * 이 외에도 ν•΄μ œλ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆ, μ—¬λŸ¬ ν΄λ‘œμ €κ°€ λ™μΌν•œ μŠ€μ½”ν”„λ₯Ό κ³΅μœ ν•  λ•Œ λ°œμƒν•˜λŠ” ν΄λ‘œμ € μŠ€μ½”ν”„ 보쑴(Closure scope retention), 그리고 제거된 νƒ€κ²Ÿμ„ κ°€λ¦¬ν‚€λŠ” μžŠν˜€μ§„ 타이머(setInterval)와 μ˜΅μ €λ²„(MutationObserver λ“±)κ°€ μ£Όμš” λˆ„μˆ˜ μ›μΈμž…λ‹ˆλ‹€ [8, 9]. * 단일 νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA)의 라우트 μ „ν™˜ μ‹œ 이전 라우트의 μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬μŠ€λ„ˆλ‚˜ μ „μ—­ μƒνƒœ μ°Έμ‘°λ₯Ό μ œλŒ€λ‘œ μ •λ¦¬ν•˜μ§€ λͺ»ν•˜λŠ” 것이 κ°€μž₯ 큰 λˆ„μˆ˜ λ°œμƒ μΆœμ²˜μž…λ‹ˆλ‹€ [10]. **λΈŒλΌμš°μ € DOM λˆ„μˆ˜ 탐지 기법** * **3단계 μŠ€λƒ…μƒ· 기법 (Three-snapshot technique):** λˆ„μˆ˜λ₯Ό νƒμ§€ν•˜λŠ” κ°€μž₯ μ‹ λ’°ν•  수 μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€. 베이슀라인 μŠ€λƒ…μƒ·μ„ 찍고, λˆ„μˆ˜κ°€ μ˜μ‹¬λ˜λŠ” μ•‘μ…˜μ„ μˆ˜ν–‰ν•œ λ’€ 두 번째 μŠ€λƒ…μƒ·μ„ 찍으며, λ™μΌν•œ μ•‘μ…˜μ„ λ°˜λ³΅ν•œ λ’€ μ„Έ 번째 μŠ€λƒ…μƒ·μ„ 찍어 두 λ²ˆμ§Έμ™€ μ„Έ 번째 μŠ€λƒ…μƒ·μ„ λΉ„κ΅ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [11]. * **Chrome DevTools의 νž™ μŠ€λƒ…μƒ· (Heap snapshot):** νŠΉμ • μ‹œμ μ˜ 전체 객체 κ·Έλž˜ν”„λ₯Ό μΊ‘μ²˜ν•©λ‹ˆλ‹€. 'Comparison(비ꡐ)' λ·°λ₯Ό 톡해 μŠ€λƒ…μƒ· κ°„μ˜ 차이λ₯Ό ν™•μΈν•˜κ±°λ‚˜, 'Retained Size' κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜μ—¬ κ°€μž₯ 큰 λˆ„μˆ˜ 객체λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 12, 13]. ν•„ν„° κΈ°λŠ₯ 쀑 "Objects retained by detached nodes(λΆ„λ¦¬λœ λ…Έλ“œμ— μ˜ν•΄ 보쑴된 객체)"λ₯Ό μ‚¬μš©ν•˜λ©΄ DOM λˆ„μˆ˜λ₯Ό μ‰½κ²Œ 식별할 수 μžˆμŠ΅λ‹ˆλ‹€ [14]. * **ν• λ‹Ή νƒ€μž„λΌμΈ (Allocation instrumentation on timeline):** 일정 κΈ°κ°„ λ™μ•ˆμ˜ λͺ¨λ“  λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό μŠ€νƒ 트레이슀λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€ [3, 15]. νŒŒλž€μƒ‰ λ§‰λŒ€λŠ” νƒ€μž„λΌμΈμ΄ 끝날 λ•ŒκΉŒμ§€ μ—¬μ „νžˆ μ‚΄μ•„μžˆλŠ” 객체λ₯Ό λ‚˜νƒ€λ‚΄λ©°, 이λ₯Ό λΆ„μ„ν•˜μ—¬ μ˜ˆμƒ 수λͺ…을 μ΄ˆκ³Όν•˜μ—¬ 남겨진 객체와 ν•΄λ‹Ή 객체가 μƒμ„±λœ μ •ν™•ν•œ μ½”λ“œ μœ„μΉ˜λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 16, 17]. * λˆ„μˆ˜ 쑰사 μ‹œμ—λŠ” `console.log`κ°€ 객체 μ°Έμ‘°λ₯Ό μœ μ§€ν•  수 μžˆλ‹€λŠ” 점과, λ―Έλ‹ˆνŒŒμ΄(Minify)된 μ½”λ“œλŠ” 뢄석이 μ–΄λ €μš°λ―€λ‘œ μ†ŒμŠ€ λ§΅(Source maps)을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λŠ” μ£Όμ˜μ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€ [10]. **κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC)κ³Ό λ Œλ”λ§ μ„±λŠ₯의 상관관계** * κ°€λΉ„μ§€ 컬렉터가 λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•  λ•ŒλŠ” 메인 μŠ€λ ˆλ“œμ˜ 싀행을 μΌμ‹œμ μœΌλ‘œ λ©ˆμΆ”λŠ” 'Stop-the-world' ν˜„μƒμ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 18]. λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•΄μ§€κ±°λ‚˜ λˆ„μˆ˜κ°€ λˆ„μ λ˜λ©΄ GCκ°€ 자주, 길게 μ‹€ν–‰λ˜λŠ”λ°, μ΄λŠ” μΈν„°λž™ν‹°λΈŒ μ‹œμŠ€ν…œμ΄λ‚˜ μ• λ‹ˆλ©”μ΄μ…˜ μ‹€ν–‰ μ‹œ μ‚¬μš©μžμ—κ²Œ λΆˆμΎŒν•œ λŠκΉ€ ν˜„μƒ(Jank)κ³Ό λ Œλ”λ§ 지연을 μœ λ°œν•©λ‹ˆλ‹€ [5, 6]. * V8 엔진은 μ΄λŸ¬ν•œ 메인 μŠ€λ ˆλ“œμ˜ λ Œλ”λ§ 및 μ‹€ν–‰ 지연을 μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ 'Orinoco' κ°€λΉ„μ§€ 컬렉터λ₯Ό λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€ [19]. μ΄λŠ” 병렬(Parallel), 점진적(Incremental), λ™μ‹œ(Concurrent) 기법을 ν™œμš©ν•˜μ—¬ λŒ€λΆ€λΆ„μ˜ GC μž‘μ—…μ„ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ 메인 μŠ€λ ˆλ“œκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜κ³  화면을 μ›ν™œνžˆ λ Œλ”λ§ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€ [20-23]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection (GC)]], [[Chrome DevTools]], [[Detached DOM nodes]], [[Heap Snapshot]], [[Orinoco GC]] - **Projects/Contexts:** [[V8 JavaScript Engine]], [[Single Page Applications (SPA)]] - **Contradictions/Notes:** μ†ŒμŠ€μ—λŠ” λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 탐지 방법과 V8 μ—”μ§„μ˜ κ°€λΉ„μ§€ 컬렉터 λ™μž‘ 원리에 λŒ€ν•œ μ •λ³΄λŠ” 맀우 μƒμ„Έν•˜κ²Œ μ„€λͺ…λ˜μ–΄ μžˆμœΌλ‚˜, λ ˆμ΄μ•„μ›ƒ μ—°μ‚°, νŽ˜μΈνŒ… κ·œμΉ™, CSS μ΅œμ ν™” λ“± λΈŒλΌμš°μ €μ˜ 순수 'λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈ μ΅œμ ν™”'와 κ΄€λ ¨λœ 직접적인 μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ Œλ”λ§ μ΅œμ ν™”λŠ” 주둜 'λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€λ₯Ό ν†΅ν•œ GC Pause(Jank) μ΅œμ†Œν™”'의 κ΄€μ μ—μ„œλ§Œ λ‹€λ£¨μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/λΈŒλΌμš°μ € DOM λˆ„μˆ˜ 탐지 및 λ Œλ”λ§ μ΅œμ ν™”.md]] ---