웹사이트나 애플리케이션에서 사용되는 이미지의 품질을 유지하면서 파일 크기를 줄이는 과정. 웹페이지를 더 빠르게 로딩하고, 사용자 경험을 개선할 수 있으며 서버 리소스의 절약과 SEO 최적화에 긍정적 영향을 미친다.
1. 포맷 선택
이미지의 종류에 따라 적합한 파일 형식을 선택하는 것이 중요하다. 각 형식은 특성과 용도가 다르다.
2. 압축 사용
이미지를 압축하면 용량을 줄일 수 있지만, 손실 압축과 무손실 압축 사이에 균형이 필요하다.
3. 이미지 크기 조절
불필요하게 큰 해상도의 이미지는 페이지 로딩 속도를 저하시킨다.
반응형 이미지 사용 : 다양한 해상도에 맞게 이미지 크기를 조정해 불필요한 용량 낭비를 줄인다.
CSS와 HTML 속성 활용
<img scr="image.jpg" width="300">처럼 특정 크기를 지정하면 이미지가 고정된 해상도로 로딩된다.<picture> 태그를 활용해 다른 디바이스에 따라 적합한 이미지를 표시할 수 있다.4. Lazy Loading (지연 로딩)
웹 페이지가 열릴 때 모든 이미지를 한 번에 로딩하면 초기 로딩 속도가 느려질 수 있다. 지연 로딩으로 사용자가 스크롤할 때 해당 부분의 이미지를 로딩한다.
🖥️ html
<img src="image.jpg" loading="lazy" alt="Lazy load example">
IntersectionObserver API를 사용해 지연 로딩 구현 가능🖥️ javascript
const images = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});
});
images.forEach(img => observer.observe(img));
❓IntersectionObserver API
5. 이미지 캐싱 사용
힌 번 로딩된 이미지를 캐시에 저장하면, 다음 방문 시 서버가 아닌 브라우저가 이미지를 제공해 로딩 속도가 빨라진다.
🖥️ apache
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
</IfModule>
// 이미지를 1년 동안 캐시에 저장
6. CDN (Content Delivery Network) 활용
CDN은 사용자 위치 기반, 가까운 서버에서 이미지를 전달하는 네트워크이다.
🖥️ html
<img src="https://cdn.example.com/image.jpg" alt="Image from CDN">
➡️ 다양한 방법과 도구를 활용해 로딩 속도를 높이고
사용자 경험을 향상시키는 과정 중 하나가 바로 이미지 최적화.
웹사이트 성능과 SEO가 동시에 개선된다.