Lighthouse는 성능, 접근성, 모범 사례, SEO를 빠르게 점검해. 점수보다 실제 사용자를 막는 문제를 먼저 고치는 법을 익혀 보자.
Lighthouse 돌리기
Chrome DevTools → Lighthouse 탭 → 카테고리 (performance, accessibility, 모범 사례, SEO) 선택 → 프로덕션 모드 (dev server 아닌 npm run preview로 시작)에 돌림. 카테고리별 점수와 관련 문서 링크가 붙은 문제 목록을 받을 수 있어.
성능 점수
메트릭 구동: LCP (largest contentful paint), TBT (total blocking time), CLS (cumulative layout shift). SPA 엔 보통 LCP와 TBT가 dominant. 승리: 코드 분할 (Track 8 lesson 2), below-the-fold 이미지 lazy-load, font-display: swap, <head>. 의 렌더링-blocking JS 제거해.
접근성 바닥 (모든 SPA가 필요한 것)
- Semantic HTML:
<div onClick>아닌<button>, 구조에<nav>/<main>/<article>, 모든 input에<label>. - 키보드 네비게이션: 모든 interactive element가 Tab으로 도달 가능, 보이는 focus 링 (대체 없이
outline: none마). - 색 대비: 텍스트가 WCAG AA 통과 (보통 텍스트 4.5:1, 큰 텍스트 3:1). Lighthouse가 특정 element와 함께 실패 플래그.
- HTML 부족할 때 ARIA: 아이콘 전용 버튼에
aria-label, 에러 toast에role="alert", 스트리밍 컨텐츠에aria-live. - 페이지 타이틀 &. meta: 모든 라우트가
document.title설정 (또는react-helmet-async같은 라이브러리).
Best-practices 바닥
프로덕션에 HTTPS. Console 에러 없어. Deprecated API 없어. 에러 추적용 source map 가능해. 프로덕션에 CSP 헤더 (Content Security Policy). Lighthouse가 놓친 거 플래그.
접근성이 디폴트, feature 아니야. 처음부터 semantic HTML 작성 + 키보드 네비게이션 존중하면 시도 없이 Lighthouse의 대부분 a11y 체크 통과. '나중에 추가할 거' 로 취급하면 몇 주 동안 div를 button으로 리팩토링. 처음에 올바르게 하는 게 싸.