# [[Frontend Debugging]] ## πŸ“Œ Brief Summary ν”„λ‘ νŠΈμ—”λ“œ 디버깅은 ν”„λ‘œλ•μ…˜ ν™˜κ²½μ΄λ‚˜ 개발 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 였λ₯˜, λ©”λͺ¨λ¦¬ λˆ„μˆ˜, 그리고 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ 같은 μ„±λŠ₯ μ €ν•˜μ˜ κ·Όλ³Έ 원인을 μ‹λ³„ν•˜κ³  ν•΄κ²°ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1-4]. ν˜„λŒ€μ˜ λ³΅μž‘ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œμ—μ„œλŠ” λ‹¨μˆœν•œ μ½˜μ†” 둜그λ₯Ό λ„˜μ–΄ λΈŒλΌμš°μ € 개발자 도ꡬ, React μ „μš© ν”„λ‘œνŒŒμΌλŸ¬, 그리고 Sentryλ‚˜ LogRocketκ³Ό 같은 ν΄λΌμš°λ“œ 기반 λ‘œκΉ… 및 μ„Έμ…˜ λ¦¬ν”Œλ ˆμ΄ 도ꡬλ₯Ό 적극적으둜 ν™œμš©ν•©λ‹ˆλ‹€ [2, 5-7]. λ˜ν•œ, React ν™˜κ²½μ—μ„œλŠ” Error Boundaryλ₯Ό 톡해 λŸ°νƒ€μž„ μ—λŸ¬λ₯Ό κ²©λ¦¬ν•˜μ—¬ μ•± 전체가 λ©ˆμΆ”λŠ” 것을 λ°©μ§€ν•˜λŠ” 방어적 ν”„λ‘œκ·Έλž˜λ° μ „λž΅μ΄ ν•„μˆ˜μ μœΌλ‘œ λ™λ°˜λ©λ‹ˆλ‹€ [8, 9]. ## πŸ“– Core Content - **λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leaks) 및 νž™ λ©”λͺ¨λ¦¬ 디버깅** - μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬κ°€ μ œλŒ€λ‘œ ν•΄μ œλ˜μ§€ μ•Šκ³  계속 좕적될 λ•Œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜λ©°, μ΄λŠ” μ•±μ˜ μ„±λŠ₯ μ €ν•˜ 및 ν¬λž˜μ‹œλ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€ [10, 11]. - **Chrome DevTools의 Heap Snapshots:** 이λ₯Ό 톡해 λ©”λͺ¨λ¦¬ 덀프λ₯Ό λΉ„κ΅ν•˜κ³  "Detached DOM nodes(λΆ„λ¦¬λœ DOM λ…Έλ“œ)"λ‚˜ ν΄λ‘œμ €λ‘œ 인해 λΆˆν•„μš”ν•˜κ²Œ μœ μ§€λ˜κ³  μžˆλŠ” 객체 μ°Έμ‘°λ₯Ό 식별할 수 μžˆμŠ΅λ‹ˆλ‹€ [12-15]. - **Allocation Timeline:** μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μƒν˜Έμž‘μš©ν•˜λŠ” λ™μ•ˆ μ‹€μ‹œκ°„μœΌλ‘œ λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλ˜λŠ” νŒ¨ν„΄μ„ μΆ”μ ν•˜μ—¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜λŠ” μ •ν™•ν•œ μ‹œμ μ„ μ‹œκ°μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [16-18]. - 객체 μΊμ‹±μœΌλ‘œ μΈν•œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 일반 객체 λŒ€μ‹  κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ κ°€λŠ₯ν•œ `WeakMap`을 ν™œμš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [19]. - **React λ Œλ”λ§ μ„±λŠ₯ 및 μƒνƒœ 관리 디버깅** - **React DevTools Profiler:** λ Œλ”λ§μ΄ λ°œμƒν•œ μ»΄ν¬λ„ŒνŠΈ, λ Œλ”λ§ μ†Œμš” μ‹œκ°„, 그리고 λ Œλ”λ§μ„ μœ λ°œν•œ 원인(props λ˜λŠ” state의 λ³€κ²½)을 μ •ν™•νžˆ λΆ„μ„ν•˜μ—¬ 병λͺ© 지점을 μ°ΎμŠ΅λ‹ˆλ‹€ [7, 20]. - **why-did-you-render:** 개발 ν™˜κ²½μ—μ„œ propsλ‚˜ state의 λ³€κ²½ 없이 λ°œμƒν•˜λŠ” λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ μ½˜μ†” 경고둜 ν‘œμ‹œν•΄μ£Όμ–΄, λ‚­λΉ„λ˜λŠ” λ Œλ”λ§μ„ λ°©μ§€ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€ [21, 22]. - λ³΅μž‘ν•œ 비동기 μž‘μ—… 및 μƒνƒœλ₯Ό 관리할 λ•Œ, Context APIλŠ” μƒνƒœ 좔적이 μ–΄λ ΅μ§€λ§Œ ReduxλŠ” Redux DevToolsλ₯Ό 톡해 μƒνƒœ λ³€κ²½ 내역을 ν™•μΈν•˜κ³  μ•‘μ…˜μ„ μž¬ν˜„ν•  수 μžˆλŠ” 'μ‹œκ°„ μ—¬ν–‰(Time-travel) 디버깅' κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ 디버깅 속도λ₯Ό 크게 λ†’μ—¬μ€λ‹ˆλ‹€ [23-25]. - **ν”„λ‘œλ•μ…˜ ν΄λΌμš°λ“œ λ‘œκΉ… 및 λͺ¨λ‹ˆν„°λ§ 도ꡬ** - **Sentry:** 였λ₯˜λ₯Ό μ§€λŠ₯적으둜 κ·Έλ£Ήν™”ν•˜κ³ , μ½˜μ†” λ‘œκ·Έμ™€ λ„€νŠΈμ›Œν¬ μš”μ²­, μ‚¬μš©μž μ•‘μ…˜μ„ ν¬ν•¨ν•œ Breadcrumb νŠΈλ ˆμΌμ„ μ œκ³΅ν•˜μ—¬ 였λ₯˜ λ°œμƒ μ „ν›„μ˜ μ»¨ν…μŠ€νŠΈλ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€ [5, 26]. - **LogRocket:** μ‚¬μš©μžμ˜ ν™”λ©΄κ³Ό ν•¨κ»˜ DOM λ³€κ²½, Redux/Vuex μƒνƒœ λ³€ν™”, λ„€νŠΈμ›Œν¬ 응닡을 λΉ„λ””μ˜€μ²˜λŸΌ κΈ°λ‘ν•˜λŠ” μ„Έμ…˜ λ¦¬ν”Œλ ˆμ΄(Session replay)λ₯Ό μ œκ³΅ν•˜μ—¬ 디버깅 λ§₯락을 μ™„λ²½νžˆ μ œκ³΅ν•©λ‹ˆλ‹€ [6, 26, 27]. - **Datadog RUM 및 SigNoz:** ν”„λ‘ νŠΈμ—”λ“œ μ—λŸ¬ 클릭 μ‹œ λΆ„μ‚° μ‹œμŠ€ν…œμ˜ λ°±μ—”λ“œ 트레이슀(Traces)와 인프라 λ©”νŠΈλ¦­κΉŒμ§€ μ—°κ²°ν•˜λŠ” End-to-end 좔적 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€ [28-30]. - **μ—λŸ¬ λ°”μš΄λ”λ¦¬(Error Boundaries)λ₯Ό ν†΅ν•œ UI μ—λŸ¬ 격리** - React 클래슀 μ»΄ν¬λ„ŒνŠΈλ‘œ κ΅¬ν˜„λ˜λŠ” Error BoundaryλŠ” μžμ‹ μ»΄ν¬λ„ŒνŠΈ 트리의 λ Œλ”λ§, 수λͺ… μ£ΌκΈ° λ©”μ„œλ“œ λ“±μ—μ„œ λ°œμƒν•˜λŠ” JavaScript 였λ₯˜λ₯Ό μž‘μ•„λƒ…λ‹ˆλ‹€ [9, 31]. - μ„œλ“œνŒŒν‹° μœ„μ ―μ΄λ‚˜ λ³΅μž‘ν•œ 폼 같은 λΆˆμ•ˆμ •ν•œ UI μ„Ήμ…˜μ„ Error Boundary둜 κ°œλ³„ λž˜ν•‘ν•˜λ©΄, 였λ₯˜ λ°œμƒ μ‹œ 전체 앱이 μΆ©λŒν•˜μ—¬ "λ°±μ§€ ν™”λ©΄"이 ν‘œμ‹œλ˜λŠ” 것을 막고, μΉœμˆ™ν•œ Fallback UI(λŒ€μ²΄ ν™”λ©΄)λ₯Ό λŒ€μ‹  보여쀄 수 μžˆμŠ΅λ‹ˆλ‹€ [8, 32, 33]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Error Boundaries]], [[Performance Optimization]], [[State Management]] - **Projects/Contexts:** [[ν™•μž₯ κ°€λŠ₯ν•œ React μ•„ν‚€ν…μ²˜ 및 폴더 ꡬ쑰 섀계]], [[ν”„λ‘ νŠΈμ—”λ“œ ν΄λΌμš°λ“œ λ‘œκΉ… 도ꡬ λ„μž… 및 ν”„λ‘œλ•μ…˜ λͺ¨λ‹ˆν„°λ§]] - **Contradictions/Notes:** Error BoundariesλŠ” μ„ μ–Έν˜• μ»΄ν¬λ„ŒνŠΈ 트리 λ‚΄μ˜ λ Œλ”λ§ μ—λŸ¬λŠ” ν›Œλ₯­ν•˜κ²Œ μž‘μ•„λ‚΄μ§€λ§Œ, 이벀트 ν•Έλ“€λŸ¬(Event handlers)λ‚˜ `setTimeout` λ“±μ˜ 비동기 μ½”λ“œμ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬λŠ” κ°μ§€ν•˜μ§€ λͺ»ν•˜λ―€λ‘œ, ν•΄λ‹Ή μ˜μ—­μ—μ„œλŠ” 일반적인 `try/catch` 블둝을 λ³„λ„λ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [34, 35]. λ˜ν•œ Datadogκ³Ό 같은 톡합 κ°€μ‹œμ„± λ„κ΅¬λŠ” 맀우 κ°•λ ₯ν•˜μ§€λ§Œ, 인제슀트(μˆ˜μ§‘)와 인덱싱(검색 ν™œμ„±ν™”)을 각각 κ³ΌκΈˆν•˜λŠ” 이쀑 가격 λͺ¨λΈ λ•Œλ¬Έμ— λŒ€κ·œλͺ¨ νŠΈλž˜ν”½μ—μ„œ λΉ„μš©μ΄ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ 증가할 수 μžˆλ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€ [36, 37]. --- *Last updated: 2026-04-26*