HTML의 <img> 태그는 이미지를 표시하기 위한 기본 요소로, src 속성을 통해 이미지의 위치를 지정합니다.
하지만 단순한 이미지 출력 외에도 웹 성능 최적화를 위해 다양한 기법과 속성을 함께 고려해야 합니다.
예
data:image/형식;base64,... 형태특징
URL.createObjectURL()을 통해 생성특징
URL.revokeObjectURL()로 수동 해제 필요data: URL로 직접 삽입 특징
예:
<img src="..." loading="lazy" />
값
lazy: 지연 로딩 eager: 즉시 로딩값
async: 디코딩을 백그라운드에서 비동기 처리 (기본값) sync: 디코딩을 즉시 진행 auto: 브라우저 판단에 맡김예:
<img src="..." width="400" height="300" />
→ CLS (Cumulative Layout Shift) 개선 효과
예:
<img src="default.jpg" srcset="small.jpg 600w, large.jpg 1200w" sizes="(max-width: 768px) 600px, 1200px" />
예:
<img src="..." alt="제품 썸네일 이미지" />
| 포맷 | 용도 및 특징 |
|---|---|
| JPEG | 사진, 고해상도 이미지 (손실 압축) |
| PNG | 투명 배경 필요할 때 (무손실 압축) |
| SVG | 벡터 기반 로고, 아이콘 |
| WebP | 압축률 높음. 대부분의 브라우저 지원 |
| AVIF | 최신 포맷. 고효율 압축, 일부 브라우저 미지원 |
?v=1.0 등 버전 쿼리를 추가하여 캐시 관리 Cache-Control, ETag 등)src 값 분석
- http/https → 네트워크 요청
- data: → 인코딩 데이터 디코딩
- blob: → 브라우저 메모리 참조
- file:// → 로컬 접근 (보안 제약)
이미지 디코딩
- PNG/JPEG 등 압축 해제
- SVG: 마크업 파싱
렌더링
- 픽셀 또는 벡터 데이터 화면 표시
// 일반 URL
<img src="https://example.com/image.jpg" loading="lazy" alt="풍경 이미지" />
// Base64
<img src="data:image/jpeg;base64,/9j/4AAQSkZ..." />
// Blob URL
const blob = new Blob([imageData], { type: 'image/jpeg' });
const blobUrl = URL.createObjectURL(blob);
<img src={blobUrl} />
// SVG 데이터
<img src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg">...</svg>' />
// 반응형 이미지 (srcset)
<img src="default.jpg"
srcset="small.jpg 600w, large.jpg 1200w"
sizes="(max-width: 768px) 600px, 1200px"
alt="반응형 이미지" />