λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ—‚ WIL

πŸ”¨ React Dev Tools 에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

by nalong 2024. 10. 27.

μš”μ¦˜ κ°œλ°œμΌμ •μ΄ ν”½μŠ€λ˜μ–΄ μžˆλŠ” 상황이 λ§Žλ‹€ λ³΄λ‹ˆ μ΄μŠˆκ°€ λ°œμƒν–ˆμ„ λ•Œ 이슈λ₯Ό νŒŒμ•…ν•˜λŠ” 과정에 μžˆμ–΄μ„œ μ–΄λ–»κ²Œ ν•˜λ©΄ 효율적으둜 λΉ λ₯΄κ²Œ 이슈λ₯Ό ν•΄κ²°ν•  수 μžˆμ„ 지에 λŒ€ν•΄ κ³ λ―Όν•˜κ²Œ λ˜μ—ˆλŠ”λ°.. 문득 λ‚΄κ°€ 디버깅을 μž˜ν•˜λŠ” 편이 μ•„λ‹ˆλΌλŠ” 생각이 λ“€μ—ˆκ³ ..(μ½˜μ†”λ‘œκ·Έλ§Œ λƒ…λ‹€ 많이 μ°λŠ” μ‚¬λžŒ + debuggerκ°€ νŽΈν•˜μ§€ μ•ŠλŠ” μ‚¬λžŒ = λ‚˜) React Dev Tools을 잘 ν™œμš©ν•΄ 보기 μœ„ν•΄ κ΄€λ ¨ λ‚΄μš©λ“€μ„ μ°Ύμ•„μ„œ 읽고 κ°„λ‹¨νžˆ 정리해 λ³΄μ•˜λ‹€!  

 

πŸ”₯ React Dev Tools 은 크게 Components νƒ­κ³Ό Profiler νƒ­μœΌλ‘œ λ‚˜λˆ„μ–΄μ§€λŠ”λ°, Components νƒ­ μ—μ„œλŠ” ν˜„μž¬ React ꡬ성 μš”μ†Œ νŠΈλ¦¬μ™€ λͺ¨λ“  props, state λ˜λŠ” contextλ₯Ό ν‘œμ‹œν•˜κ³ , Profiler νƒ­μ—μ„œλŠ”  μ‚¬μš©ν•˜λ©΄ μƒν˜Έ μž‘μš©μ„ κΈ°λ‘ν•˜κ³  ꡬ성 μš”μ†Œ λ Œλ”λ§μ„ μΈ‘μ •ν•  수 μžˆλ‹€.

βš™οΈ Settings

Profiler νƒ­κ³Ό Components νƒ­μ—μ„œ μ§„μž…ν•˜λŠ” μ„€μ •μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” Highlight! 
μ»΄ν¬λ„ŒνŠΈκ°€ re-rendering 될 λ•Œλ§ˆλ‹€ μ»΄ν¬λ„ŒνŠΈμ˜ 경계 뢀뢄을 κ°•μ‘° ν‘œμ‹œν•΄ μ£Όκ³ , μ΄λ•Œ νŒŒλž€μƒ‰ < μ΄ˆλ‘μƒ‰ < λ…Έλž€μƒ‰ < λΉ¨κ°„μƒ‰μœΌλ‘œ λ¦¬λ Œλ”λ§ λΉˆλ„κ°€ 높은 μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬λ³„ν•΄μ„œ ν‘œμ‹œν•΄μ€€λ‹€κ³  ν•œλ‹€.  

 

1️⃣ Components Tab

πŸ”₯ μ»΄ν¬λ„ŒνŠΈμ˜ 계측 ꡬ쑰 확인할 수 μžˆλ‹€! 

μ»΄ν¬λ„ŒνŠΈμ˜ 계측 ꡬ쑰 확인 및 검색이 κ°€λŠ₯ν•œλ°, λ””ν΄νŠΈλ‘œ ꡬ쑰λ₯Ό 보여쀄 λ•Œ  host components (e.g. <div>) 듀은 기본적으둜 숨겨져 μžˆλ‹€. λ§Œμ•½ ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄ μ„€μ • λ©”λ‰΄μ—μ„œ "host" μœ ν˜• ν•„ν„°μ˜ μ™Όμͺ½μ— μžˆλŠ” 토글을 λΉ„ν™œμ„±ν™”ν•˜λ©΄ host componentsκΉŒμ§€ λͺ¨λ‘ 확인 κ°€λŠ₯ν•˜λ‹€. 

또 rendered byλ₯Ό ν†΅ν•΄μ„œ μ„ νƒν•œ μ»΄ν¬λ„ŒνŠΈμ˜ μƒμœ„ μ»΄ν¬λ„ŒνŠΈλ“€λ„ λ°”λ‘œ 확인 κ°€λŠ₯ν•˜λ‹€. 

 

