Interaction to Next Paint(INP)

INP의 200 ms 기준과 측정 방식, 입력·처리·표시 지연 진단, 긴 작업과 이벤트 핸들러 및 서드파티 스크립트 최적화 방법을 설명합니다.

최초 게시: 2026년 6월 26일 · 최근 업데이트: 2026년 8월 9일 · Advanced
언어

INP는 방문 전체의 클릭·탭·키보드 상호작용부터 다음 페인트까지의 지연을 측정하는 Core Web Vital입니다. 필드 데이터 p75에서 200 ms 이하는 좋음, 500 ms 초과는 나쁨입니다. 입력 지연·처리 시간·표시 지연을 나눠 진단하고 긴 작업을 쪼개며 scheduler.yield()로 메인 스레드에 양보하고 서드파티 스크립트를 지연하세요.

요약 — INP는 반응성을 나타내는 Core Web Vital입니다. 방문 중 발생한 모든 클릭·탭·키보드 상호작용의 지연을 관찰하고 일흔다섯 번째 백분위수 값(상호작용 50회마다 이상치 하나 제외)을 보고합니다. FID처럼 첫 입력만 보지 않습니다. 상호작용 지연 = 입력 지연 + 처리 시간 + 표시 지연입니다. 필드 데이터의 p75에서 좋음은 200 ms 이하, 나쁨은 500 ms 초과입니다. 2024년 3월 12일 FID를 대체했고, 2024년 9월 도구에서 FID가 완전히 제거됐습니다. 긴 작업을 나누고 scheduler.yield()로 메인 스레드에 양보하며, 이벤트 핸들러 작업과 DOM을 줄이고 서드파티 스크립트를 지연해 개선하세요. 필드 지표이므로 실험실 대용 지표는 Total Blocking Time이며, 두 값이 항상 일치하지는 않습니다.

INP가 측정하는 것과 FID와의 차이

Google의 정의는 명확합니다. INP는 “assesses a page’s overall responsiveness to user interactions by observing the latency of all click, tap, and keyboard interactions that occur throughout the lifespan of a user’s visit to a page.” (번역) 「사용자의 페이지 방문 전체 기간에 발생하는 모든 클릭·탭·키보드 상호작용의 지연을 관찰해 페이지의 전반적인 반응성을 평가합니다.」

Evidence for this claim INP observes click, tap, and keyboard interaction latency throughout a page visit rather than measuring only the first input delay. Scope: Current web.dev INP definition and qualifying interaction types. Confidence: high · Verified: web.dev: Interaction to Next Paint

‘방문 전체 기간의 모든 상호작용’이라는 표현이 핵심입니다. INP는 로드 시간 지표가 아니라 방문 단위 지표입니다. Google의 논리는 사용자가 페이지에서 보내는 시간 대부분이 로드 이므로 첫인상뿐 아니라 실제 사용 중 반응성이 더 중요하다는 것입니다.

First Input Delay와 비교하면 가장 쉽게 이해할 수 있습니다. “FID only measured the input delay of the first interaction on a page. INP improves on FID by observing all interactions on a page, beginning from the input delay, to the time it takes to run event handlers.” (번역) 「FID는 페이지 첫 상호작용의 입력 지연만 측정했지만, INP는 입력 지연부터 이벤트 핸들러 실행 시간까지 모든 상호작용을 관찰합니다.」 FID는 상호작용 하나에서 핸들러가 시작되기 전 대기 시간만 재고, 핸들러 실행 시간과 화면 업데이트 시간은 무시했습니다. INP는 모든 상호작용의 전체 지연을 측정합니다.

흔한 오해와 달리 INP는 문자 그대로 가장 느린 상호작용이 아닙니다. 무작위 급증 한 번 때문에 페이지가 불이익을 받지 않도록 브라우저는 상호작용 50회마다 이상치 하나를 제외한 뒤 페이지 조회수의 일흔다섯 번째 백분위수 값을 보고합니다. 상호작용이 적은 방문에서는 가장 느린 값이 되고, 많은 방문에서는 이상치 몇 개가 먼저 제외됩니다.

상호작용의 범위도 생각보다 좁습니다. 클릭·탭·키보드 입력만 측정하고 스크롤·마우스 오버·확대/축소는 명시적으로 제외합니다. 탭 한 번은 pointerdown, pointerup, click 같은 여러 이벤트를 발생시킬 수 있지만 INP는 세 개가 아니라 한 번의 상호작용으로 묶습니다. 이 그룹에서는 이벤트 시간을 합산하지 않고 가장 긴 개별 이벤트 시간을 사용합니다. 빠른 pointerdown과 느린 click이 함께 있으면 느린 이벤트 크기의 상호작용 하나로 보고됩니다. 방문 중 해당 상호작용이 없으면 INP도 보고되지 않습니다.

