Core Web Vitals: 웹 성능 측정 및 개선 방법
사이트가 로드되지만 사용자는 여전히 이탈합니다. 느린 로드 시간, 예상치 못한 레이아웃 이동, 응답하지 않는 상호작용은 방문자를 frustrate하고 검색 순위를 떨어뜨립니다. Core Web Vitals(CWV)는 Google의 사용자 경험 지표이며 SEO에 직접적인 영향을 미칩니다. 이 가이드에서는 실행 가능한 단계를 통해 측정하고 개선하는 방법을 보여줍니다.
Core Web Vitals란?
Core Web Vitals는 사용자 경험의 핵심 측면을 정량화하는 세 가지 지표입니다:
- 최대 콘텐츠 페인트(LCP): 로딩 성능을 측정합니다. 가장 큰 콘텐츠 요소(이미지, 텍스트 블록, 비디오)가 표시되는 데 걸리는 시간입니다. 양호: ≤ 2.5초.
- 최초 입력 지연(FID): 상호작용성을 측정합니다. 사용자가 처음 상호작용(클릭, 탭, 키 누름)한 시점부터 브라우저가 응답할 때까지의 시간입니다. 양호: ≤ 100밀리초.
- 누적 레이아웃 이동(CLS): 시각적 안정성을 측정합니다. 페이지 로드 중 예상치 못한 레이아웃 이동을 정량화합니다. 양호: ≤ 0.1.
이 지표는 Google의 페이지 경험 신호의 일부이며 검색 순위에 영향을 미칩니다. 또한 실제 사용자 경험을 반영하므로 개선하면 SEO와 사용자 만족도 모두에 도움이 됩니다.
Core Web Vitals 측정 방법
필드 데이터(실제 사용자 측정)와 랩 데이터(합성 테스트)가 필요합니다. 완전한 그림을 위해 둘 다 사용하세요.
필드 데이터 도구
- Chrome 사용자 경험 보고서(CrUX): 실제 사용자 지표의 공개 데이터 세트입니다. PageSpeed Insights, Search Console 또는 BigQuery를 통해 액세스하세요.
- PageSpeed Insights: URL에 대한 필드 데이터(사용 가능한 경우)와 랩 데이터를 표시합니다.
- Search Console Core Web Vitals 보고서: URL을 상태(나쁨, 개선 필요, 양호)별로 그룹화합니다.
- web-vitals JavaScript 라이브러리:
import {onLCP, onFID, onCLS} from 'web-vitals';로 자체 필드 데이터를 수집하고 분석 엔드포인트로 전송하세요.
랩 데이터 도구
- Lighthouse: Chrome DevTools에 내장되어 있습니다. 성능, 접근성, SEO에 대한 감사를 실행하세요. 랩 지표와 개선 기회를 제공합니다.
- WebPageTest: 사용자 정의 네트워크 조건과 워터폴 차트를 사용한 고급 테스트입니다.
- Chrome DevTools 성능 패널: 런타임 성능을 기록하여 긴 작업과 렌더링 문제를 식별하세요.
최대 콘텐츠 페인트(LCP) 개선
LCP는 종종 가장 영향력 있는 지표입니다. 중요한 렌더링 경로와 가장 큰 요소를 최적화하세요.
1. 가장 큰 요소 최적화
- LCP가 이미지인 경우: 압축하고 최신 형식(WebP, AVIF)을 사용하며 레이아웃 이동을 방지하기 위해
width및height속성을 설정하세요. - LCP 이미지 미리 로드:
<link rel="preload" as="image" href="#">. srcset및sizes를 사용한 반응형 이미지를 사용하세요.- LCP가 텍스트인 경우: 글꼴이 빠르게 로드되도록 하세요.
font-display: swap을 사용하고 주요 글꼴을 미리 로드하세요.
2. 렌더링 차단 리소스 제거
- 중요 CSS를 인라인화하고 중요하지 않은 CSS를 지연시키세요.
- JavaScript를 지연 또는 비동기로 로드:
<script src="#" defer></script>. - CSS와 JavaScript를 최소화하세요.
3. 서버 응답 시간 개선
- CDN을 사용하여 사용자와 더 가까운 위치에서 자산을 제공하세요.
- 캐싱 활성화(HTTP 캐시 헤더, 서비스 워커).
- 백엔드 성능 최적화(데이터베이스 쿼리, 서버 측 캐싱).
4. 페이로드 크기 줄이기
- 이미지를 압축하고 화면 아래 이미지에는 지연 로딩을 사용하세요.
- 사용하지 않는 JavaScript와 CSS를 제거하세요.
- 코드 분할을 사용하여 필요한 코드만 로드하세요.
최초 입력 지연(FID) 개선
FID는 응답성을 측정합니다. 긴 JavaScript 작업은 메인 스레드를 차단하여 상호작용 처리를 지연시킵니다.
1. 긴 작업 분할
setTimeout 또는 requestIdleCallback을 사용하여 메인 스레드에 양보하세요. 또는 지원되는 경우 scheduler.yield()를 사용하세요.
// 예: 작업 청크 후 메인 스레드에 양보
async function processInChunks(items) {
for (let i = 0; i < items.length; i++) {
// 항목 처리
if (i % 50 === 0) {
await new Promise(resolve => setTimeout(resolve, 0));
}
}
}
2. 이벤트 핸들러 최적화
- 고빈도 이벤트(스크롤, 리사이즈, 입력)를 디바운스 또는 스로틀하세요.
- 터치 및 휠 이벤트에 패시브 이벤트 리스너 사용:
element.addEventListener('touchstart', handler, {passive: true});. - 이벤트 핸들러에서 무거운 작업을 피하고 Web Worker로 오프로드하세요.
3. JavaScript 실행 시간 줄이기
- 코드 분할 및 중요하지 않은 JavaScript 지연 로드.
- 사용하지 않는 종속성 제거.
- 트리 셰이킹 및 최소화 사용.
누적 레이아웃 이동(CLS) 개선
CLS는 시각적 안정성을 측정합니다. 예상치 못한 이동은 사용자를 짜증나게 하고 잘못된 클릭을 유발합니다.
1. 항상 크기 속성 포함
이미지와 비디오의 경우 width 및 height를 설정하거나 aspect-ratio CSS를 사용하여 브라우저가 공간을 예약하도록 하세요.
2. 동적 콘텐츠를 위한 공간 예약
- 광고, 임베드 또는 동적 콘텐츠의 경우 고정 치수의 플레이스홀더를 사용하세요.
- 사용자 상호작용에 대한 응답이 아닌 한 기존 콘텐츠 위에 콘텐츠를 삽입하지 마세요.
3. 변환 애니메이션 사용
애니메이션에는 CSS transform 및 opacity를 선호하세요. 이들은 레이아웃 이동을 유발하지 않습니다.
4. 글꼴을 신중하게 로드
보이지 않는 텍스트와 레이아웃 이동을 피하려면 font-display: optional 또는 swap을 사용하세요. 주요 글꼴을 미리 로드하세요.
지속적인 개선을 위한 도구 및 워크플로
성능은 지속적인 과정입니다. 측정을 개발 프로세스에 통합하세요.
- 파이프라인에서 Lighthouse CI를 사용하여 회귀를 포착하세요.
- web-vitals 및 분석을 통해 필드 데이터를 모니터링하세요.
- 성능 예산을 설정하고 위반 시 경고하세요.
빠른 확인을 위해 TryQuickToolBox의 Nginx 로그 분석기를 사용하여 LCP에 영향을 줄 수 있는 느린 서버 응답을 찾아보세요.
FAQ
Core Web Vitals의 현재 임계값은 무엇인가요?
LCP: 양호 ≤ 2.5초, 개선 필요 ≤ 4초, 나쁨 > 4초. FID: 양호 ≤ 100밀리초, 개선 필요 ≤ 300밀리초, 나쁨 > 300밀리초. CLS: 양호 ≤ 0.1, 개선 필요 ≤ 0.25, 나쁨 > 0.25. 이는 페이지 로드의 75번째 백분위수에서 평가됩니다.
Core Web Vitals를 얼마나 자주 측정해야 하나요?
분석 및 Search Console을 통해 필드 데이터를 지속적으로 모니터링하세요. 모든 중요한 코드 변경 시 및 최소 월 1회 기준 검사를 위해 랩 테스트를 실행하세요.
Core Web Vitals 개선이 실제로 SEO에 영향을 미치나요?
예, Google은 Core Web Vitals를 포함한 페이지 경험 신호를 순위 요소로 사용합니다. 콘텐츠가 여전히 주요하지만, 좋은 CWV는 특히 경쟁이 치열한 분야에서 우위를 점할 수 있습니다.
최적화할 준비가 되셨나요? PageSpeed Insights로 현재 점수를 측정한 다음 가장 큰 기회를 해결하세요. 빠른 서버 측 확인을 위해 Nginx 로그 분석기를 사용하여 LCP를 저하시킬 수 있는 느린 백엔드 응답을 식별하세요.