LCP 리소스 로드 지연 최적화
지연에서 표시까지: Largest Contentful Paint의 리소스 로드 지연 부분을 개선하는 방법을 알아본다.
이 가이드는 Largest Contentful Paint (LCP) 허브의 일부다. Resource Load Delay는 특히 SPA 사이트에서 저조한 LCP 점수를 유발하는 가장 큰 단일 요인인 경우가 많다!
LCP Resource Load Delay 최적화
Largest Contentful Paint (LCP)는 네 가지 LCP 하위 단계인 TTFB, Resource Load Delay, Resource Load Duration, Element Render Delay로 나뉜다.
팁: LCP가 이미지인 경우 거의 항상 텍스트보다 결과가 나쁘다. RUM 데이터에서 LCP 요소 유형을 추적해야 한다. 그렇지 않으면 현황을 전혀 파악할 수 없다.
Table of Contents!
- LCP Resource Load Delay 최적화
- Resource Load Delay란 무엇인가?
- 브라우저는 LCP 요소를 어떻게 찾는가?
- Why Load Delay Matters for the Core Web Vitals
- Resource Load Delay 감지 방법
- Chrome DevTools Performance 패널 단계별 사용 가이드
- 흔히 발생하는 원인과 파급력이 큰 해결책
- Resource Hints를 통한 고급 우선순위 지정
- <link rel="preload">로 신속한 발견 강제하기
- fetchpriority="high"와 브라우저 우선순위 대기열
- 제3사(Third-Party) 연결 최적화: preconnect 및 dns-prefetch
- 표: LCP 최적화를 위한 Resource Hint 비교
- 종합적이고 미래지향적인 전략
- 최신 CDN의 역할
- Speculation Rules를 사용하여 지연 완전 차단
- 사례 연구 종합: 이론에서 실전으로
- Load Delay 개선 방법
- 다음 단계: LCP 최적화 이어가기
- LCP Resource Load Delay 최적화
- Resource Load Delay란 무엇인가?
- 브라우저는 LCP 요소를 어떻게 찾는가?
- Why Load Delay Matters for the Core Web Vitals
- How to Detect Resource Load Delay
- Chrome DevTools Performance 패널 가이드
- 흔히 발생하는 원인과 해결 방법
- Resource Hints를 이용한 고급 우선순위 지정
- <link rel="preload">로 신속한 발견 강제하기
- fetchpriority="high"와 브라우저 우선순위 큐
- 외부 연결 최적화: preconnect 및 dns-prefetch
- 표: LCP 최적화 관련 Resource Hint 요약
- 거시적이고 발전적인 대응책
- 최신 CDN의 역할
- Speculation Rules 기반의 지연 Zero 실현
- 사례 분석: 이론에서 필드로
- Load Delay 개선 방법
- 다음 단계: LCP 최적화 이어가기
Resource Load Delay란 무엇인가?
Resource Load Delay는 TTFB와 브라우저가 LCP 리소스 다운로드를 시작하는 시점 사이의 시간이다. 기본적으로 브라우저는 LCP 리소스(예: LCP 이미지)를 가능한 한 빨리 대기열에 추가해야 한다. 대기열에 즉시 추가되지 않는다면, 브라우저가 리소스를 바로 발견하지 못했거나 충분히 중요하다고 인식하지 못했기 때문일 가능성이 크다.
이 값이 높다는 것은 브라우저가 초기 HTML payload에서 리소스 URL을 찾지 못하는 아키텍처적 문제를 의미한다. 이 Resource Load Delay는 브라우저가 LCP 리소스가 필요하다는 것을 식별하고 이를 가져오기로 결정하는 데 걸리는 시간으로 볼 수 있다.
Resource Load Delay는 리소스가 실제로 로드되기 전에 발생한다는 점을 이해하는 것도 중요하다. 따라서 반응형 이미지나 WebP, AviF 같은 새로운 이미지 포맷과는 전혀 무관하다.

텍스트 기반이며 시스템 폰트를 사용하는 LCP 요소의 경우, 외부 리소스를 가져올 필요가 없으므로 Resource Load Delay는 보통 0이다. Resource Load Delay 값이 큰 경우는 이미지나 비디오 파일처럼 외부 네트워크 리소스에 의존하는 LCP 요소에서 주로 발생한다.
브라우저는 LCP 요소를 어떻게 찾는가?
Resource Load Delay를 줄이려면 브라우저가 리소스를 발견하는(또는 최소한 LCP 요소를 발견하는) 방식을 이해해야 한다. 브라우저는 두 가지 메커니즘을 사용한다. 바로 빠른 경로와 느린 경로다. 먼저 LCP 요소가 '빠른 경로'에 있는지 확인해야 한다.
- DOM 파서 (느린 경로): 브라우저의 메인 파서로, 매우 무겁게 동작한다. HTML, 스타일시트를 읽고 JavaScript와 상호작용하여 전체 페이지를 빌드한다. 다른 파일들이 먼저 다운로드되고 실행되면서 파서가 지연되거나 중단될 수 있어 지연을 유발하는 의존성 체인이 형성되므로 느린 경로다.
- Preload Scanner (빠른 경로): DOM 파서가 (상대적으로) 느리기 때문에, 브라우저는 다운로드 가능한 리소스를 빠르게 스캔하며 어떠한 작업에도 중단되지 않는 매우 빠른 보조 스캐너를 가동한다. <script>, lazy loading이 적용되지 않은 <img> 또는 <link> 태그를 발견하면 CSS 파싱이나 JavaScript 실행이 시작되기도 전에 즉시 다운로드 대기열에 추가한다. 이는 모든 중요 리소스에 대한 최적의 경로다.
Resource Load Delay 최적화 전략의 핵심은 오직 한 가지 원칙에 기반한다. 바로 LCP 리소스 URL을 Preload Scanner가 최대한 빨리 발견할 수 있도록 하는 것이다.
LCP 요소에 관해 다음 두 가지를 의미한다.
- loading="lazy" 속성이 없는 일반 이미지 태그를 사용하여 Preload Scanner가 리소스를 찾을 수 있도록 한다.
- Preload Scanner가 덜 중요한 리소스를 너무 많이 우선시하지 않도록 한다.
Why Load Delay Matters for the Core Web Vitals
초보 개발자들은 흔히 LCP를 '파일 크기' 문제로 생각한다. 이 때문에 팀들은 이미지 압축, 최신 이미지 포맷, 반응형 이미지에만 집중하게 된다. 이는 잘못된 접근이다. 자체 Core Web Vitals 연구에 따르면 LCP의 가장 큰 단일 병목 구간은 TTFB(48%)이며, 그 다음은 Load delay(24%)가 차지한다. 로드 시간은 10%에 불과하며, 그 뒤를 Render delay(17%)가 잇는다.

여기서 핵심은 TTFB는 언제나 존재하는 반면, Load delay는 거의 완벽하게 해결 가능하다는 점이다. 따라서 Load delay는 최적화 잠재력이 가장 큰 요소다.
Resource Load Delay 감지 방법
Resource Load Delay를 해결하려면 먼저 정확히 측정해야 한다. 워크플로우는 항상 동일하다. 먼저 CrUX를 확인하고, 실제 사용자 데이터(RUM)로 문제를 정의한 다음, Chrome DevTools로 이동하여 심층 분석을 진행한다.
단계 1: CrUX 확인
CrUX는 대상 Chrome 사용자로부터 수집한 Google의 공개 실제 사용자 field data다. 75백분위수 기준 Core Web Vitals의 28일 이동 평균 뷰를 제공한다. 수치가 좋은지 나쁜지만 알려줄 뿐, 누가, 무엇을, 왜 그런지는 알려주지 않는다. Google이 CrUX 데이터를 바탕으로 평가하므로, 시작 단계에서는 이 데이터가 가장 확실한 기준이 된다.
Go to cruxvis.withgoogle.com, enter your website and navigate to Loading Performance and click on Largest Contentful Paint (LCP) image subparts

