일상이 개발

React DevTools 완전 정복: 리렌더링 감지와 성능 최적화 방법 가이드

디어노미 2025. 4. 5. 17:20
반응형

🧠 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 상태
  • 컴포넌트가 업데이트 되었는지 여부

React DevTools Components 탭 예시

✅ 실습 팁

  1. 컴포넌트를 클릭해보면 해당 컴포넌트의 정보가 오른쪽 패널에 표시됩니다.
  2. props/state가 바뀌면 바로바로 값이 갱신되는 걸 볼 수 있어요.

🔥 Profiler 탭으로 리렌더링 감지하기

Profiler 탭은 DevTools의 하이라이트 기능입니다.
이 기능을 통해 어떤 컴포넌트가 얼마나 자주 렌더링되는지, 렌더링 시간은 얼마나 걸리는지를 시각적으로 확인할 수 있어요.

✅ 사용 방법

  1. 개발자 도구 → Profiler 탭으로 이동
  2. Record 버튼 클릭
  3. 앱에서 동작 (예: 버튼 클릭 등)
  4. 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로 성능 병목 파악하기

아래처럼 정리해보면 좋아요:

  1. Profiler로 렌더링 많은 컴포넌트 파악
  2. 렌더링 원인 확인 (props, state, hook)
  3. 자주 바뀌는 부분 → useMemo / useCallback 적용
  4. 자식 컴포넌트 → React.memo 적용

→ 이렇게 하나씩 개선하면 앱 전체 속도 향상이 눈에 띄게 나타납니다.


🧠 리렌더링 감지 최종 요약

문제 감지 방법 해결책
자식이 자꾸 리렌더링됨 DevTools Profiler + 로그 React.memo + useCallback
컴포넌트 렌더링 느림 Profiler 시간 그래프 useMemo로 계산 결과 캐싱
상태 변화 감지 어려움 Components 탭으로 실시간 확인 불필요한 state 제거

📚 공식 문서 & 추천 리소스


✅ 마무리

리렌더링 문제는 React에서 자주 발생하는 성능 이슈입니다.
하지만 React DevTools를 잘 활용하면 눈에 보이지 않던 문제들이 보이기 시작해요.

React는 렌더링 최적화보다
"언제, 왜 리렌더링되는지 파악"하는 게 먼저입니다.

DevTools로 병목 구간을 찾고, React.memo / useCallback으로 똑똑하게 최적화해보세요!

다음 글에서는 React 앱 전체 성능 측정 + 렌더링 전략 최적화 방법을 다뤄볼게요 😊

반응형