상호작용 지연의 세 부분

모든 상호작용 지연은 순서대로 세 부분으로 나뉩니다. 각 부분이 서로 다른 해결책을 가리키므로 이 모델을 기억하세요.

Interaction latency = Input delay + Processing duration + Presentation delay

  1. 입력 지연 — 보통 메인 스레드가 긴 작업을 마치느라 바빠 이벤트 핸들러가 시작되기 까지 기다리는 시간
  2. 처리 시간 — 모든 이벤트 핸들러 콜백이 실행되는 시간
  3. 표시 지연 — 핸들러 종료부터 브라우저가 화면에 다음 프레임을 그릴 때까지의 시간

web-vitals의 기여도 빌드는 세 값(inputDelay, processingDuration, presentationDelay)을 모두 제공하므로 실제 상호작용에서 어느 부분이 지배적인지 볼 수 있습니다. Web Almanac 2024 데이터에서는 중앙값 기준 표시 지연이 가장 큰 단일 부분인 경우가 많지만, 최적화 여지는 대개 처리 시간에 있습니다. 제대로 만들지 않은 페이지에서 특히 크게 늘어나는 부분이기 때문입니다.

INP measures the whole interaction. Attribute the delay to the waiting, handler, or presentation phase before choosing a fix. 출처: web.dev

The interaction begins with input delay while the event waits for the main thread. Processing duration follows while the event-handler callbacks execute. Presentation delay runs from the end of the handlers until the browser lays out and paints the next frame. Together these three sequential phases make up the interaction latency measured by INP.

© Patrick Stox LLC · CC BY 4.0 ·

기준값과 p75 필드 데이터 주의점

등급INP 값측정 기준
좋음≤ 200 ms필드 데이터 일흔다섯 번째 백분위수
개선 필요> 200 ms 및 ≤ 500 ms필드 데이터 일흔다섯 번째 백분위수
나쁨> 500 ms필드 데이터 일흔다섯 번째 백분위수

Google Search Central은 목표를 “an INP of less than 200 milliseconds” (번역) 「200밀리초 미만의 INP」라고 명시하고, 전체 프로그램을 “We highly recommend site owners achieve good Core Web Vitals for success with Search.” (번역) 「검색에서 성공하려면 사이트 소유자가 우수한 Core Web Vitals를 달성할 것을 강력히 권장합니다.」라고 설명합니다. 브라우저가 60 fps에서 약 16,7 ms마다 프레임을 그리려 한다는 점을 생각하면 200 ms 예산은 실제로 빠듯합니다. 모든 핸들러 작업과 렌더링을 합쳐 이 안에 들어와야 합니다.

Evidence for this claim INP is good at 200 milliseconds or less and poor above 500 milliseconds, assessed at the 75th percentile. Scope: Current web.dev INP thresholds for field measurement. Confidence: high · Verified: web.dev: Interaction to Next Paint

INP가 필드 지표인 이유(실험실 데이터만으로 부족한 이유)

많은 SEO 담당자가 빠지는 함정이 있습니다. Lighthouse 점수가 녹색이어도 INP가 좋다는 뜻은 아닙니다. 다만 ‘Lighthouse는 INP를 측정할 수 없다’는 말은 다음 세 경우로 구분해야 도구를 잘못 해석하지 않습니다.

  1. 상호작용 없는 표준 Lighthouse 실행은 INP를 전혀 보고하지 않습니다. 페이지 로드만 관찰하고 클릭·탭·입력을 하지 않기 때문입니다. 대신 로드 시간 대용 지표인 **Total Blocking Time(TBT)**을 사용합니다. Google은 “Because TBT correlates well with INP, a page with a high TBT is a reasonable indicator that there may be high INP values during load.” (번역) 「TBT는 INP와 상관관계가 높으므로 TBT가 높은 페이지는 로드 중 INP도 높을 수 있다는 합리적인 신호입니다.」라고 설명합니다. 핵심은 “during load.” (번역) 「로드 중」입니다. TBT는 십 초 뒤 지연 로드 위젯 때문에 나빠지는 상호작용을 설명하지 못하며, 어디까지나 대용 지표이지 대체값이나 환산식이 아닙니다.
  2. DevTools에서 실제 버튼을 누르거나 실험실 도구로 클릭을 스크립팅한 상호작용은 그 한 번에 대한 실제 INP 방식의 지연 값을 만듭니다. 특정 버그를 재현하는 데 유용하지만, 한 기기에서 실행한 한 경로일 뿐입니다. 실제 기기·사용자·대상과 방문 전체를 포괄하는 필드 데이터를 대신할 수 없습니다. Google 표현대로 값은 “will be dependent on what interactions are performed during the measurement period,” (번역) 「측정 기간에 수행된 상호작용에 따라 달라집니다」이며, 실제 사용자 행동은 한 번의 실험실 실행으로 대표하기엔 너무 다양합니다.
  3. 필드 분포가 INP 자체입니다. 따라서 권위 있는 출처는 필드 데이터, 즉 Chrome User Experience Report(CrUX)이며 PageSpeed Insights와 Search Console Core Web Vitals 보고서에 표시됩니다. “Field data is the best source of information you can draw on when it comes to understanding which interactions are problematic for actual users.” (번역) 「실제 사용자에게 어떤 상호작용이 문제인지 이해하는 데 필드 데이터가 가장 좋은 정보원입니다.」

