# [[Chrome DevTools]] ## πŸ“Œ Brief Summary Chrome DevToolsλŠ” κ°œλ°œμžκ°€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ λͺ¨λ‹ˆν„°λ§ν•˜κ³  μ„±λŠ₯ 문제λ₯Ό 디버깅할 수 μžˆλ„λ‘ λ•λŠ” λΈŒλΌμš°μ € λ‚΄μž₯ 도ꡬ μ„ΈνŠΈμ΄λ‹€ [1, 2]. μ„±λŠ₯ νŒ¨λ„, λ©”λͺ¨λ¦¬ νŒ¨λ„, μž‘μ—… κ΄€λ¦¬μž(Task Manager) 등을 톡해 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory leak), λ©”λͺ¨λ¦¬ 팽창(Memory bloat), μž¦μ€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Garbage collection)κ³Ό 같은 문제λ₯Ό μ‹œκ°ν™”ν•˜κ³  식별할 수 μžˆλ‹€ [3]. 이 도ꡬλ₯Ό ν™œμš©ν•˜μ—¬ JavaScript μ‹€ν–‰ μ‹œκ°„, ν”„λ ˆμž„ λ Œλ”λ§, DOM λ…Έλ“œ μƒνƒœ 등을 μ‹€μ‹œκ°„μœΌλ‘œ λΆ„μ„ν•¨μœΌλ‘œμ¨ μ΅œμ ν™”λœ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•  수 μžˆλ‹€ [4]. ## πŸ“– Core Content Chrome DevToolsλŠ” λ©”λͺ¨λ¦¬ 문제 및 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯을 μ§„λ‹¨ν•˜λŠ” 데 λ‹€μ–‘ν•œ 도ꡬ와 κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. * **Chrome μž‘μ—… κ΄€λ¦¬μž (Task Manager):** μ‹€μ‹œκ°„μœΌλ‘œ νŽ˜μ΄μ§€μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ λͺ¨λ‹ˆν„°λ§ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ‹œμž‘μ μ΄λ‹€ [5]. 'Memory footprint' 열은 DOM λ…Έλ“œκ°€ μ €μž₯λ˜λŠ” OS λ©”λͺ¨λ¦¬λ₯Ό λ‚˜νƒ€λ‚΄λ©°, 이 μˆ˜μΉ˜κ°€ μ¦κ°€ν•˜λ©΄ DOM λ…Έλ“œκ°€ μƒμ„±λ˜κ³  μžˆμŒμ„ λœ»ν•œλ‹€ [6]. 'JavaScript Memory' μ—΄μ˜ κ΄„ν˜Έ μ•ˆ 라이브 μˆ«μžλŠ” 도달 κ°€λŠ₯ν•œ 객체가 μ‚¬μš©ν•˜λŠ” JS νž™ λ©”λͺ¨λ¦¬λ₯Ό μ˜λ―Έν•˜λ©°, 이 μˆ˜μΉ˜κ°€ μ¦κ°€ν•˜λ©΄ μƒˆλ‘œμš΄ 객체가 μƒμ„±λ˜κ±°λ‚˜ κΈ°μ‘΄ 객체가 컀지고 μžˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€ [6]. * **μ„±λŠ₯ νŒ¨λ„ (Performance Panel):** μ‹œκ°„ 경과에 λ”°λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 및 λ Œλ”λ§ λ™μž‘μ„ μ‹œκ°ν™”ν•œλ‹€ [7]. JS νž™, λ¬Έμ„œ, DOM λ…Έλ“œ, λ¦¬μŠ€λ„ˆ, GPU λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ κ·Έλž˜ν”„λ‘œ ν‘œμ‹œν•˜λ©°, κ°•μ œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ λ²„νŠΌμ„ 톡해 λ² μ΄μŠ€λΌμΈμ„ μ„€μ •ν•  수 μžˆλ‹€ [8, 9]. λ˜ν•œ JS μ‹€ν–‰ μ‹œκ°„, ν”„λ ˆμž„ λ Œλ”λ§, 페인트 및 λ ˆμ΄μ•„μ›ƒ 이동 등을 μΆ”μ ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ Œλ”λ§ 병λͺ© ν˜„μƒμ„ νŒŒμ•…ν•  수 μžˆλ‹€ [4, 10]. * **λ©”λͺ¨λ¦¬ νŒ¨λ„ (Memory Panel):** * **νž™ μŠ€λƒ…μƒ· (Heap Snapshots):** νŠΉμ • μ‹œμ μ— νŽ˜μ΄μ§€μ˜ JS 객체와 DOM λ…Έλ“œ κ°„μ˜ λ©”λͺ¨λ¦¬ 뢄포λ₯Ό 보여쀀닀 [11]. 특히 JavaScript μ½”λ“œμ—μ„œ μ—¬μ „νžˆ μ°Έμ‘°ν•˜κ³  μžˆμ–΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ λ˜μ§€ μ•ŠλŠ” λΆ„λ¦¬λœ DOM λ…Έλ“œ(Detached DOM nodes)λ₯Ό μ°ΎλŠ” 데 νš¨κ³Όμ μ΄λ‹€ [12, 13]. μ—¬λŸ¬ μŠ€λƒ…μƒ·μ„ 비ꡐ(Comparison λ·°)ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 계속 μ¦κ°€ν•˜λŠ” 객체(Delta 값이 μ–‘μˆ˜μΈ 객체)λ₯Ό μ°Ύμ•„ λˆ„μˆ˜λ₯Ό 식별할 수 μžˆλ‹€ [14]. * **ν• λ‹Ή νƒ€μž„λΌμΈ (Allocation Timelines / Instrumentation on timeline):** JS νž™μ— μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλ˜λŠ” μ‹œμ μ„ μ‹€μ‹œκ°„μœΌλ‘œ μΆ”μ ν•œλ‹€ [15, 16]. νŒŒλž€μƒ‰ λ§‰λŒ€λŠ” μƒˆλ‘œμš΄ 할당을 μ˜λ―Έν•˜λ©°, νšŒμƒ‰μœΌλ‘œ λ³€ν•˜μ§€ μ•Šκ³  남아 μžˆλŠ” νŒŒλž€μƒ‰ λ§‰λŒ€λŠ” λ©”λͺ¨λ¦¬μ— 계속 남아 μžˆλŠ” 객체λ₯Ό λ‚˜νƒ€λ‚΄μ–΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 후보λ₯Ό νŠΉμ •ν•  수 μžˆλ‹€ [16, 17]. * **ν• λ‹Ή μƒ˜ν”Œλ§ (Allocation sampling):** JavaScript ν•¨μˆ˜λ³„λ‘œ λ©”λͺ¨λ¦¬κ°€ μ–΄λ–»κ²Œ ν• λ‹Ήλ˜μ—ˆλŠ”μ§€ λΆ„μ„ν•˜λ©°, κ°€μž₯ λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œ ν•¨μˆ˜λ₯Ό 상단에 ν‘œμ‹œν•œλ‹€ [18]. * **μ„œλ²„μ‚¬μ΄λ“œ 디버깅:** Node.js μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우 `chrome://inspect`λ₯Ό 톡해 V8 μΈμŠ€νŽ™ν„° ν”„λ‘œν† μ½œμ— μ—°κ²°ν•˜μ—¬, μ„œλ²„μ‚¬μ΄λ“œ μ½”λ“œμ—μ„œλ„ ν΄λΌμ΄μ–ΈνŠΈμ™€ λ™μΌν•œ Chrome DevTools λ©”λͺ¨λ¦¬ ν”„λ‘œνŒŒμΌλ§ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€ [19]. ## βš–οΈ Trade-offs & Caveats Chrome DevTools의 νž™ μŠ€λƒ…μƒ· κΈ°λŠ₯을 μ‚¬μš©ν•  λ•Œ, μŠ€λƒ…μƒ·μ„ μΊ‘μ²˜ν•˜κ³  처리 및 λ‘œλ“œν•˜λŠ” 데 일정 μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆλ‹€λŠ” μ„±λŠ₯적 μ œμ•½μ΄ μžˆλ‹€ [11]. κ·Έ μ™Έ Chrome DevTools의 μ‚¬μš©μ— λ”°λ₯Έ 직접적인 λΆ€μž‘μš©μ΄λ‚˜ 기술적 μ„ νƒμ˜ λ°˜λŒ€ 급뢀에 λŒ€ν•΄μ„œλŠ” μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ„±λŠ₯ 뢄석 및 μ΅œμ ν™”] - [[Memory Leak]] - μ—°κ²° 이유: Chrome DevTools의 핡심 ν™œμš© λͺ©μ  쀑 ν•˜λ‚˜λŠ” μ‹œκ°„μ΄ 지남에 따라 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 계속 μ¦κ°€ν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜ ν˜„μƒμ„ μ§„λ‹¨ν•˜κ³  μˆ˜μ •ν•˜λŠ” 것이닀 [3, 20]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: νž™ μŠ€λƒ…μƒ· κ°„μ˜ 객체 Delta κ°’ λΉ„κ΅λ‚˜ νƒ€μž„λΌμΈμ˜ νŒŒλž€μƒ‰ λ§‰λŒ€ 뢄석을 톡해 μ–΄λ–»κ²Œ λˆ„μˆ˜ 객체λ₯Ό μ‹λ³„ν•˜λŠ”μ§€μ— λŒ€ν•œ 원리λ₯Ό 이해할 수 μžˆλ‹€ [14, 16]. - [[Garbage Collection]] - μ—°κ²° 이유: λΈŒλΌμš°μ €κ°€ λΆˆν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜λŠ” 과정이며, 이 μž‘μ—…μ΄ λ„ˆλ¬΄ 자주 λ°œμƒν•˜λ©΄ 슀크립트 싀행이 μΌμ‹œ μ€‘μ§€λ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ§€μ—° ν˜„μƒμ΄ λ°œμƒν•œλ‹€ [3, 20]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: DevToolsμ—μ„œ μ„±λŠ₯ 기둝 μ‹œμž‘ μ „ν›„λ‘œ κ°•μ œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ μ‹€ν–‰ν•˜μ—¬ λ©”λͺ¨λ¦¬ λ³€ν™”λŸ‰μ„ μ •ν™•νžˆ μΈ‘μ •ν•˜κ³ (베이슀라인 μ„€μ •), λΆˆν•„μš”ν•œ 객체가 μ œλŒ€λ‘œ μˆ˜κ±°λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ§₯락을 이해할 수 μžˆλ‹€ [8, 14]. #### [데이터 ꡬ쑰 및 μƒνƒœ 관리] - [[Detached DOM Nodes]] - μ—°κ²° 이유: DOM νŠΈλ¦¬μ—μ„œλŠ” μ œκ±°λ˜μ—ˆμœΌλ‚˜ JavaScriptκ°€ μ—¬μ „νžˆ μ°Έμ‘°λ₯Ό μœ μ§€ν•˜κ³  μžˆμ–΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜λ˜μ§€ λͺ»ν•˜λŠ” λ…Έλ“œλ“€λ‘œ, React와 같은 μ»΄ν¬λ„ŒνŠΈ 기반 UIμ—μ„œ λ°œμƒν•˜λŠ” ν”ν•œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 원인이닀 [12, 13]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: νž™ μŠ€λƒ…μƒ·μ—μ„œ "Detached"λ₯Ό ν•„ν„°λ§ν•˜κ³  μœ μ§€ 경둜(Retainer paths)λ₯Ό 좔적해야 ν•˜λŠ” 이유λ₯Ό 이해할 수 μžˆλ‹€ [11, 21]. #### [κ΄€λ ¨ 디버깅 도ꡬ] - [[React Profiler]] - μ—°κ²° 이유: Chrome DevTools μ„±λŠ₯ νŒ¨λ„κ³Ό ν•¨κ»˜ μ‚¬μš©λ˜μ–΄, μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έμ œ λ Œλ”λ§λ˜μ—ˆκ³  λ Œλ”λ§μ— μ–Όλ§ˆλ‚˜ μ‹œκ°„μ΄ κ±Έλ ΈλŠ”μ§€λ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 도ꡬ이닀 [22, 23]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΈŒλΌμš°μ € μˆ˜μ€€μ˜ λ©”λͺ¨λ¦¬ 및 λ Œλ”λ§ μ„±λŠ₯ 뢄석(Chrome DevTools)κ³Ό React ν”„λ ˆμž„μ›Œν¬ μˆ˜μ€€μ˜ λ Œλ”λ§ 병λͺ© ν˜„μƒ 뢄석(React Profiler)을 μ–΄λ–»κ²Œ κ²°ν•©ν•˜μ—¬ μ΅œμ ν™”μ— μ μš©ν•˜λŠ”μ§€ 이해할 수 μžˆλ‹€ [4, 23]. ### Deeper Research Questions - μž¦μ€ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Garbage Collection) ν˜„μƒμ΄ λ°œμƒν•˜μ—¬ UIκ°€ 끊길 λ•Œ, Chrome DevTools의 ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline)을 ν™œμš©ν•˜μ—¬ 원인이 λ˜λŠ” ν•¨μˆ˜μ˜ λ©”λͺ¨λ¦¬ ν• λ‹Ή νŒ¨ν„΄μ„ μ–΄λ–»κ²Œ ꡬ체적으둜 식별할 수 μžˆλŠ”κ°€? - ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œλΏλ§Œ μ•„λ‹ˆλΌ Node.js λ°±μ—”λ“œ ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μ˜μ‹¬λ  λ•Œ, `chrome://inspect`λ₯Ό ν™œμš©ν•œ V8 μΈμŠ€νŽ™ν„° ν”„λ‘œν† μ½œ 뢄석은 κΈ°μ‘΄ λΈŒλΌμš°μ € 디버깅과 μ–΄λ–€ 싀무적인 차이점과 ν•œκ³„λ₯Ό κ°€μ§€λŠ”κ°€? - μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 보유 기기의 λ©”λͺ¨λ¦¬ ν•œκ³„λ₯Ό μ΄ˆκ³Όν•˜μ—¬ μΌκ΄€λ˜κ²Œ λŠλ €μ§€λŠ” 'λ©”λͺ¨λ¦¬ 팽창(Memory Bloat)'κ³Ό κ³„μ†ν•΄μ„œ μ‚¬μš©λŸ‰μ΄ μ¦κ°€ν•˜λŠ” 'λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)'λ₯Ό Chrome μž‘μ—… κ΄€λ¦¬μžμ™€ νž™ μŠ€λƒ…μƒ·μœΌλ‘œ μ •ν™•ν•˜κ²Œ κ΅¬λΆ„ν•˜λŠ” 기쀀은 무엇인가? - Detached DOM λ…Έλ“œλ‚˜ ν΄λ‘œμ €(Closure)에 μ˜ν•œ μœ μ§€ μ°Έμ‘° λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ, νž™ μŠ€λƒ…μƒ·μ˜ μœ μ§€ 경둜(Retainer paths) νŒ¨λ„μ„ λΆ„μ„ν•˜μ—¬ κ°€μž₯ 효율적으둜 μ°Έμ‘° 고리λ₯Ό λŠμ–΄λ‚΄λŠ” μ•„ν‚€ν…μ²˜ κ°œμ„  방법은 무엇인가? - Chrome DevTools의 μ„±λŠ₯ νŒ¨λ„μ„ 톡해 μˆ˜μ§‘ν•œ λ Œλ”λ§ μ‹œκ°„, ν”„λ ˆμž„ λ“œλ‘­ λ“±μ˜ 데이터와 React Profiler의 κ²°κ³Όλ₯Ό λ§€ν•‘ν•˜μ—¬ λ³΅μž‘ν•œ μ»΄ν¬λ„ŒνŠΈ 트리의 λ Œλ”λ§ 병λͺ© ν˜„μƒμ„ μ •ν™•νžˆ μ§šμ–΄λ‚΄λŠ” 방법둠은 무엇인가? ### Practical Application Contexts - **Implementation:** 개발 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이벀트 λ¦­(Event leak)μ΄λ‚˜ 데이터 μž”μ‘΄ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ ν• λ‹Ή νƒ€μž„λΌμΈ 기둝 κΈ°λŠ₯을 켜고 μ‚¬μš©μž μƒν˜Έμž‘μš© ν›„ κ°•μ œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ μ‹€ν–‰ν•΄λ³΄λŠ” κ³Όμ •μ—μ„œ μ‚¬μš©λœλ‹€. - **System Design:** μ»΄ν¬λ„ŒνŠΈ 마운트 ν•΄μ œ μ‹œ μ œκ±°λ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆ(Event listener)λ‚˜ ν΄λ‘œμ €λ‘œ 인해 λ©”λͺ¨λ¦¬μ— 객체가 남지 μ•Šλ„λ‘, ν”„λ ˆμž„μ›Œν¬ 라이프사이클(예: React의 useEffect cleanup) 섀계λ₯Ό κ°•μ œν•˜λŠ” μ§€ν‘œλ‘œ ν™œμš©λœλ‹€. - **Operation / Maintenance:** ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ μž₯μ‹œκ°„ μ‚¬μš© μ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λŠλ €μ§€κ±°λ‚˜ ν¬λž˜μ‹œκ°€ λ°œμƒν•œλ‹€λŠ” μ‚¬μš©μž 제보λ₯Ό λ°›μ•˜μ„ λ•Œ, νž™ μŠ€λƒ…μƒ·μ„ 캑처 및 λΉ„κ΅ν•˜μ—¬ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ§„λ‹¨ν•˜κ³  사후 디버깅을 μˆ˜ν–‰ν•˜λŠ” 데 ν•„μˆ˜μ μœΌλ‘œ μ μš©λœλ‹€. - **Learning Path:** ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ JavaScript의 λ©”λͺ¨λ¦¬ 관리 λ©”μ»€λ‹ˆμ¦˜κ³Ό κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ 원리λ₯Ό μ‹œκ°μ μœΌλ‘œ μ΄ν•΄ν•˜κ³ , μ„±λŠ₯ μ΅œμ ν™”μ˜ κΈ°λ³ΈκΈ°λ₯Ό λ‹€μ§€κΈ° μœ„ν•œ 핡심 ν•™μŠ΅ λ„κ΅¬λ‘œ ν™œμš©λœλ‹€. - **My Project Relevance:** ν˜„μž¬ μœ μ§€λ³΄μˆ˜ 쀑인 ν”„λ‘œμ νŠΈλ‚˜ μƒˆλ‘œ κ΅¬μΆ•ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œμ—μ„œ, λΆˆν•„μš”ν•œ DOM λ…Έλ“œ 및 κ±°λŒ€ν•œ JavaScript λ²ˆλ“€λ‘œ μΈν•œ 초기 λ‘œλ”© 및 λŸ°νƒ€μž„ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ μ •κΈ° μ„±λŠ₯ 감사 λ„κ΅¬λ‘œ 직접 μ μš©ν•  수 μžˆλ‹€. ### Adjacent Topics - [[Core Web Vitals]] - ν™•μž₯ λ°©ν–₯: Chrome DevTools μ„±λŠ₯ νŒ¨λ„μ—μ„œ μΈ‘μ •ν•˜λŠ” 데이터λ₯Ό λ°”νƒ•μœΌλ‘œ First Input Delay (FID), Interaction to Next Paint (INP) λ“± μ‹€μ œ μ‚¬μš©μž κ²½ν—˜(UX) ν’ˆμ§ˆμ„ λ‚˜νƒ€λ‚΄λŠ” Core Web Vitals μ§€ν‘œλ₯Ό μ’…ν•©μ μœΌλ‘œ ν‰κ°€ν•˜κ³  μ΅œμ ν™”ν•˜λŠ” μ „λž΅μœΌλ‘œ ν™•μž₯ν•  수 μžˆλ‹€. --- *Last updated: 2026-04-30*