단계 2: Field Data (RUM) 분석
RUM은 모든 실제 사용자로부터 Core Web Vitals를 수집하여 훨씬 더 구체적이고 상세한 뷰를 제공한다. 데이터를 원하는 방식으로 세분화하여 누가 어떤 문제를 겪고 있는지 알려주지만(매우 유용한 정보임), 그 원인인 '왜'는 알려주지 않는다.
단계 3: DevTools로 진단
RUM 데이터를 통해 대상 페이지와 LCP 요소를 파악했다면, Chrome DevTools를 사용하여 원인을 진단한다. 목표는 문제를 재현하고 LCP 하위 파트를 측정하여 정확한 Resource Load Delay 값을 얻는 것이다. 또한 DevTools에서 main thread 분석을 수행하여 어떤 작업이 실행 중이고 렌더링 과정을 차단하고 있는지 정확히 확인할 수 있다.
Chrome DevTools Performance 패널 단계별 사용 가이드
Chrome DevTools의 Performance 패널은 LCP를 분석하고 load delay를 측정하는 데 있어 필수적인 도구다.
1. 설정 및 구성:
- 페이지를 우클릭하고 '검사'를 선택하거나 단축키 Ctrl+Shift+I(Windows/Linux) 또는 Cmd+Option+I(Mac)를 사용하여 Chrome DevTools를 연다.
- Performance 탭으로 이동한다.
- 캡처 설정에서 Web Vitals 체크박스가 활성화되어 있는지 확인한다. 활성화하면 성능 타임라인에 Core Web Vitals 정보가 오버레이된다.
- 실제 사용자 환경을 시뮬레이션하려면 CPU 및 네트워크 throttling을 적용한다. 모바일 테스트의 경우 CPU의 '4배 감속(4x slowdown)' 및 "Fast 3G" 또는 "Slow 4G" 네트워크 프로필이 일반적인 시작점이다.
2. 성능 프로필 기록:
- Performance 패널에서 '기록 및 페이지 새로고침' 버튼(원형 화살표 아이콘)을 클릭한다. 그러면 기록이 시작되고 페이지가 새로고침되며, 페이지 로드가 완전히 완료되면 기록이 자동으로 중단된다.
3. 분석 및 해석:
- Timings 트랙: 메인 타임라인 뷰에서 Timings 트랙을 찾는다. LCP라고 표시된 마커가 보일 것이다. 이 마커 위에 마우스를 올리면 메인 viewport 스크린샷에서 해당하는 LCP 요소가 강조 표시되고 전체 LCP 시간이 나타난다.
- 단계별 LCP 세부 정보: Timings 트랙의 LCP 마커를 클릭한다. 패널 하단의 Summary 탭에서 LCP 타이밍의 상세 분석 정보를 확인할 수 있다. 이 정보는 밀리초 단위로 측정된 Load delay를 포함하여 4가지 하위 파트 각각의 소요 시간을 명확히 보여준다. 이 값은 해당 페이지 로드의 Resource Load Delay를 가장 직접적이고 정밀하게 측정한 결과다.
- Main Thread 분석: 타임라인을 검토하는 동안 Main 트랙에서 long task(빨간색 삼각형으로 표시된 작업 블록)가 있는지 확인한다. 이러한 long task가 LCP 리소스 로드가 완료된 후 LCP 마커가 나타나기 전에 발생한다면, 연관이 있지만 성격은 다른 문제인 Element Render Delay의 원인일 가능성이 크다.
흔히 발생하는 원인과 파급력이 큰 해결책
Resource Load Delay 값이 높게 나타나는 원인은 두 가지 중 하나다. LCP 리소스를 늦게 발견했거나, 가져오기 우선순위가 낮게 지정되었기 때문이다. 가장 흔히 발생하는 아키텍처적 실수와 해결책은 다음과 같다.
원인: LCP Loaded via CSS
문제점: Preload Scanner는 CSS 파일을 파싱하지 않는다. LCP 이미지가 CSS의 background-image로 정의되어 있으면, 이 고속 스캐너는 이미지 URL을 인식할 수 없다. 브라우저는 HTML을 다운로드하고, CSS 파일 링크를 찾고, CSS 파일을 다운로드하고, CSSOM을 빌드한 후에 스타일을 적용해야만 이미지를 발견할 수 있다. 이 의존성 체인이 높은 Resource Load Delay를 유발하는 직접적인 원인이 된다. 이 패턴에 대한 자세한 내용은 배경 이미지 연기하기 가이드를 참고해라.
해결책: 올바른 구현 방법은 중요 LCP 요소에 background-image를 사용하지 않는 것이다. 대신 표준 <img> 태그를 사용해라. 이렇게 하면 이미지 URL이 HTML에 직접 위치하므로 Preload Scanner가 즉시 발견할 수. CSS를 사용하면 시각적으로 동일한 효과를 낼 수 있다.
구현 예시:
안티 패턴 (이렇게 하지 말 것):
<!-- CSS -->
.hero {
background-image: url('hero-image.jpg');
height: 500px;
width: 100%;
}
<!-- HTML -->
<div class="hero"></div>
모범 사례 (대신 이렇게 할 것):
<!-- HTML -->
<div class="hero-container">
<img
src="hero-image.jpg"
alt="A descriptive alt text for the hero image"
fetchpriority="high"
class="hero-background-img"
width="1200"
height="500"
/>
<div class="hero-content">
<h1>페이지 제목</h1>
</div>
</div>
<!-- CSS -->
.hero-container {
position: relative;
height: 500px;
width: 100%;
}
.hero-background-img {
position: absolute;
inset: 0; /* top: 0; right: 0; bottom: 0; left: 0; 과 동일 */
width: 100%;
height: 100%;
object-fit: cover; /* background-size: cover 효과를 모방하는 속성 */
z-index: -1; /* 이미지를 다른 콘텐츠 뒤에 배치 */
}
이 구현은 동일한 시각적 결과를 제공하면서도 LCP 이미지를 최대한 빠른 시점에 발견할 수 있도록 하여 load delay를 최소화한다.
원인: Client-Side Rendering 및 JavaScript 삽입
문제점: React나 Vue 같은 Client-Side Rendering(CSR) 프레임워크를 사용하는 애플리케이션은 종종 최소한의 HTML 셸만 서빙한다. LCP <img> 태그를 포함한 실제 콘텐츠는 대용량 프레임워크 번들이 다운로드, 파싱 및 실행된 후 JavaScript에 의해 DOM에 삽입된다. 이 프로세스는 본질적으로 LCP 리소스를 Preload Scanner로부터 숨겨서 심각한 발견 지연을 초래한다.
해결책: 가장 효과적인 해결책은 초기 렌더링을 클라이언트에서 서버로 옮기는 것이다.
- Server-Side Rendering (SSR) 또는 Static Site Generation (SSG): SSR이나 SSG 같은 아키텍처 패턴은 서버에서 전체 HTML을 생성한다. 브라우저는 <img> 태그와 src 속성이 포함된 완성된 문서를 수신하므로, Preload Scanner가 LCP 리소스를 즉시 발견할 수 있다. 이는 성능이 중요한 모든 페이지에 필수적인 아키텍처다.
- 프레임워크 전용 최적화: 최신 프레임워크는 자체 최적화 기능도 제공한다. 예를 들어 Next.js의 <Image> 컴포넌트는 priority 속성을 제공한다. 이 값을 true로 설정하면 프레임워크가 올바른 <link rel="preload"> 및 fetchpriority="high" 속성을 자동으로 추가하여 이미지가 올바른 우선순위로 발견되고 가져오도록 보장한다.
원인: LCP 이미지에 loading="lazy" 사용
문제점: 자주 발생하는 치명적인 실수다. loading="lazy" 속성은 이미지가 viewport에 가까워질 때까지 이미지 로드를 지연시키라는 브라우저 대상의 직접적인 지시다. 화면 하단(below-the-fold) 이미지에는 올바른 최적화지만, 화면 상단(above-the-fold)의 LCP 요소에 적용하면 역효과가 난다. 브라우저의 Preload Scanner는 loading="lazy"가 적용된 이미지를 무시하도록 설계되어 있으므로, 발견이 늦어지고 높은 Resource Load Delay가 발생할 수밖에 없다.
해결책: 꼼꼼한 관리가 필요하다.
- LCP 이미지에서 loading="lazy" 제거: LCP 요소가 될 가능성이 있는 이미지에는
loading="lazy"속성을 적용해서는 안 된다. 브라우저의 기본 동작은loading="eager"이며, 이는 중요한 화면 상단(above-the-fold) 콘텐츠에 적합한 설정이다. loading 속성을 완전히 생략해도 동일하게 작동한다. - 제3사(Third-Party) 도구 감사 및 설정: 제3사 도구도 점검해야 한다. WordPress 같은 많은 CMS 플랫폼과 다양한 이미지 최적화 플러그인은 모든 이미지에 자동으로 lazy loading을 적용한다. 이러한 도구가 LCP 이미지를 제외하도록 설정해야 한다. 대개 페이지의 첫 번째 또는 두 번째 이미지에 대한 제외 규칙을 생성하는 방식으로 해결할 수 있다.
원인: 최적화되지 않은 HTML 구조 및 대용량 문서
문제점: Preload Scanner는 HTML 문서를 위에서 아래로 순차적으로 처리한다. 헤더 아이콘이나 채팅 위젯 스크립트처럼 중요하지 않지만 대역폭을 많이 차지하는 리소스가 LCP 요소보다 <body> 태그의 더 높은 곳에 위치하면, 이들이 먼저 발견되어 다운로드 대기열에 추가된다. 이는 초기 네트워크 대역폭을 소모하고 LCP 리소스 다운로드를 지연시킬 수 있다. HTML 문서의 크기가 너무 큰 경우도 문제가 된다. LCP 요소가 브라우저가 수신하는 첫 번째 데이터 청크(약 14KB)에 포함되지 않으면 리소스 발견이 최소 한 번의 네트워크 왕복 시간만큼 지연된다.
해결책: HTML 내에서 콘텐츠의 구조와 우선순위를 최적화한다.
- HTML 순서 재배치: 가능하다면 LCP 요소의 <img> 태그나 텍스트 블록이 <body> 태그 내에서 최대한 앞부분에 나타나도록 배치해라.
- 비중요 이미지의 우선순위 낮추기: HTML 소스 앞부분에 배치해야 하는 비필수 이미지(예: 헤더의 아이콘)에는
loading="lazy"를 적용해라. 이렇게 하면 Preload Scanner가 해당 이미지를 건너뛰므로 LCP 요소를 위한 다운로드 대기열을 확보할 수 있다. - 비필수 스크립트 연기: 분석용 스크립트, 광고 또는 소셜 미디어 위젯은 초기 렌더링에 거의 필요하지 않다. 이들의
<script>태그를<body>끝부분으로 이동하거나defer속성을 사용해라. 이를 통해 스크립트가 파서를 차단하거나 LCP 리소스와 네트워크 대역폭을 경쟁하지 않도록 방지할 수 있다.
Resource Hints를 통한 고급 우선순위 지정
Once the LCP resource is discoverable in the HTML, you can use resource hints to give the browser more explicit instructions on how to fetch it. These hints provide fine-grained control over discovery and prioritization.
<link rel="preload">로 신속한 발견 강제하기
<link rel="preload">는 단순한 힌트가 아니라 명령(directive)이다. 메인 파서가 아직 리소스를 발견하지 못했더라도 브라우저가 해당 리소스를 높은 우선순위로 강제 다운로드하도록 만든다. HTML의 <head>에 배치하는 것은 폰트, CSS background-image 형태의 LCP, 또는 DOM 깊숙이 위치한 LCP 이미지와 같은 리소스의 늦은 발견 문제를 해결하는 가장 직접적인 방법이다. 자세한 구현 내용과 예시는 LCP 이미지 preload 방법 가이드를 참고해라.
작동 방식
HTML 문서의 <head>에 preload 링크를 배치하면, Preload Scanner가 이를 식별하고 지정된 리소스를 즉시 다운로드 대기열에 추가한다. 이는 외부 스타일시트의 @font-face를 통해 로드되는 폰트, CSS background-image로 지정된 LCP(물론 <img> 태그를 쓰는 것이 더 좋음), 혹은 복잡한 DOM 구조 내의 깊은 곳에 위치한 LCP 이미지와 같은 리소스에 이상적이다.
반응형 Preloading
반응형 이미지를 preload할 때는 중요한 구현 디테일이 요구된다. 브라우저가 사용자의 viewport에 맞는 정확한 크기의 이미지를 preload하고 불필요한 이중 다운로드를 방지하려면, <link rel="preload"> 태그에 해당하는 <img> 태그의 속성과 완벽하게 일치하는 imagesrcset 및 imagesizes 속성을 반드시 포함해야 한다.
반응형 Preloading 예시:
<link rel="preload" as="image"
href="lcp-image-large.jpg"
imagesrcset="lcp-image-small.jpg 400w, lcp-image-medium.jpg 800w, lcp-image-large.jpg 1200w"
imagesizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
fetchpriority="high">
<img src="lcp-image-large.jpg"
srcset="lcp-image-small.jpg 400w, lcp-image-medium.jpg 800w, lcp-image-large.jpg 1200w"
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
alt="A descriptive alt text"
fetchpriority="high"
width="1200" height="675">
잠재적 함정
Preloading은 가져오기 시점(fetch timing)(Load Delay 및 Load Duration)을 해결하지만, 페인트 시점(paint timing)은 해결하지 못한다. preloaded 이미지가 도착했을 때 heavy JavaScript 또는 render-blocking CSS로 인해 main thread가 차단된 상태라면, 이미지는 렌더링될 때까지 여전히 기다려야 한다. 이 경우 병목 구간이 Load Delay에서 Element Render Delay로 이동하게 된다.
fetchpriority="high"와 브라우저 우선순위 대기열
fetchpriority 속성은 리소스 다운로드의 상대적 중요도를 나타내는 힌트다. 브라우저의 다운로드 대기열 내에서 리소스의 우선순위에 영향을 줄 수 있다.
브라우저 우선순위의 작동 방식
페이지 로드 중 브라우저가 리소스를 발견하면 각각에 내부 우선순위를 부여한다. 기본적으로 viewport 내의 이미지는 "Low" 우선순위로 시작하여 브라우저가 레이아웃을 완료하고 해당 이미지가 보인다는 점을 확인한 후에 "High"로 업그레이드된다. 이 업그레이드를 위해서는 브라우저가 먼저 CSS를 다운로드하고 파싱해야 하므로 지연이 발생한다. fetchpriority="high" 속성을 사용하면 이미지가 발견되는 순간부터 "High" 우선순위로 설정되어 이 프로세스를 완전히 우회한다. 이는 우선순위 업그레이드 지연을 없애기 때문에 LCP 이미지에 특히 효과적이다.
preload 대 fetchpriority
이 두 가지 힌트는 서로 다르지만 상호 보완적인 용도로 사용된다. preload는 리소스가 발견되어 대기열에 추가되는 시점에 영향을 미친다. 반면, fetchpriority는 리소스가 대기열에 들어간 후의 우선순위 수준에 영향을 준다. 이 차이를 이해하는 것이 핵심이다. 즉, preload는 늦은 발견을 해결하고 fetchpriority는 낮은 우선순위를 해결한다. 이미 HTML에 포함된 많은 LCP 이미지의 경우 fetchpriority 단독으로도 충분할 수. 두 기능의 상호작용에 대한 자세한 가이드는 리소스 우선순위 지정 문서를 참고해라.
LCP 모범 사례
LCP 이미지의 경우, 두 가지를 병행하는 것이 최적의 전략이다. 첫째, <img> 태그를 HTML의 상단에 배치하거나 preload를 사용하여 조기에 발견되도록 한다. 둘째, <img> 태그(및 적용된 preload 링크)에 fetchpriority="high"를 직접 추가한다. 이 결합을 통해 리소스가 일찍 발견될 뿐만 아니라 스타일시트나 폰트 같은 다른 리소스와의 네트워크 대역폭 경쟁에서 가장 높은 우선순위를 확보할 수 있다.
예시:
<img src="lcp-image.jpg" fetchpriority="high" alt="A critical hero image">
fetchpriority="low"를 사용하는 시점
fetchpriority 속성은 우선순위를 높이는 데만 쓰이지 않는다. LCP 이미지와 대역폭을 경쟁하는 비중요 리소스의 우선순위를 낮추기 위해 fetchpriority="low"를 사용할 수도 있다. 대표적인 대상으로는 헤더의 작은 아이콘이나 아바타 등 LCP 요소가 아닌 화면 상단(above-the-fold)의 이미지, 그리고 필요하지만 당장 시급하지 않은 preloaded 리소스가 있다. 이처럼 경쟁 리소스의 우선순위를 명시적으로 낮추면 LCP 이미지를 위한 네트워크 대역폭 여유를 더 많이 확보할 수 있다.
<!-- LCP 이미지: 높은 우선순위 --> <img src="hero.jpg" fetchpriority="high" alt="Hero image" width="1200" height="600"> <!-- 비중요 화면 상단 이미지: 낮은 우선순위 --> <img src="avatar.jpg" fetchpriority="low" alt="Author avatar" width="48" height="48">
검증된 효과
Google Flights 사례 연구에 따르면, LCP background-image에 fetchpriority="high"를 추가하는 것만으로 LCP 시간이 2.6초에서 1.9초로 개선되어 700ms가 단축되었다.
제3사(Third-Party) 연결 최적화: preconnect 및 dns-prefetch
문제점
LCP 리소스가 이미지 CDN이나 Google Fonts와 같은 외부 폰트 제공업체 등의 외부 도메인에 호스팅되어 있는 경우, 브라우저는 해당 도메인에 대한 새로운 네트워크 연결을 수립해야 한다. 이 프로세스는 DNS 조회, TCP 핸드셰이크, TLS 협상을 수반하며, 리소스의 첫 바이트를 다운로드하기 전에 이 모든 단계가 완료되어야 한다. 이러한 연결 설정 시간은 크로스 오리진(cross-origin) 자산의 Resource Load Delay를 가중시키는 직접적인 요인이다.
해결책
preconnect: 브라우저가 백그라운드에서 지정된 외부 origin에 대해 사전 연결 설정(DNS, TCP, TLS)을 완료하도록 지시하는 힌트다. 실제 리소스가 필요할 때 연결이 이미 활성화되어 있으므로 연결 설정 대기 시간이 사라진다. LCP 리소스를 서빙하는 가장 중요한 한두 개의 외부 도메인에 강력히 권장되는 매우 효과적인 방법이다.dns-prefetch: 도메인에 대한 DNS 조회만 수행하는 가벼운 힌트다.preconnect보다 단축되는 시간은 적지만 브라우저 지원 범위가 넓어 fallback 용도나 중요도가 낮은 외부 도메인에 유용하다.
구현 모범 사례
최대 호환성을 확보하기 위해 두 가지 힌트를 모두 제공하는 것이 좋다. 브라우저는 preconnect를 지원하면 이를 사용하고, 지원하지 않으면 dns-prefetch로 전환한다. 폰트처럼 CORS를 사용하여 가져오는 리소스에는 crossorigin 속성이 필수적이다.
<link rel="preconnect" href="https://my-image-cdn.com" crossorigin> <link rel="dns-prefetch" href="https://my-image-cdn.com"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
표: LCP 최적화를 위한 Resource Hint 비교
오용을 방지하고 이 강력한 힌트들의 각기 다른 역할을 명확히 설명하기 위해 다음 비교 요약 표를 제공한다.
| 힌트 | 유형 | 주요 목적 | LCP Load Delay에 미치는 영향 | LCP 모범 활용 사례 |
|---|---|---|---|---|
preload |
명령(Directive) | 특정 리소스를 신속하게 강제 가져오기 | 늦게 발견되는 리소스의 발견 지연을 직접 제거함 | 늦게 발견되는 LCP 이미지(예: CSS background-image) 또는 폰트. |
fetchpriority |
힌트 | 발견된 리소스의 다운로드 우선순위 알림 | 다른 자산보다 우선순위를 높여 대기열 지연을 줄임 | LCP <img> 태그 자체에 적용하여 덜 중요한 리소스보다 먼저 다운로드되도록 보장함. |
preconnect |
힌트 | 도메인에 대한 전체 네트워크 연결 준비 | 크로스 오리진 연결 설정 시간(DNS, TCP, TLS) 제거 | LCP 이미지 또는 폰트가 호스팅된 핵심 외부 도메인. |
dns-prefetch |
힌트 | 도메인의 DNS 조회만 준비 | 크로스 오리진 연결 시간 중 DNS 조회 시간 단축 | preconnect 지원이 없는 경우의 fallback 또는 덜 중요한 외부 도메인. |
종합적이고 미래지향적인 전략
Beyond resource hints, broader architectural decisions can reduce Resource Load Delay even further.
최신 CDN의 역할
콘텐츠 전송 네트워크(CDN)는 특히 LCP 리소스에 대한 Resource Load Delay를 간접적이지만 대폭 감소시키는 웹 성능의 핵심 기술이다.
- 연결 오버헤드 감소: CDN은 자산을 전 세계 서버 네트워크로 분산하여 콘텐츠를 사용자에게 지리적으로 가까운 곳에 배치한다. 이는 연결 설정 시간을 구성하는 DNS 조회, TCP 핸드셰이크, TLS 협상에 필요한 왕복 시간(RTT)을 본질적으로 단축시킨다. CDN에 호스팅된 LCP 이미지의 경우, 이는 로드 지연의 직접적인 단축으로 이어진다.
- 이미지 CDN: 특화된 이미지 CDN은 두 가지 이점을 제공한다. 표준 CDN의 지리적 근접성 이점과 더불어, 실시간 이미지 크기 조정, 압축, AVIF 및 WebP 같은 최신 포맷 변환 등을 자동으로 처리하여 Resource Load Duration을 줄여준다.
- 고급 프로토콜: 많은 최신 CDN은 TCP 대신 QUIC를 사용하는 HTTP/3를 활용한다. HTTP/3는 연결 설정 시간을 줄이고 head-of-line blocking을 완화하여 전반적으로 더 빠르고 효율적인 리소스 전송을 보장한다.
Speculation Rules를 사용하여 지연 완전 차단
Speculation Rules API는 후속 페이지 이동 시 LCP 지연을 완전히 제거할 수 있다.
작동 메커니즘
이 API는 개발자가 사용자가 다음에 이동할 가능성이 높은 URL을 브라우저에 선언적으로 알려준다. 브라우저는 이 규칙을 기반으로 사용자가 링크를 클릭하기도 전에 백그라운드의 숨겨진 탭에서 대상 페이지를 prerender(사전 렌더링)할 수 있다.
LCP에 미치는 영향
사용자가 prerender된 페이지의 링크를 클릭하면 이동이 거의 즉각적으로 일어난다. 페이지가 백그라운드에서 이미 완전히 로드되고 렌더링되었기 때문이다. 이 경우 사용자의 관점에서 TTFB, Resource Load Delay, Resource Load Duration, Element Render Delay가 모두 사실상 0에 가깝게 줄어든다.
실제 활용 사례
이커머스 카테고리 페이지에서 speculation rules를 사용하여 리스트 상단의 몇몇 상품 상세 페이지를 prerender할 수 있다. 사용자가 해당 상품을 클릭하면 페이지가 즉시 표시된다.
사례 연구 종합: 이론에서 실전으로
이러한 최적화는 측정 가능한 실질적인 성과를 보장한다.
- 사례 1: Preloading의 혁신적인 효과: 높은 로드 지연이 발생하는 페이지에 대해 DebugBear가 진행한 실험이 극적인 예시다. LCP 이미지가 요청 체인(request chain) 뒤에 숨겨져 있어 Resource Load Delay가 전체 LCP 시간의 무려 75%를 차지하고 있었다. 이미지 발견 시점을 앞당기기 위해 단 하나의
<link rel="preload">힌트를 적용하자, Resource Load Delay가 LCP 시간의 단 2%로 단축되었다. 이는 아키텍처를 조금만 수정해도 얼마나 거대한 성능 병목 구간을 해결할 수 있는지 보여준다. - 사례 2: 실제
loading="lazy"안티 패턴 사례: Stack Overflow의 어느 개발자는 빠른 네트워크 환경임에도 불구하고 데스크톱 LCP에 이해하기 힘든 1,430ms의 로드 지연이 발생한다고 보고했다. 원인은 이미지 최적화 플러그인이 LCP 이미지의src속성을 투명한 플레이스홀더 SVG로 대체하여 lazy loading을 잘못 적용했기 때문이었다. 근본적인 해결책은 LCP 요소에 대해 이 동작을 비활성화하여 리소스가 조기에 발견되고 eagerly 로드되도록 하는 것이었다. 이는 제3사 도구가 의도치 않게 심각한 로드 지연을 유발할 수 있음을 보여준다. - 사례 3:
fetchpriority를 통한 성능 향상: Google Flights 사례 연구는 명시적인 우선순위 지정이 미치는 효과를 입증한다. 페이지의 LCP background-image에fetchpriority="high"를 추가하는 간단한 조치만으로 LCP 점수가 2.6초에서 1.9초로 700ms 단축되었다. 이는 리소스를 발견할 수 있는 상태라 하더라도 브라우저에 높은 중요도를 알려주는 것이 네트워크 대역폭 경쟁에서 승리하기 위한 핵심 단계임을 명확히 보여준다.
Chrome DevTools의 네트워크 검사: 단축키 Ctrl + Shift + I를 사용하여 Chrome 개발자 도구를 연 다음, "Network" 탭을 선택하고 페이지를 새로고침해라. 로드 순서를 살펴봐라. LCP 리소스가 다운로드 대기열 최상단 부근에 있어야 한다. 다른 요소보다 늦게 표시된다면 Resource Load Delay 문제가 존재한다는 의미다. 아래는 Resource Load Delay가 최적화되지 않은 사이트의 예시다.

