# [[React DevTools Profiler|React DevTools Profiler]] ## πŸ“Œ Brief Summary React DevTools ProfilerλŠ” React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ Œλ”λ§ μ„±λŠ₯을 μΈ‘μ •ν•˜κ³  μ΅œμ ν™” λŒ€μƒμ„ μ‹λ³„ν•˜κΈ° μœ„ν•΄ React DevTools에 λ‚΄μž₯된 ν”„λ‘œνŒŒμΌλ§ 및 디버깅 도ꡬ이닀 [1]. 이 λ„κ΅¬λŠ” μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έμ œ, μ–Όλ§ˆλ‚˜ 였래 λ Œλ”λ§λ˜μ—ˆλŠ”μ§€, 그리고 μ–΄λ–€ μš”μΈ(props, state λ³€κ²½ λ“±)이 λ Œλ”λ§μ„ μœ λ°œν–ˆλŠ”μ§€ νŒŒμ•…ν•˜λŠ” 데 μ‚¬μš©λœλ‹€ [1, 2]. 주둜 둜컬 개발 ν™˜κ²½μ—μ„œ μ„±λŠ₯ 병λͺ© ν˜„μƒμ„ μ‹λ³„ν•˜κ³  λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ μ°Ύμ•„λ‚΄λŠ” 데 ν•΅μ‹¬μ μœΌλ‘œ ν™œμš©λœλ‹€ [3]. ## πŸ“– Core Content * **λ Œλ”λ§ 좔적 및 μ‹œκ°ν™”**: ProfilerλŠ” νŠΉμ • propsλ‚˜ μƒνƒœ(state) λ³€κ²½ λ“± μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§μ΄ λ°œμƒν•œ μ •ν™•ν•œ 원인을 좔적할 수 있게 ν•΄μ€€λ‹€ [1, 2]. ν”Œλ ˆμž„κ·Έλž˜ν”„(Flamegraph)와 μˆœμœ„ λ·°(Ranked views)λ₯Ό μ œκ³΅ν•˜μ—¬ μ„±λŠ₯ 병λͺ© 지점을 μ‹œκ°μ μœΌλ‘œ μ‰½κ²Œ 식별할 수 μžˆλ„λ‘ λ•λŠ”λ‹€ [2]. * **μ΅œμ ν™” ν•„μš”μ„± 검증 (μΈ‘μ • 기반 μ΅œμ ν™”)**: `React.memo`와 같은 λ©”λͺ¨μ΄μ œμ΄μ…˜ κΈ°μˆ μ„ μ μš©ν•˜κΈ° 전에, μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§ λΉ„μš©μ΄ μ΅œμ ν™” μ˜€λ²„ν—€λ“œλ₯Ό κ°μˆ˜ν•  만큼 큰지 μΈ‘μ •ν•˜λŠ” 데 μ‚¬μš©λœλ‹€ [4]. λ˜ν•œ, λ©”λͺ¨μ΄μ œμ΄μ…˜λœ μ»΄ν¬λ„ŒνŠΈ λ‚΄μ˜ prop 변경을 μΆ”μ ν•˜μ—¬ μžμ‹ μ»΄ν¬λ„ŒνŠΈκ°€ λΆˆν•„μš”ν•˜κ²Œ λ¦¬λ Œλ”λ§λ˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆλ‹€ [5]. "μΈ‘μ •ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ μ΅œμ ν™”ν•˜μ§€ 말라"λŠ” 원칙에 따라, ν”„λ‘œνŒŒμΌλ§μ€ μ„±λŠ₯ ν•«μŠ€νŒŸμ—λ§Œ μ§‘μ€‘ν•˜λ„λ‘ λ•λŠ”λ‹€ [2, 6]. * **React Compiler μ‹œκ°ν™”**: React Compilerκ°€ 적용된 ν™˜κ²½μ—μ„œλŠ” Profiler νƒ­μ—μ„œ μžλ™ μ΅œμ ν™”λœ μ»΄ν¬λ„ŒνŠΈμ— `Memo ✨` λ°°μ§€κ°€ ν‘œμ‹œλœλ‹€ [7, 8]. μž…λ ₯값이 λ³€κ²½λ˜μ§€ μ•Šμ•„ λ¦¬λ Œλ”λ§μ„ κ±΄λ„ˆλ›΄ μžμ‹ μ»΄ν¬λ„ŒνŠΈλŠ” νšŒμƒ‰μœΌλ‘œ ν‘œμ‹œλ˜λ©°, 마우슀λ₯Ό 올리면 μžλ™ λ©”λͺ¨μ΄μ œμ΄μ…˜ 및 λ¦¬λ Œλ”λ§ μƒλž΅ μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” 툴팁이 λ‚˜νƒ€λ‚œλ‹€ [8]. * **λΈ”λž™λ°•μŠ€ ν™˜κ²½μ—μ„œμ˜ 디버깅 ν•„μˆ˜μ„±**: React Compiler λ„μž… μ‹œ 기쑴의 λͺ…μ‹œμ μΈ `React.memo`, `useMemo`, `useCallback` 호좜이 μ½”λ“œμ—μ„œ 사라져 λ Œλ”λ§ μ œμ–΄κ°€ λΈ”λž™λ°•μŠ€μ²˜λŸΌ μž‘λ™ν•˜κ²Œ λœλ‹€ [9]. λ”°λΌμ„œ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¦¬λ Œλ”λ§ λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ, 이λ₯Ό μ½”λ“œ μƒμ—μ„œ ν™•μΈν•˜λŠ” λŒ€μ‹  Profilerλ₯Ό 톡해 직접 쑰사해야 ν•˜λ―€λ‘œ κ·Έ μ€‘μš”μ„±μ΄ λ”μš± 컀진닀 [9]. ## βš–οΈ Trade-offs & Caveats * **ν•΄μ„μƒμ˜ 주의점 (`Memo ✨` λ°°μ§€μ˜ 함정)**: Profiler νƒ­μ—μ„œ 확인할 수 μžˆλŠ” `Memo ✨` λ°°μ§€λŠ” λ‹€μ†Œ μ˜€ν•΄λ₯Ό λΆˆλŸ¬μΌμœΌν‚¬ 수 μžˆλ‹€ [10]. 이 λ°°μ§€λŠ” React Compilerκ°€ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ₯Ό 처리(Compile)ν–ˆμŒμ„ λ‚˜νƒ€λ‚Ό 뿐, μ΅œμ ν™”κ°€ μ™„λ²½ν•˜κ²Œ μ„±κ³΅ν–ˆμŒμ„ μ˜λ―Έν•˜μ§€λŠ” μ•ŠλŠ”λ‹€ [10]. μ»΄ν¬λ„ŒνŠΈμ— λ°°μ§€κ°€ ν‘œμ‹œλ˜μ–΄ μžˆλ”λΌλ„, 인라인 κ°μ²΄λ‚˜ ν•¨μˆ˜μ™€ 같은 λΆˆμ•ˆμ •ν•œ μ°Έμ‘°λ₯Ό κ°€μ§„ propsκ°€ μ „λ‹¬λœλ‹€λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ λ¦¬λ Œλ”λ§μ„ 막지 λͺ»ν•΄ μ—¬μ „νžˆ 맀번 λ Œλ”λ§μ΄ λ°œμƒν•  수 μžˆλ‹€ [10]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A: μ•„ν‚€ν…μ²˜/기반 기술] - [[React Compiler|React Compiler]] - μ—°κ²° 이유: React Compilerκ°€ λΉŒλ“œ νƒ€μž„μ— μ£Όμž…ν•œ μžλ™ λ©”λͺ¨μ΄μ œμ΄μ…˜ 둜직의 성곡 여뢀와 λ Œλ”λ§ μŠ€ν‚΅ κ²°κ³Όλ₯Ό Profilerλ₯Ό 톡해 μ‹œκ°μ μœΌλ‘œ 확인할 수 μžˆλ‹€ [7-9]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λͺ…μ‹œμ μΈ λ©”λͺ¨μ΄μ œμ΄μ…˜ μ½”λ“œ 없이도 λ Œλ”λ§ μ„±λŠ₯이 μ΅œμ ν™”λ˜λŠ” 원리와, λΈ”λž™λ°•μŠ€ν™”λœ λ Œλ”λ§ λ©”μ»€λ‹ˆμ¦˜μ„ λ””λ²„κΉ…ν•˜λŠ” 방법 [9, 11]. #### [관계 μœ ν˜• B: κ΅¬ν˜„/ν™œμš© 도ꡬ] - React.memo - μ—°κ²° 이유: Profilerλ₯Ό 톡해 νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§ λΉˆλ„μ™€ λΉ„μš©μ„ μΈ‘μ •ν•œ λ’€, κ·Έ 결과에 따라 `React.memo` 적용이 μ„±λŠ₯ ν–₯상에 μ‹€μ§ˆμ μΈ 도움이 될지 νŒλ‹¨ν•  수 μžˆλ‹€ [4]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 얕은 비ꡐ(Shallow comparison)의 원리와 ν”„λ‘œνŒŒμΌλ§ 데이터에 κΈ°λ°˜ν•œ μ „λž΅μ  λ©”λͺ¨μ΄μ œμ΄μ…˜ 방법 [4, 12, 13]. - useCallback & useMemo - μ—°κ²° 이유: Profilerμ—μ„œ μžμ‹ μ»΄ν¬λ„ŒνŠΈκ°€ μ°Έμ‘°(Reference) λ³€κ²½ λ•Œλ¬Έμ— 계속 λ¦¬λ Œλ”λ§λ˜λŠ” 것을 λ°œκ²¬ν–ˆλ‹€λ©΄, 이 훅듀을 μ‚¬μš©ν•˜μ—¬ μ°Έμ‘° μ•ˆμ •μ„±(Reference stability)을 확보할 수 μžˆλ‹€ [5, 14]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: ν•¨μˆ˜λ‚˜ 객체의 μ°Έμ‘° 동일성이 μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§ νŠΈλ¦¬μ— λ―ΈμΉ˜λŠ” 직접적인 영ν–₯ [14]. ### Deeper Research Questions - React DevTools Profiler의 ν”Œλ ˆμž„κ·Έλž˜ν”„(Flamegraph)와 μˆœμœ„ λ·°(Ranked view)λ₯Ό μ–΄λ–»κ²Œ 뢄석해야 μ„±λŠ₯ 병λͺ© ν˜„μƒμ„ κ°€μž₯ λΉ λ₯΄κ³  μ •ν™•ν•˜κ²Œ μ°Ύμ•„λ‚Ό 수 μžˆλŠ”κ°€? - λͺ…μ‹œμ μΈ λ©”λͺ¨μ΄μ œμ΄μ…˜ 훅이 μ œκ±°λ˜λŠ” React Compiler ν™˜κ²½μ—μ„œ, Profilerλ₯Ό ν†΅ν•œ μ„±λŠ₯ 디버깅 μ›Œν¬ν”Œλ‘œμš°λŠ” κΈ°μ‘΄κ³Ό ꡬ체적으둜 μ–΄λ–»κ²Œ λ‹¬λΌμ§€λŠ”κ°€? - Profilerλ₯Ό 톡해 μ‹λ³„λœ λΆˆν•„μš”ν•œ λ Œλ”λ§ 문제λ₯Ό ν•΄κ²°ν•  λ•Œ, μ–΄λ–€ μƒν™©μ—μ„œ ꡬ쑰 μž¬μ„€κ³„(예: Context API λŒ€μ‹  Zustand λ„μž…)κ°€ λ‹¨μˆœν•œ λ©”λͺ¨μ΄μ œμ΄μ…˜ μ μš©λ³΄λ‹€ 더 λ‚˜μ€ 선택이 λ˜λŠ”κ°€? - 둜컬 ν™˜κ²½μ˜ Profilerμ—μ„œ κ΄€μ°°λ˜λŠ” λ Œλ”λ§ μ‹œκ°„κ³Ό ν”„λ‘œλ•μ…˜ ν™˜κ²½μ˜ μ‹€μ œ μ‚¬μš©μž 체감 μ„±λŠ₯(Core Web Vitals의 INP λ“±) κ°„μ˜ 차이λ₯Ό μ–΄λ–»κ²Œ λ³΄μ •ν•˜μ—¬ 뢄석할 수 μžˆλŠ”κ°€? ### Practical Application Contexts - **Implementation:** λ Œλ”λ§ μ΅œμ ν™” μ½”λ“œλ₯Ό λ¬΄μž‘μ • μΆ”κ°€ν•˜κΈ° 전에, Profilerλ₯Ό μ‹€ν–‰ν•˜μ—¬ μ‹€μ œ λ Œλ”λ§ λΉˆλ„μ™€ μ‹€ν–‰ μ‹œκ°„μ„ μΈ‘μ •ν•¨μœΌλ‘œμ¨ λ Œλ”λ§μ΄ 무거운(expensive) μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •ν™•νžˆ μ‹λ³„ν•œλ‹€ [4, 6]. - **System Design:** Context API의 값이 변경될 λ•Œ μ–Όλ§ˆλ‚˜ λ§Žμ€ μžμ‹ μ»΄ν¬λ„ŒνŠΈκ°€ λΆˆν•„μš”ν•˜κ²Œ λ Œλ”λ§λ˜λŠ”μ§€ ν™•μΈν•˜κ³ , κΈ€λ‘œλ²Œ μƒνƒœ 관리 라이브러리(Zustand λ“±) λ„μž…μ΄λ‚˜ μƒνƒœ 도메인 λΆ„λ¦¬μ˜ 기술적 타당성을 κ²€μ¦ν•œλ‹€ [15-18]. - **Operation / Maintenance:** λ ˆκ±°μ‹œ μ½”λ“œλ² μ΄μŠ€λ₯Ό μœ μ§€λ³΄μˆ˜ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ κΈ°λŠ₯을 λ¦΄λ¦¬μŠ€ν•œ 직후, ν”Œλ ˆμž„κ·Έλž˜ν”„λ₯Ό μ •κΈ°μ μœΌλ‘œ λ¦¬λ·°ν•˜μ—¬ μ˜λ„μΉ˜ μ•Šμ€ μ„±λŠ₯ νšŒκ·€(Regression)λ₯Ό μ‹λ³„ν•˜κ³  κ΄€λ¦¬ν•œλ‹€ [19]. - **Learning Path:** React μž…λ¬Έμžλ‚˜ νŒ€μ›λ“€μ΄ Props, State, Contextκ°€ 변경될 λ•Œ μ»΄ν¬λ„ŒνŠΈκ°€ μ–΄λ–»κ²Œ λ°˜μ‘ν•˜κ³  μž¬λ Œλ”λ§λ˜λŠ”μ§€λ₯Ό μ‹œκ°μ μœΌλ‘œ λ³΄μ—¬μ€ŒμœΌλ‘œμ¨ λ Œλ”λ§ λͺ¨λΈμ„ 깊게 μ΄ν•΄μ‹œν‚¨λ‹€ [1, 20]. - **My Project Relevance:** ν™”λ©΄ λ‚΄ λŒ€μš©λŸ‰ λ¦¬μŠ€νŠΈλ‚˜ λ³΅μž‘ν•œ ν•„ν„°λ₯Ό μ‘°μž‘ν•  λ•Œ λ°œμƒν•˜λŠ” μ§€μ—° ν˜„μƒ(Jank)의 원인이 λ Œλ”λ§ μ‹œκ°„ μžμ²΄μΈμ§€, μ•„λ‹ˆλ©΄ λΆˆν•„μš”ν•œ 연쇄 λ¦¬λ Œλ”λ§ λ•Œλ¬ΈμΈμ§€ μ§„λ‹¨ν•˜κ³  해결책을 λ§ˆλ ¨ν•œλ‹€ [21, 22]. ### Adjacent Topics - why-did-you-render - ν™•μž₯ λ°©ν–₯: Profiler와 κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” 라이브러리둜, μ‹€μ œ 데이터 변경이 μ—†μŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§λœ 'μ •ν™•ν•œ 이유'λ₯Ό μ½˜μ†”μ— κ²½κ³  ν˜•νƒœλ‘œ 남겨주어 디버깅을 λ”μš± μ‰½κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” 도ꡬ에 λŒ€ν•΄ μ‘°μ‚¬ν•œλ‹€ [3, 23]. - Chrome DevTools Performance Tab - ν™•μž₯ λ°©ν–₯: Profilerκ°€ μ•Œλ €μ£ΌλŠ” React λ‚΄λΆ€μ˜ λ Œλ”λ§ 속도 이외에, ν”„λ ˆμž„ λ“œλ‘­μ΄λ‚˜ 메인 μŠ€λ ˆλ“œλ₯Ό λ§‰λŠ” 무거운 μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰, λ ˆμ΄μ•„μ›ƒ 이동 λ“± λΈŒλΌμš°μ € 레벨의 전체적인 μ„±λŠ₯ λΆ„μ„μœΌλ‘œ μ‹œμ•Όλ₯Ό ν™•μž₯ν•œλ‹€ [3, 23]. --- *Last updated: 2026-04-30*