실험실(1·2번)은 느린 상호작용을 찾아 재현하는 데 사용하고, 필드(3번)는 실제 방문자의 점수를 정말 낮추는지 확인하는 데 사용하세요.

INP 점수가 나쁜 이유

거의 모든 INP 문제는 사용자가 상호작용할 때 메인 스레드가 차단되는 데서 시작합니다. 흔한 원인은 다음과 같습니다.

  • 긴 작업. 메인 스레드 작업이 50 ms를 넘으면 긴 작업이며, 50 ms를 넘긴 시간이 ‘차단 구간’입니다. 실행 중에는 상호작용을 처리할 수 없습니다. 가장 큰 단일 원인입니다.
  • 무거운 이벤트 핸들러. 클릭·입력 핸들러 안에서 너무 많은 동기 작업을 하면 처리 시간이 직접 늘어납니다.
  • 큰 DOM. DOM이 클수록 렌더링 비용이 커져 입력 지연과 표시 지연이 모두 늘어납니다.
  • 서드파티 스크립트. Web Almanac에 따르면 동의 관리, 태그 관리자, 분석, 채팅 위젯이 주요 원인이며 단순 콘텐츠 사이트에도 영향을 줍니다. 직접 만들지 않은 페이지에서 가장 먼저 확인할 부분입니다.
  • 로드 후 JavaScript. 페이지가 그려졌다고 로드가 끝난 것은 아닙니다. 첫 페인트 후 평가되는 스크립트가 초기 상호작용을 막을 수 있습니다.

해결 방법

효과가 큰 순서로 정리하면 다음과 같습니다.

1. 긴 작업을 나누세요. Google의 핵심 조언은 핸들러에서 “do as little work as possible in them.” (번역) 「가능한 한 적은 작업만 하세요」입니다. 큰 작업을 작은 태스크로 쪼개 브라우저가 사이사이에 사용자 상호작용을 처리하게 하세요. 작업을 나누면 “the browser can respond to higher-priority work much sooner — including user interactions.” (번역) 「브라우저가 사용자 상호작용을 포함한 우선순위 높은 작업에 훨씬 빨리 응답할 수 있습니다.」

2. 메인 스레드에 양보하세요. 현대적인 권장 방식은 scheduler.yield()(Chrome 129+, Firefox 142+)입니다. await scheduler.yield()는 코드를 잠시 멈춰 브라우저가 대기 작업을 처리하게 한 뒤 우선순위를 유지해 재개합니다. 고전적인 대안 setTimeout(..., 0)도 동작하지만 코드를 태스크 큐 으로 보내며, 브라우저는 중첩 호출이 여러 번 이어지면 최소 5 ms를 적용합니다. isInputPending()은 이제 피하세요. Google은 “we no longer recommend using this API.” (번역) 「더 이상 이 API 사용을 권장하지 않습니다.」라고 말합니다. 구현 방식은 스크립트 탭을 참고하세요.

3. 이벤트 핸들러 작업을 줄이고 중요하지 않은 작업은 미루세요. 다음 프레임의 시각적 업데이트에 필요한 일만 동기적으로 실행하고, 저장·맞춤법 검사·분석·단어 수 계산 등은 requestAnimationFrame + setTimeout 또는 yield 뒤로 보내세요. 사용자는 즉시 반응을 보고 부가 작업은 나중에 실행됩니다.

4. 레이아웃 스래싱을 피하세요. 같은 작업에서 스타일을 쓴 직후 레이아웃 속성을 읽으면 브라우저가 원래 묶어서 처리할 수 있었던 레이아웃을 동기적으로 강제합니다. 읽기를 먼저 묶고 쓰기를 묶으세요.

5. DOM 크기를 줄이세요. 트리가 작을수록 빠르게 렌더링됩니다. content-visibility를 사용하면 화면 밖 요소를 지연 렌더링해 로드나 상호작용 중 비용을 줄일 수 있습니다.