실제 사용자 모니터링(RUM) 데이터 사용: 실제 사용자 모니터링 도구는 대개 LCP 기여도 데이터(attribution data)를 기록한다. RUM을 활용하면 LCP 하위 파트의 상세 분석(시간 경과 또는 페이지별)을 시각화할 수 있으므로, 전체 사이트 또는 페이지별 LCP 요소의 로드 지연 현황을 명확하게 파악할 수 있다. 아래 예시는 관련 로드 지연과 함께 전체 LCP 상세 분석을 보여준다.

Load Delay 개선 방법
Resource Load Delay는 리소스의 다운로드 순서와 타이밍이 최적화되지 않았을 때 발생한다. 이를 해결하는 방법은 본질적으로 두 가지다. LCP 리소스의 우선순위를 높이거나 비LCP 리소스의 우선순위를 낮추는 것이다. 몇 가지 대표적인 패턴을 살펴보자.
LCP 팁: Preload Scanner 이해하기: 최신 브라우저는 HTML을 빠르게 스캔하여 다운로드할 리소스를 대기열에 추가하는 Preload Scanner라는 메커니즘을 사용한다. 리소스를 Preload Scanner가 대기열에 추가할 수 없으면 속도가 느린 DOM 파서가 가동될 때까지 대기해야 하므로 지연이 발생한다. LCP 리소스를 Preload Scanner가 바로 발견할 수 있도록 설정하는 것이 로드 지연을 줄이는 데 결정적인 역할을 한다.
1. HTML 구조 최적화
브라우저(및 Preload Scanner)는 HTML을 위에서 아래로 처리하며, 리소스가 표시되는 순서대로 대기열에 추가한다. 즉, LCP 리소스가 HTML 상단에 위치할수록 더 빨리 대기열에 들어간다. 이를 최적화하려면 HTML 상단에서 불필요한 리소스를 제거하거나 지연시켜야 한다.
- 중요하지 않거나 숨겨진 이미지에 lazy-loading 적용: 간혹 사이트 HTML 최상단에 다국어 버전용 국기 아이콘이나 메뉴 내 이미지 등이 위치하는 경우가 있다. 이러한 이미지는 LCP 요소보다 중요도가 현저히 떨어진다. 이 이미지들에 lazy-loading을 적용하여 Preload Scanner가 건너뛰도록 하면 로드 프로세스 후반에 대기열에 추가된다.
- 비중요 스크립트를 페이지 하단으로 이동: 초기 로드에 전혀 중요하지 않은 스크립트는 페이지 하단으로 이동시켜 핵심 리소스의 지연을 방지해라. 예를 들어 채팅 위젯이 있다. 인터넷 역사상 페이지가 표시되기도 전에 채팅부터 해야 했던 사용자는 아무도 없다!
2. 배경 이미지 지양
배경 이미지는 Preload Scanner가 인식하지 못하므로, 속도가 훨씬 느린 DOM 파서에 의해 대기열에 들어간다. 이 지연을 방지하려면 일반 <img> 태그를 사용하고, 배경 이미지와 동일한 시각적 효과를 내는 CSS 속성인 object-fit: cover를 함께 적용해라. 이렇게 하면 Preload Scanner가 이미지를 즉시 발견하고 대기열에 추가할 수.
3. Fetch Priority 활용
LCP 요소에 fetchpriority="high" 속성을 추가하여 브라우저가 시작부터 이 리소스를 우선적으로 처리하도록 힌트를 준다. 보통 이미지는 기본적으로 낮음(low) 또는 중간(medium) 우선순위로 로드된다. 브라우저는 레이아웃 단계에서 화면에 보이는 요소를 높은 우선순위로 업그레이드한다. fetchpriority="high"를 미리 지정하면 다운로드가 처음부터 높은 우선순위로 즉시 시작되므로 더 빠른 LCP를 달성할 수 있다.
Fetchpriority는 리소스 간의 상대적인 우선순위(예: 특정 이미지가 다른 이미지보다 상대적으로 중요함)를 결정할 뿐, 스타일시트나 비차단 스크립트보다 이미지를 먼저 로드하도록 강제하지는 않는다. 따라서 preloading보다는 덜 강제적이며 단독 효과는 상대적으로 낮을 수 있다.
<img src="hero-image.jpg" alt="Hero Image" fetchpriority="high">
4. Preloading 구현
Preloading은 Preload Scanner가 파일을 대기열에 추가하는 순서를 바꾼다. 페이지의 head 부분에 <link rel="preload"> 태그를 배치하여 브라우저가 LCP 이미지와 같은 주요 리소스를 가장 먼저 가져오도록 지시해라. preload는 HTML 뒷부분에서 참조되는 리소스(따라서 대기열에 늦게 추가됨)를 미리 로드하는 데 사용할 수 있으며, HTML에서 아직 참조되지 않은 리소스(예: 일부 슬라이더 이미지)를 로드할 때도 유용하다. 효과를 극대화하려면 head 영역 내의 스타일시트 뒤, 스크립트 앞에 preload 태그를 배치하는 것이 좋다.
<link rel="preload" as="image" href="hero-image.jpg">
5. 스타일 최적화
스타일시트는 일반적으로 LCP 리소스보다 먼저 대기열에 추가되며, 이는 타당한 이유가 있다. 스타일시트가 없으면 브라우저는 페이지의 외형을 파악할 수 없어 렌더링 단계를 시작할 수 없다. 하지만 CSS 크기가 비대하거나 스타일시트 개수가 너무 많으면 초기 대역폭을 두고 LCP 리소스와 경쟁하게 된다.
6. 효율적인 lazy-loading 구현
loading 속성은 양날의 검이 될 수 있다. LCP 리소스에는 loading="eager"를 사용하고(속성을 생략해도 브라우저 기본값인 "eager"로 설정됨), 화면 외부(offscreen) 이미지에는 loading="lazy"를 적용해라.
- LCP 요소 Eager Load: LCP 요소가 lazy loading되면 Preload Scanner가 이를 대기열에 추가하지 않으므로 로딩이 훨씬 지연되어 성능에 악영향을 미친다.
- Viewport 이미지 Lazy-Load: 화면에 보이는 viewport 영역 내에 있더라도 LCP 리소스가 아닌 이미지라면
loading="lazy"를 지정하여 대기열 진입 시점을 늦추는 편이 낫다. LCP 리소스와의 대역폭 경쟁을 완화할 수 있다. - 화면 외부 이미지 로드 피하기: 보이는 viewport 밖에 있는 이미지는 다운로드를 트리거하지 않으므로 대역폭 경쟁이 완전히 차단된다.
7. 브라우저 캐싱
브라우저 캐싱을 활용하면 사용자의 기기에 로컬로 저장된 리소스에 대해 네트워크 요청을 생략할 수 있다. 첫 페이지 뷰의 속도를 향상시키지 못하지만, 후속 페이지뷰나 재방문자의 로드 시간은 크게 개선된다. 브라우저 캐싱이 Resource Load Delay에 미치는 이점은 다음과 같다.
- 경쟁 리소스 캐싱: LCP 리소스 자체를 캐싱하는 것도 좋지만, 스크립트, 스타일시트, 이미지 등 LCP 리소스와 경쟁하거나 이를 지연시킬 수 있는 다른 네트워크 리소스를 저장함으로써 LCP Resource Load Delay를 직접 개선할 수 있다.
- 서버 부하 감소: 캐싱은 서버로 전송되는 요청 수를 줄여주므로 대역폭을 확보하고 서버 CPU 주기 소모를 낮춰 다른 리소스의 성능을 향상시킨다.
8. Speculation Rules 활용
Speculation Rules는 사용자의 예상 페이지 이동을 기반으로 브라우저가 웹 페이지를 prefetch하거나 prerender할 수 있도록 한다. Prefetching은 LCP의 Time to First Byte 하위 파트를 효과적으로 없애주지만 Resource Load Delay에는 영향이 없다. 반면 Prerendering은 백그라운드 탭에서 다음 페이지를 미리 렌더링하고 페이지의 모든 리소스를 미리 다운로드한다. 이로 인해 아래 prerender된 페이지의 LCP 세부 분석 예시와 같이 LCP 요소의 모든 로드 지연이 제거된다.

