Lazy Loading의 개념, 이미지 및 기타 자원을 지연 로드하는 방법, 그리고 이를 통해 웹사이트 성능을 향상시키는 구체적인 방법에 대해 설명하겠습니다. 웹사이트의 성능은 사용자 경험에 큰 영향을 미칩니다. 특히 페이지 로딩 속도가 느리면 사용자 이탈률이 증가할 수 있으며, 검색 엔진 순위에도 부정적인 영향을 미칠 수 있습니다. 이런 문제를 해결하기 위한 방법 중 하나가 바로 Lazy Loading(지연 로딩)입니다.
1. Lazy Loading이란?
- Lazy Loading(지연 로딩)은 사용자가 웹페이지를 스크롤할 때 필요한 콘텐츠만 로드하고, 화면에 보이지 않는 자원은 나중에 로드하는 기술입니다. 일반적인 웹페이지는 사용자가 페이지를 열 때 모든 이미지와 자원을 한 번에 로드합니다. 이로 인해 페이지 로딩 시간이 길어질 수 있습니다. 반면, 처음에 화면에 보이는 콘텐츠만 로드하고, 사용자가 스크롤을 내릴 때 그에 맞는 콘텐츠를 추가로 불러옵니다.
이 기법은 특히 이미지, 비디오 같은 대용량 자원에 유용하며, 초기 로딩 속도를 개선해 사용자 경험을 크게 향상시킵니다.
2. Lazy Loading의 이점
- 로딩 속도 향상: 웹페이지가 처음 로드될 때 필요한 자원만 로드하므로, 초기 로딩 시간이 크게 단축됩니다.
- 트래픽 절감: 사용자가 끝까지 스크롤하지 않으면 해당 부분의 이미지나 자원이 로드되지 않으므로, 불필요한 데이터 전송을 줄일 수 있습니다.
- SEO 최적화: 구글은 페이지 로딩 속도를 검색 순위에 반영합니다. Lazy Loading을 통해 빠른 로딩 속도를 유지하면 SEO 성과도 개선될 수 있습니다.
- 사용자 경험 개선: 빠른 로딩 속도는 사용자의 만족도를 높이며, 이탈률을 줄이는 데 기여합니다.
3. Lazy Loading 구현 방법
HTML과 JavaScript를 사용하여 간단하게 구현할 수 있습니다. 특히 HTML5의 loading 속성을 사용하면 별도의 스크립트 없이도 이미지와 iframe에 대해 적용할 수 있습니다.
1. HTML5 loading 속성 사용
HTML5에서는 이미지 태그와 iframe 태그에 loading=”lazy” 속성을 추가하는 것만으로 적용할 수 있습니다. 이 속성은 브라우저가 자동으로 화면에 보이는 시점에 이미지를 로드하도록 설정해줍니다.
<img src="image1.jpg" alt="설명" loading="lazy"> <img src="image2.jpg" alt="설명" loading="lazy">
위 코드에서 이미지들은 사용자가 페이지를 스크롤하여 화면에 들어오기 전까지 로드되지 않습니다. 이 방법은 매우 간단하며, 최신 브라우저에서 지원됩니다.
2. JavaScript로 Lazy Loading 구현
HTML5의 loading 속성을 사용하지 않는 브라우저에서도 지원하려면 JavaScript와 IntersectionObserver API를 활용할 수 있습니다. IntersectionObserver는 요소가 뷰포트 안에 들어올 때 이벤트를 감지해 이미지 로드를 시작할 수 있도록 도와줍니다.
<img data-src="image1.jpg" alt="설명" class="lazy">
<img data-src="image2.jpg" alt="설명" class="lazy">
<script>
document.addEventListener("DOMContentLoaded", function() {
let lazyImages = document.querySelectorAll('.lazy');
let observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
let img = entry.target;
img.src = img.getAttribute('data-src');
img.classList.remove('lazy');
observer.unobserve(img);
}
});
});
lazyImages.forEach(img => {
observer.observe(img);
});
});
</script>
이 스크립트는 페이지가 로드된 후 class=”lazy”를 가진 이미지들을 추적합니다. 이미지가 뷰포트에 들어오면 data-src 속성에 있는 실제 이미지를 src로 설정하고, 로드한 후 lazy 클래스를 제거합니다.
4. Lazy Loading 적용 시 주의사항
웹페이지 성능을 향상시키는 강력한 도구이지만, 잘못 구현되면 오히려 사용자 경험을 저해할 수 있습니다.
- 이미지 대신 플래시: 이미지가 지연 로드되는 동안 빈 공간이 잠시 나타날 수 있습니다. 이를 방지하려면 적절한 플레이스홀더(placeholder)를 사용하여 비어 있는 영역을 미리 채워주는 것이 좋습니다. 로딩 중 이미지를 제공하면 사용자 경험이 개선됩니다.
.lazy {
background-color: #f0f0f0;
min-height: 300px; /* 이미지 높이 설정 */
}
- SEO에 미치는 영향: 이미지나 콘텐츠가 검색 엔진에 의해 크롤링되지 않을 수 있다는 문제가 발생할 수 있습니다. 이 문제를 해결하기 위해 noscript 태그를 사용해 자바스크립트를 지원하지 않는 환경에서도 이미지가 로드될 수 있도록 설정할 수 있습니다.
<noscript>
<img src="image1.jpg" alt="설명">
</noscript>
- 브라우저 호환성: 최신 브라우저는 대부분 loading=”lazy” 속성을 지원하지만, 여전히 일부 구형 브라우저는 지원하지 않습니다. 따라서 구형 브라우저에 대비해 JavaScript로 구현된 Lazy Loading 방법을 함께 고려하는 것이 좋습니다.
5. Lazy Loading을 적용한 성능 개선 사례
- 웹페이지 로딩 속도 개선: 모든 이미지를 한 번에 로드하지 않기 때문에 초기 로딩 시간이 크게 줄어듭니다. 특히 이미지가 많은 블로그나 전자상거래 사이트에서 이 효과가 두드러집니다.
- 데이터 사용량 절감: 모바일 사용자가 제한된 데이터 플랜을 사용할 때, Lazy Loading은 불필요한 데이터를 절약할 수 있어 사용자 경험을 향상시킵니다.
- 검색 엔진 순위 개선: 구글은 웹사이트의 속도를 중요한 순위 결정 요소로 사용합니다. Lazy Loading을 통해 페이지 로딩 속도를 최적화하면 검색 엔진 순위에 긍정적인 영향을 줄 수 있습니다.
Lazy Loading은 웹사이트의 성능을 최적화하는 효과적인 기술로, 사용자가 필요로 하는 콘텐츠만 로드하여 로딩 속도를 개선할 수 있습니다. 특히 이미지나 비디오와 같은 자원을 지연 로드함으로써 데이터 사용량을 줄이고, 페이지 응답성을 높이는 데 기여할 수 있습니다. HTML5의 loading 속성을 사용하거나 JavaScript를 이용해 구현하면 보다 빠르고 사용자 친화적인 웹사이트를 만들 수 있습니다.