6. 서드파티 스크립트를 감사하고 지연하세요. 실제 사이트에서 효과가 큰 SEO 개선입니다. 동의·태그·분석 스크립트를 지연 로드하거나 상호작용 뒤에 실행하거나 핵심 경로에서 빼세요. 무거운 임베디드 위젯 하나만으로 ‘가벼운’ 콘텐츠 페이지가 INP에 실패할 수 있습니다.

INP가 순위에 영향을 주나요?

그렇습니다. INP는 세 가지 Core Web Vitals 중 하나이며 Core Web Vitals는 Google의 페이지 경험 신호에 포함됩니다. 하지만 가벼운 신호입니다. 관련성이 비슷한 결과 사이에서 동점 판정 역할을 할 뿐 주된 순위 요소는 아닙니다. 콘텐츠와 관련성을 희생해 완벽한 INP 점수를 좇지 마세요.

실무 SEO 관점에서 두 가지가 중요합니다. 첫째, 모바일 수치가 어렵습니다. 2024 Web Almanac에서 모바일 사이트 약 74%가 INP를 통과한 반면 데스크톱은 약 97%였습니다. Google은 모바일 우선 색인을 사용하므로 모바일 수치가 중요합니다. 둘째, 복잡한 사이트일수록 불리합니다. 상위 1000개 사이트 중 통과율은 약 53%에 불과했습니다. 기능이 많은 페이지일수록 메인 스레드를 막는 JavaScript를 더 많이 보내기 때문입니다. 무거운 기능 개발은 INP 위험이며 제품·결제·검색 결과·양식처럼 상호작용이 많은 페이지는 정적 콘텐츠보다 훨씬 더 취약합니다.

INP와 FID 전체 비교

FID(폐기됨)INP(현재)
상호작용첫 번째만방문 전체의 모든 상호작용
측정 대상입력 지연만입력 지연 + 처리 + 표시
좋음 기준≤ 100 ms≤ 200 ms
상태2024년 9월 도구에서 제거2024년 3월 12일부터 Core Web Vital

FID는 사라졌습니다. INP 출시일에 Search Console에서 제거됐고 2024년 9월에는 CrUX BigQuery/API에서도 제거됐습니다. 도구나 감사가 아직 FID를 참조한다면 오래된 것입니다.

INP 데이터가 서로 달라지는 예외 상황

대부분의 ‘왜 RUM과 CrUX가 다르지?‘라는 질문은 다음 수명 주기 특성으로 설명할 수 있습니다.

  • 상호작용이 없으면 INP도 없습니다. 방문 중 클릭·탭·키 입력이 없거나 스크롤·마우스 오버처럼 제외된 동작만 있었다면 해당 페이지 조회에는 INP 값이 없습니다. 읽기 전용 콘텐츠 페이지에서 정상이며 모니터링 버그가 아닙니다.
  • iframe 상호작용은 지표에 포함되지만 자체 JavaScript로 내부를 볼 수는 없습니다. 광고·위젯·임베디드 양식 등 iframe 안의 상호작용도 페이지 INP에 기여합니다. 그러나 퍼스트파티 RUM 스크립트는 브라우저 자체 지표처럼 교차 출처 iframe 이벤트를 읽을 수 없습니다. 따라서 서드파티 임베드가 있는 페이지에서는 CrUX와 동일 출처 RUM이 정당하게 다를 수 있습니다. 이 차이를 버그로 취급하지 말고 문서화하세요.
  • 뒤로/앞으로 가기 캐시 복원은 INP를 영으로 초기화합니다. 뒤로 가기 등으로 bfcache에서 복원된 페이지는 새 INP 집계를 시작하며, 이전 탐색 전 상호작용은 이어지지 않습니다.
  • 오래 열려 있거나 백그라운드로 간 탭도 보고해야 합니다. 탭은 정식 unload 없이 몇 시간 열려 있을 수 있고, 모바일에서는 OS가 바로 종료할 수도 있습니다. 따라서 INP는 unload 시점뿐 아니라 페이지가 숨겨질 때 수집해야 합니다. unload에서만 전송하는 RUM은 이런 방문 데이터를 조용히 잃습니다.

관련 지표와 도구

INP는 Largest Contentful Paint(로딩), Cumulative Layout Shift(시각적 안정성)와 함께 Core Web Vitals를 구성합니다. 필드 데이터는 PageSpeed Insights와 Search Console 보고서에서 확인하고, 실험실에서는 Lighthouse와 Chrome DevTools에서 TBT 대용 지표로 디버깅하세요. 모든 데이터의 기반은 CrUX입니다.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.