9. Avoid Client-Side Rendering
다음 단계: LCP 최적화 이어가기
Resource Load Delay는 LCP의 네 가지 단계 중 하나다. 리소스 발견 지연을 최소화했다면 다음 가이드를 이어서 학습해라.
- LCP 문제 식별 및 해결: 모든 LCP 문제를 감지하고 해결하는 전체 진단 방법론.
- LCP 이미지 최적화: 이미지 포맷 선택, 반응형 이미지, preloading 및 흔히 발생하는 이미지 관리 실수들.
- Resource Load Duration: 브라우저가 리소스를 발견한 후 압축, 최신 포맷 활용, CDN 최적화를 통해 다운로드 시간을 단축하는 법.
- Largest Contentful Paint (LCP) 허브의 일부다. 특히 SPA 사이트에서 Resource Load Delay는 LCP 점수 저하의 가장 큰 요인이다!
LCP Resource Load Delay 최적화
LCP 하위 단계는 TTFB, Resource Load Delay, Resource Load Duration, Element Render Delay의 4가지다.
팁: LCP가 이미지이면 거의 항상 텍스트보다 결과가 나쁘다. RUM 데이터에서 LCP 요소 유형을 추적해라. 그렇지 않으면 장님이나 다름없다.
Table of Contents!
- LCP Resource Load Delay 최적화
- Resource Load Delay란 무엇인가?
- 브라우저는 LCP 요소를 어떻게 찾는가?
- Why Load Delay Matters for the Core Web Vitals
- Resource Load Delay 감지 방법
- Chrome DevTools Performance 패널 단계별 사용 가이드
- 흔히 발생하는 원인과 파급력이 큰 해결책
- Resource Hints를 통한 고급 우선순위 지정
- <link rel="preload">로 신속한 발견 강제하기
- fetchpriority="high"와 브라우저 우선순위 대기열
- 제3사(Third-Party) 연결 최적화: preconnect 및 dns-prefetch
- 표: LCP 최적화를 위한 Resource Hint 비교
- 종합적이고 미래지향적인 전략
- 최신 CDN의 역할
- Speculation Rules를 사용하여 지연 완전 차단
- 사례 연구 종합: 이론에서 실전으로
- Load Delay 개선 방법
- 다음 단계: LCP 최적화 이어가기
- LCP Resource Load Delay 최적화
- Resource Load Delay란 무엇인가?
- 브라우저는 LCP 요소를 어떻게 찾는가?
- Why Load Delay Matters for the Core Web Vitals
- How to Detect Resource Load Delay
- Chrome DevTools Performance 패널 가이드
- 흔히 발생하는 원인과 해결 방법
- Resource Hints를 이용한 고급 우선순위 지정
- <link rel="preload">로 신속한 발견 강제하기
- fetchpriority="high"와 브라우저 우선순위 큐
- 외부 연결 최적화: preconnect 및 dns-prefetch
- 표: LCP 최적화 관련 Resource Hint 요약
- 거시적이고 발전적인 대응책
- 최신 CDN의 역할
- Speculation Rules 기반의 지연 Zero 실현
- 사례 분석: 이론에서 필드로
- Load Delay 개선 방법
- 다음 단계: LCP 최적화 이어가기
Resource Load Delay란 무엇인가?
Resource Load Delay는 TTFB와 브라우저가 LCP 리소스 다운로드를 시작하는 시점 사이의 시간이다. 브라우저는 LCP 리소스(예: 이미지)를 가능한 한 빨리 대기열에 추가해야 한다. 그렇지 못하다면 브라우저가 리소스를 바로 찾지 못했거나 중요도를 인식하지 못했기 때문이다.
이 값이 높으면 브라우저가 초기 HTML payload에서 리소스 URL을 찾지 못하는 구조적 문제가 있음을 뜻한다. 브라우저가 LCP 리소스를 식별하고 결정을 내리는 데 시간을 허비하고 있다는 방증이다.Resource Load Delay는 리소스가 실제로 로드되기 전에 발생한다. 따라서 반응형 이미지나 WebP, AviF 같은 포맷과는 전혀 무관하다.