πŸ”₯ μ½˜μ†”λ‘œκ·Έ ν•„μš”μ—†μ΄ μ»΄ν¬λ„ŒνŠΈμ— μžˆλŠ” State, Props, hooks 확인 및 λ³€κ²½ κ°€λŠ₯ν•˜λ‹€!

κΆκΈˆν•œ μ»΄ν¬λ„ŒνŠΈμ˜ State, Props, hooks듀이 뭐가 μžˆλŠ”μ§€ ν™•μΈν•˜κ³ , 변경도 ν•΄λ³Ό 수 μžˆλ‹€.
λ¬Όλ‘  State, Props, hooks을 λ³€κ²½ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈμ— λ³€κ²½ 사항이 μ‹€μ‹œκ°„μœΌλ‘œ 반영되기 λ•Œλ¬Έμ— μƒˆλ‘œκ³ μΉ¨ ν•  ν•„μš” 없이 λΉ λ₯΄κ²Œ 변경에 λ”°λ₯Έ μ»΄ν¬λ„ŒνŠΈ λ³€ν™”λ₯Ό ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.πŸ₯Ή

 

 

 

πŸ”₯ Suspense둜 μ»΄ν¬λ„ŒνŠΈ λ‘œλ”© μƒνƒœλ₯Ό μ‰½κ²Œ 확인할 수 μžˆλ‹€!

suspense 토글을 μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ λ‘œλ”© μƒνƒœλ₯Ό κ°œλ³„μ μœΌλ‘œ 확인할 수 μžˆμ–΄μ„œ λ‘œλ”© μƒνƒœμ™€ 비동기 μž‘μ—… μ§„ν–‰ 상황을 λΉ λ₯΄κ²Œ 확인해 λ³Ό 수 μžˆλ‹€. 

2️⃣ Profiler Tab

Profiler 탭을 μ‚¬μš©ν•˜λ©΄ 각 μ»΄ν¬λ„ŒνŠΈ 변화와 각 ν•­λͺ©μ΄ λ Œλ”λ§ 된 μ‹œκ°„μ„ λ³΄μ—¬μ£ΌλŠ” μ°¨νŠΈλ“€μ„ 확인할 수 μžˆλ‹€. 

μ„±λŠ₯ 뢄석은 두 κ°€μ§€ λ‹¨κ³„λ‘œ κ΅¬λΆ„λœλ‹€κ³  ν•œλ‹€. 

  1. Render 단계: Reactκ°€ μ–΄λ–€ 변경이 ν•„μš”ν•œμ§€ κ²°μ •ν•˜λŠ” 단계. μ»΄ν¬λ„ŒνŠΈμ˜ render λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³  κ²°κ³Όλ₯Ό 이전 λ Œλ”λ§κ³Ό λΉ„κ΅ν•œλ‹€.
  2. Commit 단계: λ³€κ²½ 사항을 μ‹€μ œλ‘œ μ μš©ν•˜λŠ” 단계. ReactλŠ” DOM λ…Έλ“œλ₯Ό μ‚½μž…, μ—…λ°μ΄νŠΈ λ˜λŠ” μ œκ±°ν•˜κ³ , componentDidMount 및 componentDidUpdate와 같은 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

1. Commit Chart

ProfilerλŠ” 컀밋(Commit) λ‹¨μœ„λ‘œ μ„±λŠ₯ 정보λ₯Ό κ·Έλ£Ή ν•˜λŠ”λ°, μƒλ‹¨μ˜ 컀밋 μ°¨νŠΈμ—λŠ” 각 μ»€λ°‹μ˜ 정보가 ν‘œμ‹œλ˜λ©°, μ„ νƒν•œ 컀밋은 νŒŒλž€μƒ‰μœΌλ‘œ κ°•μ‘°λœλ‹€. λ§‰λŒ€μ˜ 색상과 λ†’μ΄λŠ” ν•΄λ‹Ή μ»€λ°‹μ˜ λ Œλ”λ§ μ‹œκ°„μ΄ μ–Όλ§ˆλ‚˜ κ±Έλ ΈλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚Έλ‹€! 

 

2. Flame Chart

μ„ νƒν•œ μ»€λ°‹μ˜ μƒνƒœλ₯Ό μ‹œκ°μ μœΌλ‘œ 보여주며, 각 λ§‰λŒ€λŠ” μ»΄ν¬λ„ŒνŠΈμ™€ λ Œλ”λ§ μ‹œκ°„μ„ λ‚˜νƒ€λ‚Έλ‹€.

