다음 페인트와의 상호작용 (INP (Interaction to Next Paint))
INP (Interaction to Next Paint)
INP(Interaction to Next Paint)는 사용자의 입력부터 다음 화면 렌더링까지의 지연 시간을 측정하는 코어 웹 바이탈 지표입니다. 200ms 이하를 유지해야 검색엔진 최적화(SEO)와 사용자 경험(UX) 이탈률을 방어할 수 있습니다.
INP(Interaction to Next Paint)는 사용자의 입력부터 다음 화면 렌더링까지의 지연 시간을 측정하는 코어 웹 바이탈 지표입니다. 200ms 이하를 유지해야 검색엔진 최적화(SEO)와 사용자 경험(UX) 이탈률을 방어할 수 있습니다.
📖 개념 정의 및 실무 적용
INP는 구글이 기존의 FID(First Input Delay)를 대체하여 도입한 핵심 웹 성능 지표로, 페이지 로드 시점의 첫 반응뿐만 아니라 전체 세션 동안 발생하는 모든 클릭, 탭, 키보드 인터랙션의 응답성을 평가합니다. 반응 속도가 느리면 사용자는 서비스가 버벅인다고 느끼며 즉시 이탈하게 되므로, 전자상거래 전환율과 SEO 랭킹 모두에 직접적인 타격을 줍니다.
💻 실무 활용 코드 스니펫 (JAVASCRIPT)
const observer = new PerformanceObserver((list) => { for (const entry of list.getEntries()) { if (entry.duration > 200) { console.warn('Long INP detected:', entry.duration, entry); } } }); observer.observe({ type: 'event', buffered: true, durationThreshold: 16 });
⚡ 5분 만에 적용하는 실행 스텝
- Chrome DevTools의 Performance 패널을 열고 사용자의 실제 인터랙션을 시뮬레이션하여 Long Task를 식별합니다.
- Web Vitals JavaScript 라이브러리를 사이트에 주입하여 실제 유저(RUM)의 INP 데이터를 수집하고 GA4나 BigQuery로 전송합니다.
- 메인 스레드를 오래 점유하는 무거운 이벤트 핸들러(예: 복잡한 DOM 조작, 긴 복잡한 연산)를 찾아내어 비동기 처리합니다.
- 개선 후 Search Console과 RUM 도구를 통해 P75 INP 점수가 200ms 이하로 떨어졌는지 모니터링합니다.
이벤트 핸들러 내부에서 DOM을 읽고 쓰는 작업을 번갈아 수행하면 강제 레이아웃(Layout Thrashing)이 발생해 INP가 급격히 나빠집니다. 읽기 작업과 쓰기 작업을 각각 일괄 처리하도록 코드를 분리하세요. 또한, 무거운 연산은 Web Worker로 오프로드하여 메인 스레드를 항상 가볍게 유지하는 것이 핵심 노하우입니다.
초보자는 단순히 페이지 초기 로딩 속도(LCP) 개선에만 집중하여 INP 악화의 주원인인 ‘메인 스레드 블로킹’을 방치하는 실수를 범합니다. 방지책으로는 반드시 사용자가 실제로 클릭하거나 스크롤하는 상황을 가정하여 인터랙션 중심의 프로파일링을 수행해야 합니다.
❓ 자주 묻는 질문 (FAQ)
A. FID는 페이지 최초 로드 시 발생한 첫 번째 입력의 지연 시간만 측정하지만, INP는 사용자가 페이지에 머무는 동안 발생한 모든 인터랙션의 지연을 측정하여 가장 안 좋은 상위 값을 평가합니다.
A. Chrome DevTools의 Performance 탭에서 빨간색으로 표시되는 ‘Long Task’를 확인하여, 어떤 이벤트 리스너가 메인 스레드를 50ms 이상 점유하고 있는지 분석해야 합니다.