# [[Memory Leak]] ## πŸ“Œ Brief Summary λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œ ν›„ 더 이상 ν•„μš”ν•˜μ§€ μ•ŠμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  이λ₯Ό ν•΄μ œν•˜μ§€ μ•Šμ•„ λ©”λͺ¨λ¦¬μ— 계속 μΆ•μ λ˜λŠ” ν˜„μƒμ΄λ‹€ [1]. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ°€λΉ„μ§€ 컬렉터(Garbage Collector)λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ νšŒμˆ˜ν•˜μ§€λ§Œ, λ³€μˆ˜ 등에 μ°Έμ‘°κ°€ λ‚¨μ•„μžˆμ„ 경우 이λ₯Ό νšŒμˆ˜ν•  수 μ—†μ–΄ λˆ„μˆ˜κ°€ λ°œμƒν•œλ‹€ [1]. 이둜 인해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž₯μ‹œκ°„ μ‚¬μš©ν• μˆ˜λ‘ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μ μ§„μ μœΌλ‘œ μ¦κ°€ν•˜λ©°, μ„±λŠ₯ μ €ν•˜, νƒ­μ˜ 멈좀 ν˜„μƒ, μ‹¬κ°ν•œ 경우 μ•± 좩돌(Crash)을 μœ λ°œν•˜κ²Œ λœλ‹€ [2-4]. ## πŸ“– Core Content * **λ°œμƒ λ©”μ»€λ‹ˆμ¦˜κ³Ό μ£Όμš” 원인 νŒ¨ν„΄** μžλ°”μŠ€ν¬λ¦½νŠΈ 및 React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λŠ” 주둜 λΆˆν•„μš”ν•˜κ²Œ λ‚¨μ•„μžˆλŠ” μ°Έμ‘°(Reference) λ•Œλ¬Έμ— λ°œμƒν•œλ‹€ [1]. λŒ€ν‘œμ μΈ νŒ¨ν„΄μ€ λ‹€μŒκ³Ό κ°™λ‹€. * **λΆ„λ¦¬λœ DOM λ…Έλ“œ(Detached DOM Nodes):** DOM νŠΈλ¦¬μ—μ„œλŠ” μ œκ±°λ˜μ—ˆμœΌλ‚˜, μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ λ‚΄μ˜ λ³€μˆ˜ λ“±μ—μ„œ μ—¬μ „νžˆ ν•΄λ‹Ή λ…Έλ“œλ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ–΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ λΆˆκ°€λŠ₯ν•œ κ²½μš°μ΄λ‹€ [5, 6]. * **이벀트 λ¦¬μŠ€λ„ˆ λˆ„μ (Event Listener Accumulation):** μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈ(Unmount)될 λ•Œ λ“±λ‘λ˜μ—ˆλ˜ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό 적절히 ν•΄μ œν•˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬μ— 계속 μŒ“μ΄κ²Œ λœλ‹€ [6]. React의 경우 `useEffect` λ‚΄μ—μ„œ ꡬ독(Subscription)μ΄λ‚˜ λ¦¬μŠ€λ„ˆλ₯Ό μƒμ„±ν•œ λ’€ 정리(Cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•Šμ„ λ•Œ λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•œλ‹€ [7-9]. * **ν΄λ‘œμ €λ₯Ό ν†΅ν•œ μ°Έμ‘° μœ μ§€(Closure-Retained References):** μžλ°”μŠ€ν¬λ¦½νŠΈ ν΄λ‘œμ €κ°€ λΆ€λͺ¨ μŠ€μ½”ν”„μ˜ λ³€μˆ˜λ₯Ό 계속 살렀두어, λΆˆν•„μš”ν•˜κ²Œ κ±°λŒ€ν•œ 객체가 λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€ [10]. * **진단 및 뢄석 방법** λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄ Chrome DevTools의 Memory νŒ¨λ„μ„ ν•΅μ‹¬μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€ [11]. * **νž™ μŠ€λƒ…μƒ·(Heap Snapshots):** νŠΉμ • μ‹œμ μ˜ λ©”λͺ¨λ¦¬ μƒνƒœλ₯Ό μ΄¬μ˜ν•˜μ—¬ 비ꡐ(Comparison view)ν•  수 μžˆλ‹€. 두 μŠ€λƒ…μƒ· μ‚¬μ΄μ—μ„œ κΎΈμ€€νžˆ μ–‘μˆ˜ 델타(Delta) 값을 κ°–λŠ” 객체λ₯Ό μ°Ύμ•„ λˆ„μˆ˜λ₯Ό νŒλ³„ν•˜λ©°, 'Detached'둜 κ²€μƒ‰ν•˜μ—¬ λΆ„λ¦¬λœ DOM 트리λ₯Ό μ°Ύμ•„λ‚Έλ‹€ [11, 12]. 객체λ₯Ό μ„ νƒν•œ ν›„ 'Retainers' νŒ¨λ„μ„ 톡해 μ–΄λ–€ μ°Έμ‘°κ°€ ν•΄λ‹Ή 객체λ₯Ό λ©”λͺ¨λ¦¬μ— λΆ™μž‘κ³  μžˆλŠ”μ§€ 좔적할 수 μžˆλ‹€ [10, 13]. * **ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timelines):** μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μƒν˜Έμž‘μš©ν•  λ•Œ μ‹€μ‹œκ°„μœΌλ‘œ λ©”λͺ¨λ¦¬ ν• λ‹Ή νŒ¨ν„΄μ„ ν™•μΈν•œλ‹€. νŒŒλž€μƒ‰ λ§‰λŒ€λ‘œ ν‘œμ‹œλœ ν• λ‹Ή 내역이 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ 후에도 νšŒμƒ‰μœΌλ‘œ λ³€ν•˜μ§€ μ•Šκ³  영ꡬ적으둜 λ‚¨λŠ”λ‹€λ©΄ λˆ„μˆ˜λ‘œ μ˜μ‹¬ν•  수 μžˆλ‹€ [14-16]. * **μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§:** Chrome μž‘μ—… κ΄€λ¦¬μž(Task Manager)λ‚˜ Performance νŒ¨λ„μ„ 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈ νž™(JS heap) ν¬κΈ°λ‚˜ λ…Έλ“œ κ°œμˆ˜κ°€ μž‘μ—… 이후에도 이전보닀 μ¦κ°€λœ μƒνƒœλ‘œ λλ‚˜λŠ”μ§€ ν™•μΈν•œλ‹€ [17-19]. * **ν•΄κ²° 및 예방 μ „λž΅** λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λΆ„λ¦¬λœ κ°μ²΄λ‚˜ λ…Έλ“œλ₯Ό μ°Έμ‘°ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜λ₯Ό μ°Ύμ•„, ν•΄λ‹Ή μ°Έμ‘°κ°€ 더 이상 ν•„μš” 없을 λ•Œ μ œκ±°ν•΄μ•Ό ν•œλ‹€ [13]. 객체 기반의 μΊμ‹œλ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ λ°©ν•΄ν•˜μ§€ μ•ŠλŠ” `WeakMap`을 μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λœλ‹€ [9]. React ν”„λ ˆμž„μ›Œν¬μ—μ„œλŠ” `useEffect` ν›…μ—μ„œ 정리(cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜κ±°λ‚˜ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ˜¬λ°”λ₯΄κ²Œ ν•΄μ œν•˜λŠ” νŒ¨ν„΄μ„ λ°˜λ“œμ‹œ μ§€μΌœμ•Ό ν•˜λ©°, CI νŒŒμ΄ν”„λΌμΈμ—μ„œ Puppeteer 등을 ν™œμš©ν•˜μ—¬ μžλ™ν™”λœ λ©”λͺ¨λ¦¬ ν…ŒμŠ€νŠΈλ₯Ό κ΅¬μΆ•ν•˜λŠ” κ²ƒμœΌλ‘œ 사전에 λ°©μ§€ν•  수 μžˆλ‹€ [7, 9]. ## βš–οΈ Trade-offs & Caveats μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. ## πŸ”— Knowledge Connections ### Related Concepts #### [λ°œμƒ 원인 및 증상 (Causes & Phenomena)] - [[Detached DOM Nodes]] - μ—°κ²° 이유: μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°œμƒμ‹œν‚€λŠ” κ°€μž₯ ν”ν•˜κ³  μ£Όμš”ν•œ 원인 쀑 ν•˜λ‚˜λ‘œ μƒμ„Έν•˜κ²Œ 닀뀄진닀 [5, 6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: HTML λ¬Έμ„œμ˜ DOM νŠΈλ¦¬μ—μ„œλŠ” μ œκ±°λ˜μ—ˆμœΌλ‚˜, μžλ°”μŠ€ν¬λ¦½νŠΈ λ©”λͺ¨λ¦¬ μƒμ—λŠ” 데이터가 λ¬Άμ—¬ μžˆλŠ” μƒνƒœλ₯Ό νŒŒμ•…ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ ν•΄μ œ μ‹œ μ°Έμ‘° κ΄€λ¦¬μ˜ μ€‘μš”μ„±μ„ 이해할 수 μžˆλ‹€ [5, 13]. - [[Closure-Retained References]] - μ—°κ²° 이유: μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 언어적 νŠΉμ„±μΈ ν΄λ‘œμ €κ°€ μ–΄λ–»κ²Œ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜μ§€ λͺ»ν•˜κ²Œ λ§‰λŠ”μ§€ μ„€λͺ…ν•˜λŠ” 원인 νŒ¨ν„΄μ΄λ‹€ [10]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μŠ€μ½”ν”„ 체인으둜 인해 ν•„μš” μ΄μƒμœΌλ‘œ 큰 κ°μ²΄λ‚˜ 데이터가 κ°€λΉ„μ§€ μ»¬λ ‰ν„°λ‘œλΆ€ν„° μ‚΄μ•„λ‚¨λŠ” ꡬ쑰적 λˆ„μˆ˜ ν˜„μƒμ„ 뢄석할 수 μžˆλ‹€ [10]. #### [진단 및 κ΅¬ν˜„ 도ꡬ (Diagnostics & Tools)] - [[Chrome DevTools Memory Profiler]] - μ—°κ²° 이유: νž™ μŠ€λƒ…μƒ·(Heap snapshot)κ³Ό ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline) λ“± λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ§μ ‘μ μœΌλ‘œ μ°Ύμ•„λ‚΄κ³  λ””λ²„κΉ…ν•˜λŠ” 핡심 도ꡬ이닀 [11, 16]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 객체 κ°„μ˜ μ°Έμ‘° 경둜(Retainer Path)λ₯Ό μΆ”μ ν•˜κ³ , μ¦κ°€ν•˜λŠ” λ©”λͺ¨λ¦¬μ˜ κ·Όλ³Έ 원인이 λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜λ₯Ό μ‹œκ°μ μœΌλ‘œ μ°Ύμ•„λ‚΄λŠ” 기법을 μŠ΅λ“ν•  수 μžˆλ‹€ [10, 12, 15]. - [[useEffect Cleanup]] - μ—°κ²° 이유: React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ κ΅¬λ…μ΄λ‚˜ 이벀트λ₯Ό 관리할 λ•Œ λˆ„μˆ˜λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ ν”„λ ˆμž„μ›Œν¬ μ°¨μ›μ—μ„œ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λ˜λŠ” ν•΄κ²° νŒ¨ν„΄μ΄λ‹€ [7-9]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ 생λͺ…주기와 λΆ€μˆ˜ 효과(Side effect) 관리 원리λ₯Ό μ΄ν•΄ν•˜κ³ , λ¦¬μ†ŒμŠ€ λˆ„μΆœμ„ λ§‰λŠ” μ•ˆμ „ν•œ μ½”λ”© 방식을 읡힐 수 μžˆλ‹€ [7, 9]. - [[WeakMap]] - μ—°κ²° 이유: λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€ μ „λž΅μœΌλ‘œ 객체 μΊμ‹œ ꡬ쑰λ₯Ό 섀계할 λ•Œ μ‚¬μš©ν•˜λ„λ‘ μ§μ ‘μ μœΌλ‘œ ꢌμž₯λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μž₯ 객체이닀 [9]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 객체에 λŒ€ν•œ κ°•ν•œ μ°Έμ‘°(Strong Reference)λ₯Ό λ§Œλ“€μ§€ μ•Šμ•„ κ°€λΉ„μ§€ 컬렉터가 μ›ν™œν•˜κ²Œ μž‘λ™ν•˜λ„λ‘ λ•λŠ” λ©”λͺ¨λ¦¬ μ΅œμ ν™” 자료ꡬ쑰의 원리λ₯Ό 배울 수 μžˆλ‹€ [9]. ### Deeper Research Questions - μžλ°”μŠ€ν¬λ¦½νŠΈ κ°€λΉ„μ§€ 컬렉터(Garbage Collector)의 μ°Έμ‘° μΉ΄μš΄νŒ…(Reference Counting)κ³Ό ν‘œμ‹œ-μ“ΈκΈ°(Mark-and-Sweep) μ•Œκ³ λ¦¬μ¦˜μ€ 각각 μ–΄λ–€ 쑰건 ν•˜μ— λ©”λͺ¨λ¦¬ ν•΄μ œ κ°€λŠ₯성을 νŒλ‹¨ν•˜λŠ”κ°€? - λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ  λ•Œ, μžμ‹ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ ν΄λ‘œμ €(Closure)κ°€ λΆ€λͺ¨ μŠ€μ½”ν”„μ˜ μƒνƒœλ₯Ό μΊ‘μ²˜ν•˜κ³  μžˆμ„ 경우 μ •ν™•νžˆ μ–΄λ–€ 경둜λ₯Ό 톡해 λ©”λͺ¨λ¦¬ 릭이 λ°œμƒν•˜λŠ”κ°€? - 일반적인 `Object` ν˜Ήμ€ `Map`을 μ‚¬μš©ν•œ μƒνƒœ 데이터 캐싱과 `WeakMap`을 μ‚¬μš©ν•œ 캐싱 κ°„μ˜ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ 타이밍과 λŸ°νƒ€μž„ μ„±λŠ₯ μ°¨μ΄λŠ” μ–΄λ– ν•œκ°€? - Chrome DevTools의 Retainer νŒ¨λ„μ—μ„œ ν‘œμ‹œλ˜λŠ” 'Distance from GC root'κ°€ 디버깅 κ³Όμ •μ—μ„œ κ°–λŠ” μ˜λ―ΈλŠ” 무엇이며, μ°Έμ‘° 트리λ₯Ό 역좔적할 λ•Œ 이λ₯Ό μ–΄λ–»κ²Œ 해석해야 ν•˜λŠ”κ°€? - Puppeteerλ₯Ό ν™œμš©ν•œ μžλ™ν™”λœ λ©”λͺ¨λ¦¬ ν…ŒμŠ€νŠΈ(Automated Memory Testing) ν™˜κ²½μ„ CI/CD에 ꡬ좕할 λ•Œ, ν…ŒμŠ€νŠΈ μ‹€νŒ¨(λˆ„μˆ˜ λ°œμƒ)λ₯Ό νŒμ •ν•˜κΈ° μœ„ν•œ μ μ ˆν•œ λ©”λͺ¨λ¦¬ 증가 μž„κ³„κ°’(Threshold)은 μ–΄λ–»κ²Œ μ„€μ •ν•˜λŠ”κ°€? ### Practical Application Contexts - **Implementation:** React μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ„±ν•  λ•Œ, `useEffect` μ•ˆμ—μ„œ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ™ΈλΆ€ 데이터λ₯Ό κ΅¬λ…ν•œ 경우, λ°˜λ“œμ‹œ ν•΄λ‹Ή λ¦¬μŠ€λ„ˆλ‚˜ ꡬ독을 μ·¨μ†Œν•˜λŠ” ν•¨μˆ˜λ₯Ό λ°˜ν™˜(return)ν•˜μ—¬ λ©”λͺ¨λ¦¬κ°€ 회수될 수 있게 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€ [7, 9]. - **System Design:** λ°©λŒ€ν•œ μ–‘μ˜ 데이터λ₯Ό μž„μ‹œλ‘œ μΊμ‹±ν•˜κ±°λ‚˜ DOM μš”μ†Œμ™€ 메타데이터λ₯Ό λ§€ν•‘ν•΄μ•Ό ν•˜λŠ” μ‹œμŠ€ν…œμ„ 섀계할 경우, 일반 객체가 μ•„λ‹Œ `WeakMap`을 λ„μž…ν•˜μ—¬ μΊμ‹œκ°€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ λ°©ν•΄ν•˜μ§€ μ•Šλ„λ‘ μ•„ν‚€ν…μ²˜λ₯Ό ꡬ성해야 ν•œλ‹€ [9]. - **Operation / Maintenance:** ν”„λ‘œλ•μ…˜μ— 배포된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ 앱이 λ²„λ²…μ΄κ±°λ‚˜ ν¬λž˜μ‹œκ°€ λ°œμƒν•œλ‹€λŠ” μ‚¬μš©μž 보고가 μžˆλ‹€λ©΄, μ¦‰μ‹œ Chrome DevTools의 Memory νŒ¨λ„μ„ μΌœμ„œ Heap Snapshot의 Comparison λ·°λ₯Ό μ΄μš©ν•΄ μ–‘μˆ˜μ˜ 델타 값을 κ°€μ§„ 객체λ₯Ό 좔적해야 ν•œλ‹€ [4, 11]. - **Learning Path:** μžλ°”μŠ€ν¬λ¦½νŠΈ 기반 μ•±μ˜ μ„±λŠ₯ νŠœλ‹μ„ ν•™μŠ΅ν•  λ•Œ λ Œλ”λ§ μ΅œμ ν™”λ₯Ό λ„˜μ–΄μ„œ, "κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ 이해 -> Detached DOMκ³Ό ν΄λ‘œμ € λˆ„μˆ˜ νŒ¨ν„΄ νŒŒμ•… -> DevToolsλ₯Ό ν™œμš©ν•œ ν”„λ‘œνŒŒμΌλ§" 순으둜 λ©”λͺ¨λ¦¬ 관리 기법을 μ΅νžˆλŠ” ν•™μŠ΅ 경둜λ₯Ό μ„€μ •ν•  수 μžˆλ‹€ [1, 5, 11]. - **My Project Relevance:** ν˜„μž¬ μœ μ§€λ³΄μˆ˜ 쀑인 SPA ν”„λ‘œμ νŠΈμ— λ³΅μž‘ν•œ λΌμš°νŒ…κ³Ό 무거운 μœ„μ ―μ΄ ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄, 라우트 이동 후에도 이전 νŽ˜μ΄μ§€μ˜ 데이터가 λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline) 뢄석과 이벀트 λ¦¬μŠ€λ„ˆ 제거 μ—¬λΆ€λ₯Ό μ κ²€ν•˜λŠ” 데 μ μš©ν•  수 μžˆλ‹€ [6, 14]. ### Adjacent Topics - [[Garbage Collection in JavaScript]] - ν™•μž₯ λ°©ν–₯: μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„ λ‚΄λΆ€μ—μ„œ 도달 κ°€λŠ₯μ„±(Reachability)을 κΈ°μ€€μœΌλ‘œ 객체λ₯Ό μ–΄λ–»κ²Œ μˆ˜μ§‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ”μ§€μ— λŒ€ν•œ 기반 지식 λ°©ν–₯으둜 ν™•μž₯. - [[React Hooks Lifecycle]] - ν™•μž₯ λ°©ν–₯: λ©”λͺ¨λ¦¬ ν•΄μ œμ˜ μ‹œμ μ΄ λ˜λŠ” `useEffect`의 정리(Cleanup) λ™μž‘μ„ μ •ν™•νžˆ μ΄ν•΄ν•˜κΈ° μœ„ν•΄, μ»΄ν¬λ„ŒνŠΈμ˜ 마운트, μ—…λ°μ΄νŠΈ, μ–Έλ§ˆμš΄νŠΈ 생λͺ…주기와 μ˜μ‘΄μ„± λ°°μ—΄μ˜ λ™μž‘ 원리 탐ꡬ. - [[Web Performance Optimization]] - ν™•μž₯ λ°©ν–₯: λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 외에도 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ λ°©μ§€, μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…, λ²ˆλ“€ μ‚¬μ΄μ¦ˆ μΆ•μ†Œ λ“± ν”„λ‘ νŠΈμ—”λ“œ μ „λ°˜μ˜ μ„±λŠ₯ μ΅œμ ν™” 및 μ‚¬μš©μž κ²½ν—˜(UX) κ°œμ„  κΈ°λ²•μœΌλ‘œ ν™•μž₯. --- *Last updated: 2026-04-30*