텍스트 기반이고 시스템 폰트를 쓰는 LCP 요소는 외부 리소스가 필요 없어 Resource Load Delay가 대개 0이다. 높은 지연 값은 이미지나 동영상 등 외부 리소스에 의존할 때 발생한다.
브라우저는 LCP 요소를 어떻게 찾는가?
Resource Load Delay를 줄이려면 브라우저의 리소스 발견 방식을 알아야 한다. 브라우저는 빠른 경로와 느린 경로라는 두 가지 메커니즘을 쓴다. LCP 요소를 반드시 '빠른 경로'에 배치해야 한다.
- DOM 파서 (느린 경로): 브라우저의 메인 파서로 매우 무겁다. HTML, 스타일시트를 읽고 JavaScript와 상호작용해 페이지를 빌드한다. 다른 파일의 다운로드와 실행에 의해 쉽게 지연되거나 중단되므로 느린 경로다.
- Preload Scanner (빠른 경로): DOM 파서보다 훨씬 빠른 보조 스캐너다. 다운로드 가능한 리소스를 빠르게 스캔하며 중단되지 않는다. <script>, lazy loading이 없는 <img> 또는 <link> 태그를 발견하면 CSS 파싱이나 JavaScript 실행 전이라도 즉시 다운로드 대기열에 추가한다. 중요 리소스에 가장 적합한 경로다.
Resource Load Delay 최적화의 핵심 원칙은 LCP 리소스 URL을 Preload Scanner가 최대한 빨리 발견하게 만드는 것이다.
이를 위해 두 가지가 필요하다.- loading="lazy" 속성이 없는 일반 이미지 태그를 사용하여 Preload Scanner가 찾을 수 있게 한다.
- Preload Scanner가 중요하지 않은 리소스를 너무 많이 우선시하지 않게 관리한다.
자세한 내용은 아래에서 설명하겠다. 다만 지금은 이것만 기억해라. 초기 HTML 문서에서 URL을 숨기는 모든 패턴은 브라우저가 느린 경로를 쓰도록 강제한다. 이 대기 시간은 바로 Resource Load Delay가 된다. 모든 효과적인 최적화는 HTML을 고쳐 LCP 리소스를 빠른 경로의 가장 높은 위치에 배치하는 것이다. 리소스 우선순위 지정에 관한 전체 가이드는 리소스 우선순위 지정 문서를 참고해라.Why Load Delay Matters for the Core Web Vitals
흔히 LCP를 '파일 크기' 문제로 오해한다. 그래서 이미지 압축이나 최신 포맷에만 집착하는데 이는 실수다. 자체 Core Web Vitals 연구에 따르면 LCP의 가장 큰 병목은 TTFB(48%)이며, 그 다음은 Load delay(24%)다. 로드 시간은 10%에 불과하며 Render delay가 17%를 차지한다.

