노트

크롬 개발자 도구 팁

Chrome DevTools

프런트엔드#tooling#debugging · 연결된 개념 14개

쉽게 말하면

크롬 개발자 도구는 정비소의 진단 장비처럼 페이지 속을 열어 보는 도구예요. 요소, 네트워크, 콘솔 같은 칸마다 숨은 기능을 알아 두면 어디가 고장 났는지 훨씬 빨리 찾아요.

비유가 깨지는 곳 진단기처럼 보기만 하는 건 아니에요. 스타일을 바로 고쳐 보고, 느린 네트워크와 저사양 CPU를 흉내 내고, 요청을 cURL로 복사해 백엔드에 재현 방법으로 넘길 수도 있어요.

크롬 DevTools에서 알아 두면 디버깅 시간이 줄어드는 기능 모음. 대부분 다른 크로미움(Chromium) 브라우저에서도 같다.

요소(Elements)

  • Cmd+Shift+C(Windows Ctrl+Shift+C)로 화면에서 요소를 바로 고른다
  • 고른 요소는 콘솔에서 $0, 그 전에 골랐던 것들은 $1~$4로 참조한다. 예: 동영상 요소를 골라 $0.playbackRate = 2로 재생 속도 바꾸기
  • 스타일 패널의 +로 임시 스타일시트를 만들어 * { outline: 1px solid red }를 넣으면 모든 상자의 경계가 보인다
  • Computed 탭에서 최종 적용된 값과 그 값을 준 규칙을 찾는다. 글꼴이 여러 개 지정됐을 때 실제 렌더링된 폰트도 여기서 확인한다 → CSS 캐스케이드
  • flex·grid 컨테이너 옆 배지를 누르면 Flexbox·CSS Grid 오버레이와 속성 편집기가 뜬다
  • 요소 우클릭: 전역 변수로 저장, 노드 스크린샷, 하위 노드 전부 펼치기

네트워크(Network)

  • 스로틀링(Throttling)으로 느린 네트워크를 흉내 낸다. "Disable cache"로 캐시 없이 테스트한다
  • 필터에 status-code:404, method:POST, domain: 같은 키워드를 쓰고, 앞에 -를 붙이면 제외한다
  • 요청 우클릭 → Copy as cURL / Copy as fetch로 같은 요청을 터미널이나 콘솔에서 다시 보낸다. 백엔드에 재현 방법을 넘길 때 좋다
  • 표 머리 우클릭으로 Path 열을 켜면 파일 전체 경로가 보인다

콘솔(Console)

  • 다른 탭에서 Esc를 누르면 콘솔이 아래 서랍으로 뜬다
  • $('sel'), $$('sel')은 querySelector, querySelectorAll의 단축이다
  • console.log({ x, y })처럼 객체로 감싸면 변수 이름이 함께 찍힌다. console.table(arr, ['col'])은 표로 보여 준다
  • console.log('%c강조', 'color: orange; font-size: 2em')처럼 %c 뒤에 CSS를 주면 스타일이 입혀진다. %c마다 인자를 하나씩 받는다
  • console.dir(el)은 DOM(Document Object Model) 요소를 HTML 트리가 아닌 JS(JavaScript) 객체(속성 목록)로 보여 준다. console.log(el)은 요소 트리로 보여 준다
  • Preserve log를 켜면 페이지를 이동해도 로그가 남는다. Live expression(눈 아이콘)으로 값을 계속 지켜본다
  • iframe 안을 디버깅할 때는 콘솔 위 컨텍스트 선택기에서 iframe을 고른다
  • document.designMode = 'on'이면 페이지 글자를 바로 고쳐 볼 수 있다

성능·렌더링

  • Performance 패널의 CPU(Central Processing Unit) 스로틀링으로 저사양 기기를 흉내 낸다. 보라색 Layout 블록의 "Forced reflow" 경고로 레이아웃 스래싱을 찾는다
  • Rendering 패널의 Paint flashing으로 다시 칠하는 영역을, Frame Rendering Stats로 FPS(Frames Per Second)를 실시간으로 본다
  • Coverage 탭으로 쓰이지 않는 JS·CSS를 찾는다 → 번들 크기 줄이기
  • Cmd+Shift+P 명령 메뉴에서 대부분의 기능을 이름으로 찾을 수 있다. 기기 모드에서 "Capture full size screenshot"으로 페이지 전체를 캡처한다

소스(Sources)

  • 코드에 debugger;를 넣으면 그 줄에서 멈춘다. {} 버튼으로 압축된 코드를 펼친다
  • 자주 쓰는 스크립트는 Snippets에 저장해 두고 실행한다

출처: DevTools Tips · Chrome DevTools — Console Utilities API reference

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 크로스 브라우징

    크로스 브라우징은 브라우저 종류·버전·기기가 달라도 웹 페이지가 같은 기능을 제공하도록 만드는 일이다. 모든 브라우저에서 픽셀까지 똑같이 보이게 하는 것이 목표가 아니라, 지원하기로 한 환경에서 핵심 기능이 동작하고 오래된 환경에서도 쓸 수는 있게(점진적 향상, Progressive Enhancement) 하는 것이 목표다.

  • localStorage와 sessionStorage

    브라우저에 문자열 키-값을 저장하는 Web Storage API의 두 가지. 쿠키와 달리 요청에 자동으로 실리지 않고, 출처 단위로 나뉘며(same-origin-policy), 보통 출처당 5MB 안팎을 쓸 수 있다. 동기 API라 큰 데이터를 자주 읽고 쓰면 메인 스레드를 막는다.

  • 반응형 웹 디자인

    하나의 페이지가 화면 크기와 기기에 맞춰 레이아웃·이미지·글자 크기를 바꾸도록 만드는 접근. 미디어 쿼리(Media Query), 유연한 레이아웃(Flexible Layout), 반응형 미디어(Responsive Media)가 세 축이다.

  • XSS

    XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.

  • 운영 Node 프로세스의 메모리 누수 찾기

    살아 있는 Node 서버에 inspector를 붙이고, 힙 스냅샷 두 장을 비교해 무엇이 쌓이는지, retainer로 누가 붙잡고 있는지 찾는 절차.

보기 옵션