λ§‰λŒ€μ˜ λ„ˆλΉ„λŠ” λ Œλ”λ§μ— κ±Έλ¦° μ‹œκ°„μ΄κ³ , 색상은 ν•΄λ‹Ή μ»€λ°‹μ—μ„œμ˜ λ Œλ”λ§ μ‹œκ°„μΈλ°, λ…Έλž€μƒ‰μ΄ 더 κΈ΄ μ‹œκ°„, μ΄ˆλ‘μƒ‰μ΄ μƒλŒ€μ μœΌλ‘œ μ‹œκ°„μ„ μ˜λ―Έν•˜λ©°, νšŒμƒ‰μ€ ν•΄λ‹Ή μ»€λ°‹μ—μ„œλŠ” λ Œλ”λ§ λ˜μ§€ μ•Šμ€ μ»΄ν¬λ„ŒνŠΈλ‹€. 

그리고 νŠΉμ • μ»΄ν¬λ„ŒνŠΈ 차트 λ§‰λŒ€λ₯Ό μ„ νƒν•˜λ©΄ λͺ‡ λ²ˆμ΄λ‚˜ μ—…λ°μ΄νŠΈ λ˜μ—ˆλŠ”μ§€ μ•Œ 수 μžˆλ‹€. 
예λ₯Ό λ“€μ–΄ μ•„λž˜μ˜ Bubble λ©”λ‰΄μ˜ 첫 번째 "0.3s for 9.1ms" λŠ” 'ν”„λ‘œνŒŒμΌλ§ μ„Έμ…˜μ˜ 0.3초 μ‹œμ μ— λ Œλ”λ§ λ˜μ—ˆκ³ , 9.1msκ°€ μ†Œμš”λ˜μ—ˆμŒ'을 μ˜λ―Έν•œλ‹€. 

3. Ranked Chart

νŠΉμ • μ»€λ°‹μ—μ„œ λ Œλ”λ§ μ‹œκ°„μ΄ κΈ΄ μˆœμ„œλŒ€λ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •λ ¬ν•˜μ—¬ λ³΄μ—¬μ£ΌλŠ”λ°, λ Œλ”λ§ μ‹œκ°„μ΄ κΈ΄ μ»΄ν¬λ„ŒνŠΈλŠ” 일반적으둜 트리의 μƒμœ„μ— μœ„μΉ˜ν•œλ‹€. Flame Chart μ°¨νŠΈμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ νŠΉμ • μ»΄ν¬λ„ŒνŠΈ 차트 λ§‰λŒ€λ₯Ό μ„ νƒν•˜λ©΄ λͺ‡ λ²ˆμ΄λ‚˜ μ—…λ°μ΄νŠΈ λ˜μ—ˆλŠ”μ§€ μ•Œ 수 μžˆλ‹€. 

 

#####

결둠적으둜, React DevTools의 Components와 Profiler κΈ°λŠ₯을 ν™œμš©ν•˜λ©΄ 기쑴에 console.logλ₯Ό μ‚¬μš©ν•΄ μƒˆλ‘œ κ³ μΉ¨ ν•˜λ©° λ””λ²„κΉ…ν•˜λ˜ 방식보닀 훨씬 효율적일 것 κ°™λ‹€. (특히, μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœμ™€ λ Œλ”λ§ μ‹œκ°„μ„ λ°”λ‘œ 확인할 수 μžˆμ–΄ λΆˆν•„μš”ν•œ 과정을 쀄이고, μ‹€μ‹œκ°„μœΌλ‘œ 변경사항을 λΉ λ₯΄κ²Œ λ°˜μ˜ν•  수 μžˆλ‹€λŠ” 점이 κ°€μž₯ 쒋은 λ“―..) 또, Profilerλ₯Ό 톡해 μ„±λŠ₯ 문제λ₯Ό μ‹œκ°μ μœΌλ‘œ νŒŒμ•…ν•˜κ³ , 가끔 memo / callback을 μ‚¬μš©ν• μ§€ 고민슀러울 λ•Œκ°€ λ§Žμ€λ° 이럴 λ•Œ μ΅œμ ν™”κ°€ ν•„μš”ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λΉ λ₯΄κ²Œ νŒŒμ•…ν•˜λ‹€λŠ” 점도 μœ μš©ν•œ 것 κ°™λ‹€.

 

⬇️ νŠœν† λ¦¬μ–Ό

https://react-devtools-tutorial.vercel.app/

https://www.digitalocean.com/community/tutorials/how-to-debug-react-components-using-react-developer-tools#step-3-tracking-component-rendering-across-interactions 

 

 

How To Debug React Components Using React Developer Tools | DigitalOcean

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

www.digitalocean.com