
모든 공학자와 과학자는 세상에 존재하는 정성적 지표에 대해 측정 가능한 수치가 있기를 바라는 경향이 있어요.
프론트엔드 개발자 역시 필연적으로 커리어를 이어나가다 보면 어느 지점에서 ‘내가 좋은 웹을 만들고 있는게 맞나?’ 확인하고 싶어지는 지점이 생겨요.
모든 개발자가 한 번 쯤 들어본 적 있는 지표이자, 현재 가장 객관화 된 좋은 웹의 지표가 바로 Web Vitals 예요.
Web Vitals는 Google에서 측정한 ‘좋은 사용자 경험을 제공하는 웹’임을 측정하기 위한 이니셔티브예요.
몇가지 요소가 더 있긴 하지만 대부분의 경우 아래 세가지 지표만 보면 돼요.
이 세가지 지표는 특히 중요해서 Core Web Vitals 라는 이름으로 따로 분류돼요.
LCP는 ‘웹 사이트의 가장 큰 사이즈를 차지하는 요소가 다 그려지기 까지 걸리는 시간’이예요.
‘가장 큰 사이즈의 콘텐츠’는 일반적인 경우 해당 페이지에서 ‘가장 중요한 요소’일 가능성이 높아요.
그래서 웹사이트의 다른 부분은 다 차치하더라도 해당 요소만큼은 빨리 떠야 사용자가 가장 중요한 정보를 빠르게 획득 했다고 느끼기에 해당 지표를 중요하게 보는거예요.
INP는 ‘사용자가 무언가의 상호작용을 한 이후 페이지에 변화가 일어나기 시작한 시점까지의 시간’ 이예요
사용자가 버튼을 누를 때 내부적으로 Javascript가 처리되거나 HTTP 요청이 일어나게 될거예요.
그 다음에는 해당 버튼을 누른 결과가 시각적으로 표시 될텐데 이는 사용자의 응답을 얼마나 빨리 처리하고 반응을 했는지 확인하는 지표라서 사용자 경험에 중대한 영향을 미친다고 판단해요.
CLS는 ‘컨텐츠가 부분적으로 로드 된 이후 레이아웃의 위치가 얼마나 흔들리냐’를 측정한 결과예요.
이 지표에 영향을 미치는 요소는 다음과 같아요.
위 요소들은 크기를 지정하지 않으면 다운로드 이전에는 크기를 계산할 수 없어서 브라우저가 임의의 크기 값으로 배치해 두었다가 다운로드 이후 크기를 확정하는 요소들이예요.
이러한 요소들은 웹사이트에 배치 된 요소의 위치를 변경하는데, 사용자가 버튼을 누르려고 할 때나 긴 글을 읽고 있을 때 갑자기 위치가 바뀌어버리면 버튼을 잘못 누르거나 글의 맥락을 놓치게 되어 사용자 경험에 치명적이예요.
그래서 이런 요소를 관리할 때는 요소의 크기를 사전에 확정하거나 크기가 변동 되어도 다른 요소에 영향을 미치지 않는 곳에 배치 되어야 해요.
<img
src="image.jpg"
width={400}
height={300} // 명시적 크기 지정
alt="예시"
/>
이런식으로 고정 크기를 주면 CLS 점수를 확보할 수 있어요.
Web Vitals는 Chrome의 Lighthouse를 통해 측정하거나

NPM의 Web Vitals 의존성을 사용하여 런타임에서 측정할 수 있어요.
import { useEffect } from 'react';
import { onCLS, onFCP, onINP, onLCP, onTTFB } from 'web-vitals';
export default function WebVitals() {
return import.meta.env.DEV ? <WebVitalsLogger /> : null;
}
function WebVitalsLogger() {
useEffect(() => {
onCLS(console.log);
onINP(console.log);
onLCP(console.log);
onFCP(console.log); // Core Web Vitals는 아님
onTTFB(console.log); // Core Web Vitals는 아님
}, []);
return null;
}
측정 방법으로 Lighthouse를 사용하건, Web Vitals 의존성을 사용하건 측정값과 함께 같이 돌아오는 값이 있는데 그것은 바로 ‘성적표’예요.
실제로 Lighthouse를 돌려보면 직관적인 초록색과 함께 시각적인 만족감을 줘요.

Web Vitals를 사용해서 측정해도 good 이라는 성적표가 같이 따라오는걸 볼 수 있어요.
](https://velog.velcdn.com/images/univdev/post/205fbb56-d875-49e7-a8f9-52ae39bf3188/image.png)
그래서 많은 개발자들이 ‘Lighthouse 성능 점수 98점을 목표로 하겠어’ 와 같은 추상적인 목표를 내세우지만 정작 이 점수가 어떤 식으로 매겨지는지 모르는 경우가 많아요.
Chrome User Experience Report 라는게 있어요.
Google Chrome을 사용하여 웹서핑을 하는 모든 사용자들의 데이터를 수집하여 만족도와 이탈율 등을 측정하여 ‘어떤 지표가 어떤 값일 때 경험이 가장 좋더라’ 라는 상관 관계를 찾아내어 각 지표의 기준 점수를 정한거예요.
CrUX로 수집되는 사이트의 기준은 두가지예요.
아마 여러분의 서비스가 공개 되어 있고 인기가 있다면 여러분은 CrUX 데이터의 정확도를 높이는 기여를 하고 있었던거예요.
CrUX로 수집 된 데이터로 확정한 가장 좋은 웹의 기준은 다음과 같아요.
이 기준을 충족하면 Core Web Vitals를 잘 준수한거예요.
Lighthouse에서 측정하는 네가지 지표 중 ‘성능’지표만 Web Vitals와 연관 되어 있어요. 접근성, 권장사항, SEO 최적화는 각각 다른 지표를 가지고 측정해요.
심지어 ‘성능’ 지표도 Core Web Vitals으로만 이루어진게 아니예요.
실제로 Web Vitals는 TTFB, FCP, TTI의 요소가 더 있어요.
Core Web Vitals는 사용자의 직접 경험과 연관이 깊어요.
구글과 같은 포털사이트에서 상위 페이지에 랭크 되는데 중요한 영향을 미쳐서 굉장히 중요해요.