# [[Detached DOM Nodes]] ## πŸ“Œ Brief Summary Detached DOM Nodes(λΆ„λ¦¬λœ DOM λ…Έλ“œ)λž€ νŽ˜μ΄μ§€μ˜ DOM νŠΈλ¦¬μ—μ„œλŠ” μ œκ±°λ˜μ—ˆμœΌλ‚˜, μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ λ‚΄μ—μ„œ μ—¬μ „νžˆ μ°Έμ‘°λ₯Ό μœ μ§€ν•˜κ³  μžˆμ–΄ κ°€λΉ„μ§€ μˆ˜μ§‘(Garbage Collected) λŒ€μƒμ΄ λ˜μ§€ λͺ»ν•˜λŠ” DOM μš”μ†Œλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€ [1, 2]. μ΄λŸ¬ν•œ λ…Έλ“œλŠ” λΆˆν•„μš”ν•˜κ²Œ λ©”λͺ¨λ¦¬λ₯Ό 계속 μ μœ ν•˜κ²Œ λ˜μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„±λŠ₯ μ €ν•˜μ™€ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λ₯Ό μΌμœΌν‚€λŠ” μ£Όμš” 원인이 λ©λ‹ˆλ‹€ [1]. κ°œλ°œμžλŠ” Chrome DevTools의 νž™ μŠ€λƒ…μƒ·(Heap Snapshots)κ³Ό 같은 ν”„λ‘œνŒŒμΌλ§ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 λ…Έλ“œλ“€μ„ μ‹λ³„ν•˜κ³  디버깅할 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. ## πŸ“– Core Content * **λ°œμƒ 원리 및 μ •μ˜:** DOM λ…Έλ“œλŠ” νŽ˜μ΄μ§€μ˜ DOM νŠΈλ¦¬μ™€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ μ–‘μͺ½ λͺ¨λ‘μ—μ„œ μ°Έμ‘°κ°€ 없을 λ•Œλ§Œ κ°€λΉ„μ§€ μˆ˜μ§‘κΈ°λ‘œλΆ€ν„° 회수될 수 μžˆμŠ΅λ‹ˆλ‹€ [1]. λ§Œμ•½ λ¬Έμ„œ(Document)μ—μ„œλŠ” λ…Έλ“œκ°€ μ‚­μ œλ˜μ—ˆμ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜λ‚˜ 객체가 ν•΄λ‹Ή λ…Έλ“œλ₯Ό 계속 μ°Έμ‘°ν•˜κ³  μžˆλ‹€λ©΄, κ·Έ λ…Έλ“œλŠ” 'λΆ„λ¦¬λœ(Detached)' μƒνƒœκ°€ λ˜μ–΄ λ©”λͺ¨λ¦¬μ— μž”λ₯˜ν•©λ‹ˆλ‹€ [1]. * **μ»΄ν¬λ„ŒνŠΈ ν™˜κ²½μ—μ„œμ˜ μ£Όμš” 원인:** React와 같은 λͺ¨λ˜ μ»΄ν¬λ„ŒνŠΈ 기반 UI κ°œλ°œμ—μ„œ 맀우 λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€ [2]. 주둜 μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ  λ•Œ `useEffect`의 λ°˜ν™˜ ν•¨μˆ˜(cleanup ν•¨μˆ˜)μ—μ„œ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ œκ±°ν•˜μ§€ μ•Šκ±°λ‚˜ μƒνƒœ ꡬ독을 ν•΄μ œν•˜μ§€ μ•Šμ•„, 더 이상 화면에 보이지 μ•ŠλŠ” DOM μš”μ†Œκ°€ λ©”λͺ¨λ¦¬μ— λ¬Άμ—¬ 있게 λ˜λŠ” κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€ [2, 3]. λ˜ν•œ, ν΄λ‘œμ €(Closure)κ°€ λΆ€λͺ¨ μŠ€μ½”ν”„μ˜ λ³€μˆ˜λ₯Ό 살렀두어 λΆˆν•„μš”ν•˜κ²Œ 큰 객체(DOM 포함)의 μ°Έμ‘°λ₯Ό μœ μ§€ν•˜λŠ” νŒ¨ν„΄λ„ 원인이 λ©λ‹ˆλ‹€ [5]. * **진단 및 뢄석 기법:** * **νž™ μŠ€λƒ…μƒ·(Heap Snapshots):** Chrome DevTools의 Memory νŒ¨λ„μ„ μ‚¬μš©ν•΄ νŠΉμ • μ‹œμ μ˜ λ©”λͺ¨λ¦¬ μƒνƒœλ₯Ό μŠ€λƒ…μƒ·μœΌλ‘œ 찍을 수 μžˆμŠ΅λ‹ˆλ‹€ [4]. μ‚¬μš©μž μ•‘μ…˜ μ „ν›„λ‘œ μŠ€λƒ…μƒ·μ„ μΊ‘μ²˜ν•œ λ’€ 이λ₯Ό 비ꡐ(Comparison view)ν•˜κ³ , 클래슀 필터에 'Detached'λ₯Ό κ²€μƒ‰ν•˜μ—¬ λ©”λͺ¨λ¦¬μ— 고립된 DOM 트리λ₯Ό μ°Ύμ•„λƒ…λ‹ˆλ‹€ [2-4, 6]. * **객체 식별 및 μ°Έμ‘° 경둜:** μŠ€λƒ…μƒ·μ˜ Objects μ°½μ—μ„œ ν•΄λ‹Ή λΆ„λ¦¬λœ λ…Έλ“œλ₯Ό ν΄λ¦­ν•˜λ©΄, `detachedTree`와 같이 이 λ…Έλ“œλ₯Ό λΆ™μž‘κ³  μžˆλŠ” μ‹€μ œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ [7]. GC 루트(GC root)λ‘œλΆ€ν„°μ˜ 거리(Distance)λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ ν•΄λ‹Ή 객체λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œν•˜κΈ° μœ„ν•΄ μ–΄λ–€ μ°Έμ‘° 체인을 λŠμ–΄μ•Ό ν•˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **Detached Elements ν”„λ‘œν•„:** 'Detached elements' ν”„λ‘œνŒŒμΌμ„ κΈ°λ‘ν•˜μ—¬ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” λΆ„λ¦¬λœ μ •ν™•ν•œ HTML λ…Έλ“œμ™€ κ·Έ 개수λ₯Ό 확인할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ [8]. ## βš–οΈ Trade-offs & Caveats μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜μ— DOM λ…Έλ“œλ₯Ό μ˜λ„μ μœΌλ‘œ λ³΄κ΄€ν•˜λŠ” 것은 λΉ λ₯Έ DOM μ‘°μž‘μ΄λ‚˜ μž¬μ‚¬μš©μ„ μœ„ν•œ 캐싱(Caching) μ „λž΅ λ“± μ„±λŠ₯ μ΅œμ ν™”μ˜ 기술적 선택일 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 방식은 μ μ ˆν•œ μ‹œμ μ— μ°Έμ‘°λ₯Ό ν•΄μ œν•˜μ§€ μ•Šμ„ 경우 치λͺ…적인 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λ₯Ό μœ λ°œν•œλ‹€λŠ” λšœλ ·ν•œ μ œμ•½ μ‚¬ν•­μ΄μž λΆ€μž‘μš©(Caveat)을 κ°–μŠ΅λ‹ˆλ‹€ [1, 7, 9]. 특히 νž™ μŠ€λƒ…μƒ·(Heap Snapshot)μ΄λ‚˜ ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline)을 톡해 λΆ„λ¦¬λœ DOM λ…Έλ“œλ₯Ό μΆ”μ ν•˜λŠ” 과정은 디버깅 κ΄€μ μ—μ„œ 맀우 κ°•λ ₯ν•˜μ§€λ§Œ, μŠ€λƒ…μƒ· 생성과 뢄석에 μ‹œκ°„μ΄ μ†Œμš”λ˜λ©° μ‹€μ‹œκ°„μœΌλ‘œ λ©”λͺ¨λ¦¬ 할당을 λͺ¨λ‹ˆν„°λ§ν•˜λŠ” 경우 λΈŒλΌμš°μ € μ„±λŠ₯에 λΆ€ν•˜λ₯Ό 쀄 수 μžˆλ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€ [4, 10]. (이외에 λΆ„λ¦¬λœ DOM λ…Έλ“œλ₯Ό ν™œμš©ν•˜λŠ” 기술적 선택에 λ”°λ₯Έ λ°˜λŒ€ 급뢀에 κ΄€ν•΄μ„œλŠ” μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λ‹€μ†Œ λΆ€μ‘±ν•©λ‹ˆλ‹€.) ## πŸ”— Knowledge Connections ### Related Concepts #### [문제 원인 및 ν˜„μƒ (Problem & Symptoms)] * [[Memory Leaks]] * μ—°κ²° 이유: λΆ„λ¦¬λœ DOM λ…Έλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ν™˜κ²½μ—μ„œ λ°œμƒν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ˜ κ°€μž₯ ν”ν•œ ν˜•νƒœ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€ [1]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: κ°€λΉ„μ§€ 컬렉터가 μˆ˜μ§‘ν•˜μ§€ λͺ»ν•œ λ©”λͺ¨λ¦¬κ°€ λˆ„μ λ˜λ©΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 속도가 λŠλ €μ§€κ³  κ²°κ΅­ νƒ­μ΄λ‚˜ 앱이 λ©ˆμΆ”κ±°λ‚˜ 좩돌(crash)ν•˜λŠ” ν˜„μƒ 및 κ·Έ 진단 방법 [9, 11]. * [[Garbage Collection]] * μ—°κ²° 이유: λΆ„λ¦¬λœ DOM λ…Έλ“œκ°€ 계속 λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•˜λŠ” 근본적인 μ΄μœ κ°€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ λ™μž‘ 방식과 μ—°κ΄€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ [1, 9]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 더 이상 μ°Έμ‘°(Reference)κ°€ μ—†λŠ” λ©”λͺ¨λ¦¬λ§Œ νšŒμˆ˜ν•œλ‹€λŠ” 원칙과, μ°Έμ‘°κ°€ μ–΄λ–»κ²Œ μœ μ§€λ˜λŠ”μ§€μ— λŒ€ν•œ λ©”λͺ¨λ¦¬ 관리 λ©”μ»€λ‹ˆμ¦˜ [9]. #### [뢄석 및 디버깅 도ꡬ (Analysis & Debugging Tools)] * [[Heap Snapshots]] * μ—°κ²° 이유: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄ λΆ„λ¦¬λœ DOM 트리λ₯Ό μ°Ύμ•„λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 핡심 λ„κ΅¬μž…λ‹ˆλ‹€ [4]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: νŠΉμ • μˆœκ°„μ˜ λ©”λͺ¨λ¦¬ μƒνƒœλ₯Ό 찍어 μ‚¬μš©μž λ™μž‘ μ „ν›„μ˜ λ³€ν™”λŸ‰(Delta)을 λΉ„κ΅ν•˜κ³ , μ–΄λ– ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜(Retainers)κ°€ 객체의 수λͺ…을 μ—°μž₯ν•˜κ³  μžˆλŠ”μ§€ νŒŒμ•…ν•˜λŠ” 싀무적인 ν”„λ‘œνŒŒμΌλ§ 기법 [3, 5, 6]. * [[Chrome DevTools Memory Panel]] * μ—°κ²° 이유: νž™ μŠ€λƒ…μƒ· 뢄석, Allocation Timeline 기둝 및 Detached elements ν”„λ‘œν•„μ„ μ‹€ν–‰ν•  수 μžˆλŠ” λΈŒλΌμš°μ € λ‚΄μž₯ 디버깅 ν™˜κ²½μž…λ‹ˆλ‹€ [4, 8, 10]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ νž™ λ©”λͺ¨λ¦¬λ₯Ό λ‹€μ–‘ν•œ 방법(μ‹€μ‹œκ°„ ν• λ‹Ή 좔적, ν•¨μˆ˜λ³„ λ©”λͺ¨λ¦¬ ν• λ‹Ή, GC λ°œμƒ λΉˆλ„)으둜 λͺ¨λ‹ˆν„°λ§ν•˜κ³  λΆ„μ„ν•˜λŠ” μ „λ°˜μ μΈ ν”„λ‘œμ„ΈμŠ€ [8, 10, 12]. ### Deeper Research Questions * λͺ¨λ˜ μ»΄ν¬λ„ŒνŠΈ ν”„λ ˆμž„μ›Œν¬(예: React)μ—μ„œ DOM 이벀트 λ¦¬μŠ€λ„ˆ λˆ„μ κ³Ό ν΄λ‘œμ € μ°Έμ‘° 외에 λΆ„λ¦¬λœ DOM λ…Έλ“œλ₯Ό κ°€μž₯ 자주 μœ λ°œν•˜λŠ” μ•ˆν‹° νŒ¨ν„΄μ€ 무엇인가? [2, 3, 5] * μ˜λ„μ μΈ DOM λ…Έλ“œ 캐싱(Caching)을 ν†΅ν•œ λ Œλ”λ§ μ„±λŠ₯ μ΅œμ ν™”μ™€ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(λΆ„λ¦¬λœ DOM λ…Έλ“œ) μ‚¬μ΄μ˜ 경계λ₯Ό μ‹œμŠ€ν…œ 섀계 κ΄€μ μ—μ„œ μ–΄λ–»κ²Œ μ‘°μœ¨ν•  수 μžˆλŠ”κ°€? [1, 9] * νž™ μŠ€λƒ…μƒ·(Heap Snapshots)의 'Retainers' νŒ¨λ„μ—μ„œ λ³΄μ—¬μ£ΌλŠ” GC 루트(GC Root)λ‘œλΆ€ν„°μ˜ 거리(Distance) μ •λ³΄λŠ” μ°Έμ‘° 연결을 ν•΄μ œν•  λ•Œ μ–΄λ–€ ꡬ체적인 지침을 μ œκ³΅ν•˜λŠ”κ°€? [5] * μžλ™ν™”λœ CI(Continuous Integration) νŒŒμ΄ν”„λΌμΈμ—μ„œ Puppeteer 등을 ν™œμš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΆ„λ¦¬λœ DOM λ…Έλ“œ λ°œμƒ(λ©”λͺ¨λ¦¬ λˆ„μˆ˜) μ—¬λΆ€λ₯Ό μ„ μ œμ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κ³  λ°©μ§€ν•˜λŠ” ꡬ체적인 νŒŒμ΄ν”„λΌμΈ ꡬ성 방법은 무엇인가? [13] * λ©”λͺ¨λ¦¬ μΊμ‹œ 관리λ₯Ό μœ„ν•΄ 일반 객체(Object) λŒ€μ‹  `WeakMap`을 μ‚¬μš©ν•˜λŠ” 것이 λΆ„λ¦¬λœ DOM λ…Έλ“œμ™€ 같은 λˆ„μˆ˜ 문제λ₯Ό μ˜ˆλ°©ν•˜λŠ” 데 μ–΄λ–»κ²Œ κΈ°μ—¬ν•˜λŠ”κ°€? [13] ### Practical Application Contexts * **Implementation:** React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 쀑, `useEffect` λ‚΄λΆ€μ—μ„œ μΆ”κ°€ν•œ 타이머, ꡬ독(subscription), 이벀트 λ¦¬μŠ€λ„ˆ 등은 μ»΄ν¬λ„ŒνŠΈ μ–Έλ§ˆμš΄νŠΈ μ‹œ λ°˜ν™˜ν•˜λŠ” cleanup ν•¨μˆ˜μ—μ„œ λ°˜λ“œμ‹œ μ œκ±°ν•˜μ—¬ DOM λ…Έλ“œκ°€ λ©”λͺ¨λ¦¬μ— κ³ λ¦½λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€ [3, 13]. * **System Design:** μΊμ‹œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ DOM μš”μ†Œλ‚˜ 큰 객체λ₯Ό λ©”λͺ¨λ¦¬μ— 보관해야 ν•œλ‹€λ©΄, μ°Έμ‘°κ°€ 없을 λ•Œ μžλ™μœΌλ‘œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ λ˜λ„λ‘ `WeakMap`을 ν™œμš©ν•˜λŠ” 섀계 νŒ¨ν„΄μ„ λ„μž…ν•©λ‹ˆλ‹€ [13]. * **Operation / Maintenance:** μž₯μ‹œκ°„ μ‹€ν–‰λ˜λŠ” νƒ­μ—μ„œ 속도 μ €ν•˜ 버그 λ¦¬ν¬νŠΈκ°€ λ°œμƒν•  경우, μœ μ§€λ³΄μˆ˜ κ°œλ°œμžλŠ” Chrome DevToolsλ₯Ό μ—΄κ³  κ°•μ œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(νœ΄μ§€ν†΅ μ•„μ΄μ½˜ 클릭)을 μˆ˜ν–‰ν•œ λ’€, μ˜μ‹¬λ˜λŠ” μ•‘μ…˜ μ „ν›„μ˜ νž™ μŠ€λƒ…μƒ·μ„ 찍고 λΉ„κ΅ν•˜μ—¬ μž”λ₯˜ν•œ "Detached" λ…Έλ“œλ“€μ„ μƒ‰μΆœν•˜λŠ” 디버깅 μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€ [4, 6]. * **Learning Path:** ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ μ΅œμ ν™” ν•™μŠ΅ λ‹¨κ³„μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜κ³Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ˜ κΈ°λ³Έ 원리λ₯Ό ν•™μŠ΅ν•œ λ‹€μŒ, Chrome DevTools μ‚¬μš©λ²•μ„ μ΅ν˜€ μ‹€μ œ μž‘μ„±ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‘΄μž¬ν•˜λŠ” λΆ„λ¦¬λœ DOM λ…Έλ“œλ₯Ό μ‹œκ°μ μœΌλ‘œ μ‹λ³„ν•˜κ³  μ œκ±°ν•΄ λ³΄λŠ” κ³Όμ •μœΌλ‘œ ν•™μŠ΅μ„ μ „κ°œν•©λ‹ˆλ‹€ [1, 6, 9]. * **My Project Relevance:** ν˜„μž¬ μ§„ν–‰ 쀑인 ν”„λ‘ νŠΈμ—”λ“œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ΅œμ ν™” μž‘μ—… 쀑, λΌμš°νŒ… λ³€κ²½μ΄λ‚˜ λͺ¨λ‹¬ 창을 μ—΄κ³  닫을 λ•Œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 계속 μ¦κ°€ν•œλ‹€λ©΄ λ©”λͺ¨λ¦¬ ν”„λ‘œνŒŒμΌλ§ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ„λ¦¬λœ DOM νŠΈλ¦¬κ°€ λ°œμƒν•˜κ³  μžˆλŠ”μ§€ μ¦‰μ‹œ μ§„λ‹¨ν•˜κ³  ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### Adjacent Topics * [[Performance Profiling]] * ν™•μž₯ λ°©ν–₯: λΆ„λ¦¬λœ DOM λ…Έλ“œ 탐지 같은 λ©”λͺ¨λ¦¬ 이슈 외에도 크둬 DevTools의 Performance 탭을 μ΄μš©ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ μ‹œκ°„, κΈ΄ μž‘μ—…(Long tasks), λ Œλ”λ§(paint) μ§€μ—° λ“± μ „λ°˜μ μΈ ν”„λ‘ νŠΈμ—”λ“œ μ‹€ν–‰ μ„±λŠ₯ 병λͺ©μ„ μ°Ύμ•„λ‚΄λŠ” κΈ°λ²•μœΌλ‘œ ν™•μž₯ν•©λ‹ˆλ‹€ [14, 15]. * [[React Component Lifecycle Cleanup]] * ν™•μž₯ λ°©ν–₯: React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŠΉμ„±μƒ, 이벀트 λ¦¬μŠ€λ„ˆλ‚˜ μ™ΈλΆ€ μƒνƒœ ꡬ독을 ν•΄μ œν•˜μ§€ μ•ŠλŠ” λ“± μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ° 관리 μ‹€νŒ¨κ°€ λΆ„λ¦¬λœ DOM λ…Έλ“œλ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ μ»΄ν¬λ„ŒνŠΈ ν•΄μ œ νŒ¨ν„΄ 및 Hooks(`useEffect`) ν™œμš©λ²•μ„ 깊이 있게 νŒŒμ•…ν•©λ‹ˆλ‹€ [3, 13]. --- *Last updated: 2026-04-30*