🧠 React DevTools로 리렌더링 감지하고 최적화 지점 찾는 법
React 앱을 개발하다 보면 이런 상황을 겪게 됩니다:
“앱이 점점 느려져요… 어떤 컴포넌트가 리렌더링되는지 어떻게 알 수 있을까요?”
이럴 때 사용하는 도구가 바로 React DevTools입니다.
이번 글에서는 DevTools를 사용해 컴포넌트의 리렌더링을 감지하고, 성능 병목 지점을 찾아내는 방법을 초급자도 알기 쉽게 정리해볼게요.
🔧 React DevTools란?
React DevTools는 React 공식 확장 프로그램으로, 브라우저에서 컴포넌트 구조, props, state, 렌더링 상태 등을 확인할 수 있게 해주는 강력한 개발자 도구입니다.
- 컴포넌트 트리 보기
- props / state 실시간 확인
- 렌더링 추적 기능 (Profiler)
React 앱을 최적화하려면 이 DevTools를 자유자재로 다루는 것이 매우 중요해요!
📦 설치 방법
React DevTools는 크롬/엣지/파이어폭스 확장 프로그램으로 사용할 수 있습니다.
설치 후 React 앱을 실행하면, 개발자 도구(F12) 탭에 ⚛️ Components / Profiler 탭이 생깁니다.
👀 Components 탭 살펴보기
Components 탭에서는 다음을 볼 수 있어요:
- 전체 컴포넌트 트리
- 선택한 컴포넌트의 props, state, hooks 상태
- 컴포넌트가 업데이트 되었는지 여부
✅ 실습 팁
- 컴포넌트를 클릭해보면 해당 컴포넌트의 정보가 오른쪽 패널에 표시됩니다.
- props/state가 바뀌면 바로바로 값이 갱신되는 걸 볼 수 있어요.
🔥 Profiler 탭으로 리렌더링 감지하기
Profiler 탭은 DevTools의 하이라이트 기능입니다.
이 기능을 통해 어떤 컴포넌트가 얼마나 자주 렌더링되는지, 렌더링 시간은 얼마나 걸리는지를 시각적으로 확인할 수 있어요.
✅ 사용 방법
- 개발자 도구 → Profiler 탭으로 이동
- Record 버튼 클릭
- 앱에서 동작 (예: 버튼 클릭 등)
- Stop 버튼 클릭
그럼 아래와 같이 컴포넌트별 렌더링 횟수, 시간, 이유가 표시돼요:
- 🔴 빨간색: 렌더링 시간이 오래 걸린 컴포넌트
- 🟢 초록색: 빠르게 렌더링된 컴포넌트
→ 빨간색 컴포넌트는 최적화 타겟입니다!
🧪 리렌더링 원인 확인하기
Profiler에서 특정 컴포넌트를 클릭하면 왜 렌더링이 발생했는지 알려주는 기능이 있어요.
Updated because:
- Hooks changed
- Props changed
이 정보를 바탕으로 다음을 점검해보세요:
- 불필요한 상태 변경이 발생하진 않았는가?
- 부모가 리렌더링되면서 자식도 따라간 건 아닌가?
- 함수나 객체 props가 매번 새로 생성되는 건 아닌가?
→ 이런 상황에서 React.memo / useCallback / useMemo 같은 최적화 기술을 적용합니다.
📌 실전 예제: useCallback 없이 리렌더링되는 문제
// 자식 컴포넌트
const Child = React.memo(({ onClick }) => {
console.log("Child 렌더링");
return <button onClick={onClick}>자식 버튼</button>;
});
// 부모 컴포넌트
function Parent() {
const [count, setCount] = useState(0);
const handleClick = () => console.log("클릭");
return (
<>
<Child onClick={handleClick} />
<button onClick={() => setCount(count + 1)}>부모 버튼</button>
</>
);
}
이 경우 부모가 리렌더링되면서 handleClick이 새로 생성되기 때문에, React.memo가 있어도 자식 컴포넌트가 계속 리렌더링됩니다.
✅ 해결책
const handleClick = useCallback(() => {
console.log("클릭");
}, []);
📈 React DevTools로 성능 병목 파악하기
아래처럼 정리해보면 좋아요:
- Profiler로 렌더링 많은 컴포넌트 파악
- 렌더링 원인 확인 (props, state, hook)
- 자주 바뀌는 부분 → useMemo / useCallback 적용
- 자식 컴포넌트 → React.memo 적용
→ 이렇게 하나씩 개선하면 앱 전체 속도 향상이 눈에 띄게 나타납니다.
🧠 리렌더링 감지 최종 요약
문제 | 감지 방법 | 해결책 |
---|---|---|
자식이 자꾸 리렌더링됨 | DevTools Profiler + 로그 | React.memo + useCallback |
컴포넌트 렌더링 느림 | Profiler 시간 그래프 | useMemo로 계산 결과 캐싱 |
상태 변화 감지 어려움 | Components 탭으로 실시간 확인 | 불필요한 state 제거 |
📚 공식 문서 & 추천 리소스
✅ 마무리
리렌더링 문제는 React에서 자주 발생하는 성능 이슈입니다.
하지만 React DevTools를 잘 활용하면 눈에 보이지 않던 문제들이 보이기 시작해요.
React는 렌더링 최적화보다
"언제, 왜 리렌더링되는지 파악"하는 게 먼저입니다.
DevTools로 병목 구간을 찾고, React.memo / useCallback으로 똑똑하게 최적화해보세요!
다음 글에서는 React 앱 전체 성능 측정 + 렌더링 전략 최적화 방법을 다뤄볼게요 😊
'일상이 개발' 카테고리의 다른 글
React 앱 로딩 속도 향상 전략: Suspense + 코드 스플리팅 실전 정리 (0) | 2025.04.05 |
---|---|
React 앱 성능 측정과 렌더링 최적화 전략: DevTools부터 useMemo까지 정복하기 (0) | 2025.04.05 |
React.memo + useCallback 조합으로 컴포넌트 리렌더링을 막아보자! (0) | 2025.04.05 |
React.memo 완벽 정리: 컴포넌트 리렌더링을 막는 고급 최적화 기법 (0) | 2025.04.05 |
React useMemo & useCallback 완벽 이해: 언제, 왜, 어떻게 사용하는가 (0) | 2025.04.05 |