이설아
Study

06. 리액트 개발 도구로 디버깅 하기

6.1 리액트 개발 도구란?

  • 리액트 팀에서 제공하는 개발 도구 react-dev-tools
  • 다양한 애플리케이션을 디버깅하기 위해 만들어짐
  • 브라우저 확장 프로그램으로 설치하여 사용 가능

6.2 리액트 개발 도구 설치

  • 브라우저 확장 도구로 설치하기

6.3 리액트 개발 도구 활용하기

컴포넌트

컴포넌트 트리

  • 애플리케이션의 전체 트리 구조를 한눈에 보여줌
  • 기명함수 → 해당 컴포넌트 보여줌 익명함수 → Anonymous라는 이름으로 보여줌
  • 기명함수로 바꾸기 어려우면 displayName 속성 추가하기

컴포넌트명과 props

  • 컴포넌트 선택 시 해당 컴포넌트에 대한 자세한 정보 제공

프로파일러

  • 컴포넌트 트리가 아닌 렌더링하는 과정에서 발생하는 상황을 확인하기 위한 도구 ⇒ 어떤 컴포넌트가 렌더링 되었는지, 몇 차례 되었는지 확인

Flamegraph

  • 렌더 커밋 별로 어떠한 작업이 일어났는지 나타냄

Ranked

  • 해당 커밋에서 렌더링하는데 오랜 시간이 걸린 컴포넌트를 순서대로 나열한 그래프

타임라인

  • 시간이 지남에 따라 컴포넌트에서 어떤 일이 일어났는지 확인 가능

07. 크롬 개발자 도구를 활용한 애플리케이션 분석

7.1 크롬 개발자 도구란?

  • 크롬에서 제공하는 개발자용 도구로, 웹에서 일어나는 거의 모든 일을 확인 가능
  • 제대로된 디버깅을 원한다면 시크릿모드에서 하는 것을 권장

7.2 요소 탭

  • 현재 웹을 구성하고 있는 HTML, CSS 등의 정보를 확인 가능

7.3 소스 탭

  • 웹을 불러오기 위해 실행하거나 참조된 모든 파일 확인 가능
  • 소스 코드에 중단점을 만들어 디버깅 가능

7.4 네트워크 탭

  • 웹을 접속하는 순간부터 발생하는 모든 네트워크 관련 작동 기록

7.5 메모리 탭

  • 웹페이지가 차지하고 있는 메모리 관련 정보 확인 가능

자바스크립트 인스턴스 VM 선택

  • 디버깅하고 싶은 JS VM 환경 선택 ⇒ 환경 별 힙 크기를 보면 얼마나 점유하고 있는지 나타남

힙 스냇샵

  • 현재 페이지의 메모리 상태를 확인해 볼 수 있는 메모리 프로파일 도구
  • 스냅샷을 두개 이상 찍어서 차이를 비교하는 것이 수월
  • 스냅샷 활용 시 useMemouseCallback과 같은 의존성이 있는 값들이 렌더링 사이에서 유지되는지 확인 가능

타임라인 할당 계측

  • 시간의 흐름에 따라 메모리 변화를 확인할 수 있는 기능

할당 샘플링

  • 할당 계측과 비슷하지만, JS 실행 스택별로 분석 가능하며, 해당 분석을 함수 단위로 함

7.6 Next.js 환경 디버깅하기

Next.js 프로젝트를 디버그 모드로 실행하기

  • package.json 파일에 명령어를 수정
"dev": NODE_OPTIONS='inspect' next dev

Next.js 서버에 트래픽 유입시키기

  • 아파치의 ab 명령어
  • 서버 성능 검사 ⇒ 50개의 요청을 10000번 시도