TTFB는 항상 발생하지만 Load delay는 거의 완벽히 해결할 수. 따라서 Load delay는 최적화 잠재력이 가장 크다.
How to Detect Resource Load Delay
Resource Load Delay를 해결하려면 먼저 정확히 측정해야 한다. 항상 CrUX를 먼저 확인하여 현황을 파악하고, 실제 사용자 데이터(RUM)로 문제를 정의한 뒤, Chrome DevTools로 심층 분석하는 흐름으로 진행한다.
단계 1: CrUX 확인
CrUX는 Google이 공개하는 실제 사용자 field data다. 75백분위수 기준 Core Web Vitals의 28일 이동 뷰를 보여준다. 수치가 좋은지 나쁜지만 알려주고 원인이나 대상은 제공하지 않는다. Google이 CrUX 데이터를 신뢰하므로 분석의 시작점으로 삼기 좋다.
Go to cruxvis.withgoogle.com, enter your website and navigate to Loading Performance and click on Largest Contentful Paint (LCP) image subparts
단계 2: Field Data (RUM) 분석
RUM은 모든 실제 사용자로부터 Core Web Vitals를 수집해 혹은 더 상세한 정보를 준다. 데이터를 원하는 대로 쪼개서 누구에게 어떤 문제가 발생했는지 보여주지만(이 정보는 매우 값지다), 원인은 알려주지 않는다.
단계 3: DevTools로 진단
RUM 데이터로 대상 페이지와 LCP 요소를 식별한 후 Chrome DevTools로 원인을 규명한다. 문제를 재현하고 LCP 하위 단계를 측정해 정확한 Resource Load Delay 값을 얻는 것이 목표다. DevTools를 활용하면 main thread 분석을 통해 어떤 작업이 실행되어 렌더링을 방해하는지 명확히 볼 수 있다.
Chrome DevTools Performance 패널 가이드
Chrome DevTools의 Performance 패널은 LCP를 해부하고 load delay를 수치화하는 데 필수적인 도구다.
1. 설정 및 구성:
- 페이지 우클릭 후 '검사'를 클릭하거나 단축키 Ctrl+Shift+I(Windows/Linux) 또는 Cmd+Option+I(Mac)로 Chrome DevTools를 연다.
- Performance 탭으로 이동한다.
- 캡처 설정에서 Web Vitals 체크박스를 켠다. 타임라인에 Core Web Vitals 정보가 오버레이된다.
- 실제 조건과 유사하게 CPU 및 네트워크 throttling을 적용한다. 모바일 테스트 시 CPU '4배 감속(4x slowdown)'과 'Fast 3G' 또는 'Slow 4G' 프로필이 적당하다.
2. 성능 프로필 기록:
- Performance 패널에서 '기록 및 페이지 새로고침' 버튼(원형 화살표)을 클릭한다. 기록과 함께 페이지가 새로고침되며 로드가 끝나면 자동으로 멈춘다.
3. 분석 및 해석:
- Timings 트랙: 메인 타임라인 뷰에서 Timings 트랙을 찾는다. LCP 마커가 보이며, 마우스를 올리면 viewport 스크린샷에서 해당 요소가 강조되고 LCP 시간이 표시된다.
- 단계별 LCP 세부 정보: Timings 트랙의 LCP 마커를 클릭한다. 하단 Summary 탭에서 4가지 하위 단계의 소요 시간(Load delay 포함)을 확인할 수 있다. 이 값이 리소스 로드 지연을 보여주는 가장 정확한 측정치다.
- Main Thread 분석: Main 트랙에서 long task(빨간색 삼각형 표시)를 찾는다. 리소스 로드 완료 후 LCP 마커 표시 전 사이에 long task가 있다면 Element Render Delay를 유발하고 있을 가능성이 크다.
흔히 발생하는 원인과 해결 방법
높은 Resource Load Delay는 두 가지 원인 중 하나다. 발견이 늦었거나, 우선순위가 낮기 때문이다. 흔히 하는 아키텍처적 실수와 해결책을 정리했다.
원인: LCP Loaded via CSS
문제점: Preload Scanner는 CSS를 파싱하지 않는다. CSS background-image로 지정된 LCP 이미지는 발견할 수 없다. HTML 다운로드, CSS 링크 검색, CSS 다운로드, CSSOM 빌드, 스타일 적용 단계를 모두 거친 후에야 이미지를 찾게 된다. 이 의존성 체인이 높은 Resource Load Delay의 원인이다. 자세한 사항은 배경 이미지 연기하기 문서를 참고해라.
해결책: 중요 LCP 요소에는 background-image 사용을 금해야 한다. 대신 표준 <img> 태그를 사용해라. URL이 HTML에 노출되어 Preload Scanner가 즉시 찾을 수 있다. 시각적 연출은 CSS로 동일하게 처리 가능하다.
구현 예시:
Anti-Pattern (Do Not Do This):
<!-- CSS --> .hero { background-image: url('hero-image.jpg'); height: 500px; width: 100%; } <!-- HTML --> <div class="hero"></div>Best Practice (Do This Instead):
<!-- HTML --> <div class="hero-container"> <img src="hero-image.jpg" alt="A descriptive alt text for the hero image" fetchpriority="high" class="hero-background-img" width="1200" height="500" /> <div class="hero-content"> <h1>페이지 제목</h1> </div> </div> <!-- CSS --> .hero-container { position: relative; height: 500px; width: 100%; } .hero-background-img { position: absolute; inset: 0; /* top: 0; right: 0; bottom: 0; left: 0; 과 동일 */ width: 100%; height: 100%; object-fit: cover; /* background-size: cover 효과를 모방하는 속성 */ z-index: -1; /* 이미지를 다른 콘텐츠 뒤에 배치 */ }이렇게 하면 비주얼은 동일하게 유지하면서 LCP 이미지가 가장 먼저 발견되어 로드 지연이 최소화된다.
원인: Client-Side Rendering 및 JavaScript 삽입
문제점: React나 Vue 같은 Client-Side Rendering(CSR) 프레임워크는 대개 빈 껍데기 HTML만 보낸다. 프레임워크 번들을 받고 실행한 뒤에야 JavaScript가 LCP 태그를 DOM에 삽입하므로, Preload Scanner가 리소스를 찾지 못하고 큰 지연이 발생한다.
해결책: 가장 효과적인 조치는 초기 렌더링을 서버로 옮기는 것이다.
- Server-Side Rendering (SSR) 또는 Static Site Generation (SSG): 서버에서 미리 완성된 HTML을 생성한다. 브라우저가 리소스 정보를 포함한 문서를 받으므로 Preload Scanner가 LCP 리소스를 즉시 발견할 수 있다. 성능이 핵심인 페이지의 필수 구조다.
- 프레임워크 최적화 기능: 최신 프레임워크는 관련 기능을 내장하고 있다. 일례로 Next.js의 <Image> 컴포넌트는 priority 속성을 제공한다. 이를 true로 설정하면 <link rel="preload"> 및 fetchpriority="high"가 자동 추가되어 최우선으로 리소스를 획득한다.
원인: LCP 이미지에 loading="lazy" 지정
문제점: 자주 범하는 심각한 실수다.
loading="lazy"는 이미지가 viewport에 접근하기 전까지 로드를 미루라는 명령이다. 스크롤 아래 이미지에는 유용하나, 화면 위의 LCP 리소스에 쓰면 안 된다. Preload Scanner는 이 속성이 붙은 이미지를 지나치도록 설계되어 있어 강제로 Resource Load Delay를 유발한다.해결책: 철저한 감사가 요구된다.
- LCP 이미지에서 loading="lazy" 제거: LCP 후보 이미지에는 절대
loading="lazy"를 써선 안 된다. 브라우저 기본값은loading="eager"이며, 화면 위의 중요 리소스에는 이 기본 설정이 알맞다. 속성 자체를 생략해도 똑같이 작동한다. - 플러그인 및 CMS 검토: WordPress 등의 플랫폼이나 플러그인은 모든 이미지에 자동으로 lazy loading을 건다. LCP 이미지는 예외로 설정해야 하며, 보통 페이지 첫머리의 1~2개 이미지에 대한 제외 규칙을 등록해 해결한다.
원인: 비효율적인 HTML 구조 및 문서 크기
문제점: Preload Scanner는 HTML을 위에서부터 스캔한다. 중요하지 않은 스크립트나 헤더 아이콘이 LCP 이미지보다 상단에 있으면 먼저 다운로드 큐에 등록되어 대역폭을 빼앗는다. HTML 문서 크기가 너무 커서 LCP 태그가 최초 데이터 청크(약 14KB)에 포함되지 않아도 최소 1 RTT만큼 발견이 지연된다.
해결책: HTML 구조와 리소스 우선순위 조율.
- HTML 순서 최적화: LCP 이미지 태그는 <body> 내부에서 최대한 앞쪽으로 당겨 배치해라.
- 기타 이미지 순위 강하: 상단 헤더에 들어가는 로고나 아이콘 등은
loading="lazy"를 적용해 Preload Scanner가 넘어가게 유도하고 LCP 요소를 위한 네트워크를 비축한다. - 비필수 스크립트 연기: 광고, 통계 분석용 스크립트는 초기 렌더링과 전혀 무관하다. 이들의 태그를
<script>의 최하단으로 옮기거나defer속성을 부여해 리소스 다운로드를 방해하지 못하게 한다.
Resource Hints를 이용한 고급 우선순위 지정
Once the LCP resource is discoverable in the HTML, you can use resource hints to give the browser more explicit instructions on how to fetch it. These hints provide fine-grained control over discovery and prioritization.
<link rel="preload">로 신속한 발견 강제하기
<link rel="preload">는 명령이다. 브라우저가 해당 자원을 발견하기 전에 강제로 고순위 다운로드를 보장한다. 폰트나 CSS 배경 이미지처럼 브라우저 검색망의 바깥에 있거나 DOM 너무 깊숙이 묻힌 LCP 이미지를 위한 확실한 대비책이다. 구체적인 사례는 LCP 이미지 preload 방법을 참고해라.
작동 방식
<head>에preload를 두면 Preload Scanner가 인지 후 대기열에 바로 등록한다. 스타일시트의@font-face폰트나 배경 이미지 형태로 탑재된 LCP, 그리고 중첩 DOM 깊이 박힌 리소스 로드에 유리한다.반응형 Preloading
반응형 이미지를 다룰 때는 특별한 처리가 필요하다. 사용자의 viewport 규격에 맞는 파일만 preload하여 이중 다운로드를 방지하려면,
<link rel="preload">에 매칭되는<img>의 속성과 일치하는imagesrcset및imagesizes를 반드시 명기해야 한다.반응형 Preloading 예시:
<link rel="preload" as="image" href="lcp-image-large.jpg" imagesrcset="lcp-image-small.jpg 400w, lcp-image-medium.jpg 800w, lcp-image-large.jpg 1200w" imagesizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px" fetchpriority="high"> <img src="lcp-image-large.jpg" srcset="lcp-image-small.jpg 400w, lcp-image-medium.jpg 800w, lcp-image-large.jpg 1200w" sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px" alt="A descriptive alt text" fetchpriority="high" width="1200" height="675">잠재적 위험 요인
Preloading은 획득 시점(fetch timing)(Load Delay 및 Load Duration)을 해결하지만 그리는 시점(paint timing)까지 해결하지는 못한다. 리소스를 신속히 받아도 main thread가 heavy JavaScript나 render blocking CSS에 눌려 있으면 화면 표시가 밀리므로 병목이 Element Render Delay로 고스란히 넘어간다.
fetchpriority="high"와 브라우저 우선순위 큐fetchpriority는 다운로드 경쟁 속에서 리소스의 가치를 전달하는 힌트다. 대기열 내 선두 배치 여부에 관여한다.우선순위 부여 원리
브라우저는 발견한 리소스에 기초 순위를 매긴다. 대개 viewport 내부 이미지는 "Low"로 시작하며 CSS 파싱과 레이아웃 연산 후에야 "High"로 승격된다. 이 승격 단계의 지연을 해결하기 위해
fetchpriority="high"로 처음부터 "High" 자격을 쥐여주는 방식을 사용한다.preload대fetchpriority두 도구는 역할이 완전히 다르며 연계해 쓸 수 있다.
preload는 대기열 진입 시점을 당기고,fetchpriority는 대기열 진입 이후의 순위를 보장한다. 즉 preload는 늦은 발견을, fetchpriority는 저평가 대기를 해결한다. HTML에 있는 LCP는 fetchpriority 설정만으로 충분한 경우가 많다. 상세 내용은 리소스 우선순위 지정 가이드를 참고해라.LCP의 정석
LCP 이미지는 두 도구를 함께 사용해야 한다. HTML 상단 배치 혹은
preload로 조기 발견 경로를 확보하고, 태그 자체에fetchpriority="high"를 넣는다. 이 배치가 완성되어야 스타일시트 등 다른 자원과의 치열한 대역폭 다툼에서 이긴다.예시:
<img src="lcp-image.jpg" fetchpriority="high" alt="A critical hero image">
fetchpriority="low"활용fetchpriority는 하향 조정에도 쓰인다. LCP의 경쟁 리소스를fetchpriority="low"로 묶어 대역폭 싸움에서 몰아낸다. 헤더 영역의 미세 아이콘이나 당장 필요치 않은 리소스가 강하 타겟이다. 주변 리소스를 낮춰 공간을 마련해야 LCP 전송 속도가 올라간다.<!-- LCP 이미지: 높은 우선순위 --> <img src="hero.jpg" fetchpriority="high" alt="Hero image" width="1200" height="600"> <!-- 비중요 화면 상단 이미지: 낮은 우선순위 --> <img src="avatar.jpg" fetchpriority="low" alt="Author avatar" width="48" height="48">
검증된 효과
Google Flights 사례 연구에서는 LCP background-image에
fetchpriority="high"를 추가하는 간단한 작업으로 LCP를 2.6초에서 1.9초로 단축하며 700ms의 개선 효과를 보였다.외부 연결 최적화:
preconnect및dns-prefetch문제 요인
LCP 이미지가 외부 CDN이나 Google Fonts처럼 다른 도메인에 호스팅되어 있으면 신규 통신 연결을 맺어야 한다. 여기에는 DNS 조회, TCP 핸드셰이크, TLS 협상이 모두 들어가며 리소스 다운로드 개시 전에 이 단계가 선행되어야 한다. 이 과정의 딜레이가 Resource Load Delay로 고스란히 이어진다.
대비책
preconnect: 백그라운드에서 특정 도메인과의 접속 수립(DNS, TCP, TLS)을 선행해 두는 힌트다. 실제 데이터를 땡겨올 때는 이미 다 뚫어놓은 선로를 타므로 접속 지연이 0이 된다. LCP 서빙 도메인에 지정해 두면 매우 탁월하다.dns-prefetch: DNS 검색 정보만 선탑재하는 소량 힌트다.preconnect보다는 단순하지만 구형 브라우저 지원 폭이 넓어 보완용으로 유용하다.
작성 요령
두 가지 힌트를 교차 탑재하는 구조가 호환성에 가장 적합하다. 브라우저는
preconnect를 지원하면 이를 사용하고, 지원하지 않으면dns-prefetch로 자동 절하해 기동한다. 폰트 등 CORS 처리가 따르는 리소스에는crossorigin기재가 필수다.<link rel="preconnect" href="https://my-image-cdn.com" crossorigin> <link rel="dns-prefetch" href="https://my-image-cdn.com"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
표: LCP 최적화 관련 Resource Hint 요약
각 힌트의 정확한 기능 분류와 혼선 방지를 위한 비교 일람이다.
힌트 유형 주요 목적 LCP Load Delay에 미치는 영향 LCP 모범 활용 사례 preload명령(Directive) 특정 리소스를 신속하게 강제 가져오기 늦게 발견되는 리소스의 발견 지연을 직접 제거함 늦게 발견되는 LCP 이미지(예: CSS background-image) 또는 폰트.fetchpriority힌트 발견된 리소스의 다운로드 우선순위 알림 다른 자산보다 우선순위를 높여 대기열 지연을 줄임 LCP <img>태그 자체에 적용하여 덜 중요한 리소스보다 먼저 다운로드되도록 보장함.preconnect힌트 도메인에 대한 전체 네트워크 연결 준비 크로스 오리진 연결 설정 시간(DNS, TCP, TLS) 제거 LCP 이미지 또는 폰트가 호스팅된 핵심 외부 도메인. dns-prefetch힌트 도메인의 DNS 조회만 준비 크로스 오리진 연결 시간 중 DNS 조회 시간 단축 preconnect지원이 없는 경우의 fallback 또는 덜 중요한 외부 도메인.거시적이고 발전적인 대응책
Beyond resource hints, broader architectural decisions can reduce Resource Load Delay even further.
최신 CDN의 역할
CDN은 사용자 부하를 경감시키고 LCP 리소스 로드 속도를 간접적으로 크게 올려주는 핵심 요소다.
- 접속 지연 감소: 전 세계 엣지에 파일을 미러링해 사용자와 지리적으로 밀착한다. 이를 통해 DNS, TCP, TLS에 들어가는 RTT(왕복 시간)가 원천적으로 단축되므로 로드 지연도 정비례해 감소한다.
- 이미지 CDN: 단순 전송을 넘어 기기별 포맷 변환(AVIF, WebP 등), 해상도 대응 축소, 압축 필터링 등을 동적으로 행하며 다운로드 타임까지 획기적으로 깎아준다.
- 최신 통신 규격: 최근 CDN들은 TCP를 대체하는 HTTP/3(QUIC)를 탑재해 초기 세션 생성 시간을 깎고 데이터 분출 병목(Head-of-Line Blocking)을 예방한다.
Speculation Rules 기반의 지연 Zero 실현
Speculation Rules API를 적용하면 다음 페이지 진입 시 LCP 지연이 완전히 제거된다.
원리
사용자가 넘어갈 다음 목적지 URL 정보를 사전에 브라우저에 인출한다. 브라우저는 클릭 행위가 발생하기 전부터 해당 주소를 백그라운드 탭에 prerender(사전 렌더링) 처리한다.
LCP 결과
prerender된 상태의 주소를 누르면 대기 시간 없이 즉시 전환된다. 백그라운드에 이미 다 그려진 페이지가 출력되므로 TTFB, Resource Load Delay, Resource Load Duration, Element Render Delay 수치가 전부 0에 가까워진다.
사례
상품 리스트에서 상단의 서너 개 품목의 상세 페이지를 미리 prerender 대상으로 올려두고, 고객이 클릭 시 버퍼링 없이 즉시 전면 노출되도록 제어할 수 있다.
사례 분석: 이론에서 필드로
이 최적화 기법들은 데이터 수치로 실익이 즉각 증명된다.
- 사례 1: Preloading의 효과: DebugBear의 테스트 결과, 요청 체인 뒤에 LCP 이미지가 가려져 Resource Load Delay가 전체 LCP 수치의 75%에 육박했다. 여기에
<link rel="preload">한 줄을 도입해 강제 탐색하게 하자 Resource Load Delay가 단 2% 수준으로 곤두박질쳤다. 간단한 교정의 위력이다. - 사례 2: 실제
loading="lazy"오류: 빠른 네트워크인데 데스크톱 LCP에 1,430ms의 대기 지연이 나타난다는 질문이 있었다. 확인 결과 플러그인이 LCP 이미지 src를 투명 placeholder SVG로 교체해 강제 지연 처리하고 있었다. 관련 설정을 끄고 eagerly로 변경하자 문제가 해결되었다. 툴이 성능을 해치는 좋은 예다. - 사례 3:
fetchpriority활용: Google Flights 사례에서는 LCP 영역 이미지에fetchpriority="high"를 설정해 LCP 시간을 2.6초에서 1.9초로 당기며 700ms를 개선했다. 아무리 발견이 빨라도 브라우저에 중요도를 각인시켜 우선 처리 혜택을 쥐여줘야 성공한다.
DevTools 네트워크 검사: 단축키
Ctrl + Shift + I로 도구를 열고 Network 탭에서 페이지를 리로드해라. LCP 자원이 로드 대열 맨 처음에 잡히는지 확인한다. 하단으로 처져 있다면 로드 지연 문제가 발생한 것이다. 최적화되지 않은 페이지의 예시 화면이다.
RUM 데이터 활용: 실제 사용자 모니터링 도구는 대개 LCP 기여도 데이터(attribution data)를 기록한다. RUM을 활용하면 LCP 하위 파트의 상세 분석(시간 경과 또는 페이지별)을 시각화할 수 있으므로, 전체 사이트 또는 페이지별 LCP 요소의 로드 지연 현황을 명확하게 파악할 수 있다. 아래 예시는 관련 로드 지연과 함께 전체 LCP 상세 분석을 보여준다.

