장경은
Study

[6장] 리액트 개발 도구로 디버깅하기

리액트 개발 도구란?

  • 리액트 팀은 리액트 애플리케이션의 원활한 개발을 위한 개발 도구인 react-dev-tools를 만들어 제공하고 있다.

리액트 개발 도구 활용하기

컴포넌트

  • Components 탭에서는 현재 리액트 애플리케이션의 컴포넌트 트리를 확인할 수 있다.
  • props와 hooks 등 다양한 정보를 확인할 수 있다.
  • 컴포넌트 트리
    • 리액트 애플리케이션 전체의 트리 구조를 한 눈에 보여준다.
    • tsMemoizedComponent.displayName = '메모 컴포넌트입니다.'; -> displayName을 설정하면 리액트 개발자 도구에서 컴포넌트명을 확인할 수 있다.
  • 컴포넌트 도구
    • 눈 아이콘을 누르면 해당 컴포넌트가 HTML의 어디에서 렌더링됐는지 확인할 수 있다.
    • 누르는 즉시 크롬 개발 도구의 메뉴 중 하나인 요소(Element) 탭으로 즉시 이동한다.
    • 벌레 아이콘을 클릭하면 콘솔 탭에 해당 컴포넌트의 정보가 console.log()를 통해 기록된다.
    • 소스코드 아이콘을 클릭하면 소스 코드를 확인할 수 있고, 버튼을 눌러 난독화된 코드를 볼 수 있도록 된다.
  • 컴포넌트 hooks
    • 훅에 넘겨주는 함수를 익명 함수 대신 기명 함수로 넘겨주면 해당 훅을 실행할 때 실행되는 함수의 이름을 확인할 수 있다.
    • hooks도 props도 값을 더블클릭해 원하는 값으로 수정할 수 있다.

프로파일러

  • 컴포넌트 메뉴가 정적인 현재 리액트 컴포넌트 트리의 내용을 디버깅하기 위한 도구라면 프로파일러는 리액트가 렌더링하는 과정에서 발생하는 상황을 확인하기 위한 도구다.
  • General 탭의 Highlight updates when components render: 컴포넌트가 렌더링될 때마다 해당 컴포넌트에 하이라이트를 표시한다. 이 기능은 매우 유용한 기능이므로 꼭 켜두는 것이 좋다.
  • Profiler 탭의 Record why each component rendered while profiling: 프로파일링 도중 무엇 때문에 컴포넌트가 렌더링됐는지 기록한다. 애플리케이션 속도가 조금 느려질 수는 있지만 디버깅에 도움이 되는 옵션이므로 켜두는 것이 좋다.
  • Flamegraph 탭에서는 렌더 커밋별로 어떠한 작업이 있어났는지 나타난다.

타임라인

  • Timeline에서는 시간이 지남에 따라 컴포넌트에서 어떤 일이 일어났는지를 확인할 수 있다.

[7장] 크롬 개발자 도구를 활용한 애플리케이션 분석

  • 브라우저 환경에서 발생할 수 있는 문제를 디버깅할 수 있는 도구를 브라우저 개발자 도구라고 한다.
  • 시크릿 모드 또는 프라이빗 모드라 불리는 개인정보 보호 모드에서 페이지와 개발자 도구를 여는 것을 권장한다.
  • 소스 탭에서는 소스 중단점을 생성해 자바스크립트 실행을 중단시키고 디버깅을 수행할 수 있다.
  • 소스 탭의 호출 스택에서는 해당 시점의 실행 콘텍스트가 어떻게 저장되어 어떤 모습을 하고 있는지 볼 수 있다.
  • 네트워크 탭에서는 동일한 주소의 요청이 두 번 실행되는지 확인해볼 수 있다.
  • 메모리 탭에서는 애플리케이션에서 발생하는 메모리 누수, 속도 저하, 혹은 웹페이지 프리징 현상을 확인할 수 있다.
  • 타임라인 할당 계측은 시간에 흐름에 따라 메모리 변화를 확인할 수 있는 기능이다.
  • 할당 샘플링은 이에 더해 자바스크립트 실행 스택별로 분석할 수 있다.

Next.js 환경 디버깅하기

  • Next.js 프로젝트를 디버그 모드로 실행하기 "dev": NODE_OPTIONS='--inspect' next dev
  • ab를 이용하여 HTTP 서버의 성능을 벤치마킹하기 ab -k -c 50 -n 10000 "http://127.0.0.1:3000/"
  • 이러한 디버깅을 통해 메모리 성능 등을 확인할 수 있다.

정리

  • 꼭 리액트로 만들어진 웹페이지가 아니더라도 웹페이지의 작동 방식을 자세히 이해하고 싶다면 개발자 도구를 적극 활용하자.