이미지 지연 로딩
이미지가 화면에 나타날 때만 로드합니다.
이미지 지연 로딩은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
지연 로딩의 개념
지연 로딩은 이미지가 화면에 나타나기 직전까지 이미지 다운로드를 미루는 방식입니다. 특히 이미지가 많고 긴 페이지에서 대역폭을 절약하고 초기 페이지 로딩 속도를 높일 수 있습니다.
실제 URL 저장하기
핵심은 처음부터 실제 이미지 URL을 src에 넣지 않는 것입니다. 대신 data-src 속성에 저장하면 브라우저가 아직 이미지를 다운로드하지 않습니다.
// Markup pattern:
// <img data-src="photo-large.jpg" alt="Scenery">
// The browser will not fetch anything until we set src.지연 로딩할 이미지 선택하기
지연 로딩이 필요한 모든 이미지를 수집합니다. 일반적으로 공통 클래스를 사용하거나 data-src가 있는지 확인합니다.
const lazyImages = document.querySelectorAll('img[data-src]');
console.log('found', lazyImages.length, 'lazy images');관찰자 만들기
이미지가 교차하면 실제 이미지를 로드하는 콜백을 가진 관찰자를 만듭니다. 이미지가 나타나기 조금 전에 로딩을 시작하도록 rootMargin을 사용합니다.
const observer = new IntersectionObserver((entries, obs) => {
// handle entries here
}, { rootMargin: '100px' });교차할 때 로드하기
이미지가 교차하면 이미지의 data-src 값을 src에 복사합니다. 그러면 브라우저가 이미지를 다운로드하고 표시합니다.
const observer = new IntersectionObserver((entries, obs) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src; // triggers the download
}
});
}, { rootMargin: '100px' });로드 후 관찰 중지하기
로드가 완료된 이미지는 더 이상 관찰할 필요가 없습니다. 리소스를 해제하고 다시 트리거되는 것을 방지하려면 unobserve를 호출합니다.
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
obs.unobserve(img); // done watching this one
}관찰 시작하기
모든 지연 로딩 이미지에 대해 반복하면서 관찰을 시작합니다. 사용자가 스크롤하면 나머지는 관찰자가 처리합니다.
lazyImages.forEach(img => observer.observe(img));플레이스홀더 표시하기
실제 이미지가 로드되는 동안 작고 흐릿한 플레이스홀더나 단색을 표시하면 더 부드러운 사용자 경험을 제공할 수 있습니다. 그런 다음 이미지의 load 이벤트에서 이미지를 서서히 표시합니다.
img.addEventListener('load', () => {
img.classList.add('loaded'); // CSS can fade it in
});
img.src = img.dataset.src;네이티브 loading 속성
최신 브라우저는 img와 iframe에 loading="lazy"를 지정하는 네이티브 지연 로딩도 지원합니다. 사용자 지정 제어, 애니메이션 또는 대체 동작이 필요할 때는 Intersection Observer가 여전히 유용합니다.
// Native approach (no JS needed):
// <img src="photo.jpg" loading="lazy" alt="...">
// Observer approach gives more control and effects.data-src 정리하기
로드가 끝난 후 data-src 속성을 제거하면 DOM을 깔끔하게 유지하고 이후의 코드나 쿼리에서 혼동을 피할 수 있습니다.
img.src = img.dataset.src;
img.removeAttribute('data-src');
obs.unobserve(img);전체 패턴
Intersection Observer를 사용한 지연 로딩은 깔끔하고 효율적인 패턴입니다. URL을 data-src에 저장하고, 각 이미지를 관찰하고, 교차할 때 실제 URL로 바꾼 다음 관찰을 중지합니다. 그 결과 페이지가 더 빨라지고 이미지는 필요한 시점에 로드됩니다.
빠른 확인
이미지 지연 로딩을 얼마나 이해했는지 확인해 보세요.
복습
이미지 지연 로딩을 구현했습니다:
- 실제 URL을
data-src에 저장합니다. - Intersection Observer로 각 이미지를 관찰합니다.
- 교차하면
data-src를src에 복사하고unobserve를 호출합니다. - 뷰포트에 나타나기 직전에 미리 로드하도록
rootMargin을 사용합니다. - 네이티브
loading="lazy"는 더 간단한 대안입니다.
다음으로 무한 스크롤을 구현하겠습니다.
자주 묻는 질문
“이미지 지연 로딩” 강의는 무료인가요?
네 — “이미지 지연 로딩” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 JavaScript Academy 강의 전체를 잠금 해제할 수 있습니다. JavaScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“이미지 지연 로딩”에서 뭘 배우나요?
이미지가 화면에 나타날 때만 로드합니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
JavaScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 JavaScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“이미지 지연 로딩” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 JavaScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 JavaScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 요소 가시성 관찰하기
- 이미지 지연 로딩
- 무한 스크롤
- 스크롤로 시작되는 애니메이션