Load Delay 개선 방법
Resource Load Delay는 리소스 순서와 타이밍이 안 맞을 때 발생한다. 해결책은 둘 중 하나다. LCP 리소스 우선순위를 높이거나, 비LCP 리소스의 순위를 내리는 것이다.
LCP 팁: Preload Scanner 활용: HTML을 빠르게 훑어 다운로드 큐를 채우는 장치다. 여기에 포착되지 못하면 느린 DOM 파서 단계까지 지연된다. LCP 리소스를 Preload Scanner 노출 범위에 두는 것이 최선이다.
1. HTML 구조 최적화
브라우저는 HTML 상단부터 스캔하므로 LCP 코드가 높이 있을수록 빨리 로딩을 시작한다. 불필요한 자원은 상단에서 치운다.
- 불필요 이미지에 lazy-loading 설정: 사이트 최상단 국기 아이콘 등은 LCP와 관계없다. lazy-loading을 걸면 후순위로 밀려 LCP 전송 통로를 비워준다.
- 불필요 스크립트는 하단 배치: 당장 불필요한 스크립트는 최하단으로 옮겨 대역폭 낭비를 막는다. 예컨대 화면이 뜨기도 전에 채팅 위젯부터 활성화할 이유는 없다.
2. 배경 이미지 지양
배경 이미지는 Preload Scanner가 무시해 DOM 파서까지 밀린다. 일반
<img>태그를 쓰고object-fit: cover속성으로 배경 효과를 대체하면 큐에 즉시 등록된다.3. Fetch Priority 활용
LCP 이미지 태그에
fetchpriority="high"를 명기해 초기부터 "High" 등급으로 로드를 시작한다. 일반 이미지는 보통 "Low"로 시작되어 CSS 분석 및 레이아웃을 마친 뒤 승격되기에 그 시간만큼 딜레이가 쌓인다.Fetchpriority는 리소스 간 상대적 가치를 알려주는 힌트이므로 stylesheets나 비차단 스크립트보다 무조건 앞서 로드됨을 강제하진 못하지만, 이미지 대열 내 정돈에는 필수다.
<img src="hero-image.jpg" alt="Hero Image" fetchpriority="high">
4. Preloading 구현
순서 배정을 고의로 앞당긴다.
head영역에<link rel="preload">를 걸어 LCP를 즉시 획득하게 한다. 슬라이더처럼 문서 뒤에 나오거나 숨어 있는 이미지를 조기에 보정할 수 있다.head내 스타일시트 뒤, 스크립트 전에 배치하는 것이 정석이다.<link rel="preload" as="image" href="hero-image.jpg">
5. 스타일 최적화
스타일시트가 있어야 렌더링에 착수하므로 먼저 다운로드하는 구조가 옳다. 그러나 용량이 과하거나 개수가 너무 많으면 LCP 리소스 대역폭을 빼앗아 방해물이 된다.
6. 효율적인 lazy-loading 구현
loading 속성은 양날의 검이다. LCP 이미지에는 절대
loading="lazy"를 붙이지 말고 기본값인 eager로 둔다. 반면 화면 밖 리소스에는 무조건 lazy를 부여한다.- LCP는 Eager로 로드: LCP를 lazy 처리하면 Preload Scanner가 패스하므로 화면 출력이 늦어져 치명적이다.
- Viewport 이미지 Lazy-Load: viewport 내 다른 주변 자원은
loading="lazy"로 걸어 LCP 전송로를 비워준다. - 화면 밖 이미지 로드 피하기: 보이는 viewport 밖에 있는 이미지는 다운로드를 트리거하지 않으므로 대역폭 경쟁이 완전히 차단된다.
7. 브라우저 캐싱
로컬 저장소 자원을 활용해 요청을 생략한다. 첫 진입에는 효과가 없으나 재방문자와 후속 페이지 로딩 시간을 대폭 깎는다.
- 경쟁 리소스 캐싱: LCP 본인뿐 아니라 스크립트, 스타일 등 주변 리소스가 캐시 처리되어 있으면 통신 충돌이 차단되므로 LCP Resource Load Delay를 개선한다.
- 서버 자원 보존: 불필요 통신 소멸로 대역폭이 절약되고 서버 부하도 급감한다.
8. Speculation Rules 활용
사용자 이동 경로를 예단해 prefetch나 prerender를 건다. Prefetching은 LCP의 Time to First Byte 단계를 죽이지만 로드 지연 자체는 놔둔다. 반면 Prerendering은 백그라운드에서 모든 자원을 받고 선구축하므로 후속 진입 시 LCP 관련 지연이 전부 0으로 소멸한다.

9. Avoid Client-Side Rendering
Client-side rendering(CSR)은 로드 지연 문제에서 가장 지양해야 할 작성법이다. LCP 요소를 JavaScript로 그리면 HTML 분석 단계에는 리소스가 보이지 않아 선행 스크립트들이 실행 완료되기 전까지 대기 큐에 들어가지도 못한다.이 오버헤드는 고스란히 딜레이로 축적되어 사용자 경험을 훼손한다. 초기 HTML 내에 리소스 명세가 드러나는 Server-Side Rendering이나 Static Site Generation 구조를 권장한다.다음 단계: LCP 최적화 이어가기
Resource Load Delay는 LCP 4대 단계 중 하나다. 발견 지연을 고쳤다면 아래 가이드를 활용해라.
- LCP 문제 식별 및 해결: LCP 결함 추적과 정리를 위한 완전한 진단 체계.
- LCP 이미지 최적화: 최적 이미지 포맷 적용, 반응형 디자인 분기, 사전 로드 및 빈번한 오작성 제어법.
- Resource Load Duration: 압축, 차세대 포맷 채택, CDN 최적화로 이미지 통신 시간 깎기.
- Element Render Delay: main thread를 선점하는 장애 요소를 제거하고 다운로드 완료 직후 출력하기.