모바일 기기로 접속한 사용자에게 PC용 4K 초고화질 이미지를 억지로 다운로드시키는 건 요금제 데이터 낭비이자 로딩 속도의 최악의 적입니다.
HTML에서는 접속한 기기의 디스플레이 크기(PC/모바일)나 화질(일반/레티나)에 맞춰 브라우저가 스스로 가장 적합하고 가벼운 이미지를 골라오게끔 지능적으로 제어할 수 있습니다.
1. 입는 사람 체격에 맞춰 변하는 마법의 옷
개발자가 이미지 선택지를 제공하면 브라우저가 상황에 맞게 픽(Pick)합니다.
👗
개발자가 srcset이나 <source> 태그로 모바일용, 태블릿용, PC용 이미지를 각각 준비해 던져주면, 스마트폰 브라우저는 자신의 화면 크기에 맞는 옷(이미지 파일) 딱 하나만 골라서 다운로드 받습니다.
특히 <picture> 태그는 PC에서는 가로로 긴 풍경 배너를 보여주다가, 세로로 긴 모바일 화면에서는 피사체가 잘리지 않게 크롭된 정사각형 배너로 아예 이미지를 교체해버릴 때(아트 디렉션) 최고의 능력을 발휘합니다.
2. 반응형 이미지 핵심 태그 정리
태그 및 속성
설명 및 효과
srcset="..." (속성)
하나의 <img> 태그 안에서 1x(일반 모니터), 2x(레티나/아이폰 고화질) 등 여러 후보 이미지를 쉼표로 구분해 제공합니다. 브라우저가 화질을 보고 하나를 고릅니다.
<picture>
다양한 화면 비율과 크기에 맞춰 완전히 다른 여러 개의 이미지 파일을 감싸서 상황에 맞게 교체해주는 최상위 컨테이너 태그입니다.
<source>
<picture> 태그 내부에서 사용되며, media="(min-width: 800px)" 같은 CSS 미디어 쿼리 조건에 따라 언제 이 이미지를 렌더링할지 지정합니다.
<div class="responsive-container">
<h2>반응형 이미지 갤러리</h2>
<p class="hint">💡 브라우저 창 크기를 좌우로 조절해보세요!</p>
<!-- 1. srcset: 같은 비율이지만 화질(해상도)만 바뀔 때 -->
<div class="card">
<h3>1. 디스플레이 화질 대응 (srcset)</h3>
<p>일반 모니터(1x)와 고화질 레티나 화면(2x)을 구분합니다.</p>
<img class="img-responsive"
src="https://picsum.photos/id/237/400/250"
srcset="https://picsum.photos/id/237/400/250 1x,
https://picsum.photos/id/237/800/500 2x"
alt="귀여운 강아지">
</div>
<!-- 2. picture: 기기 크기에 따라 이미지 비율/디자인 자체가 바뀔 때 (Art Direction) -->
<div class="card">
<h3>2. 아트 디렉션 (<picture>)</h3>
<p>PC는 가로 배너, 태블릿은 중간, 모바일은 정사각형으로 아예 다른 이미지를 로드합니다.</p>
<picture>
<!-- 화면이 넓을 때 (PC 1024px 이상) -->
<source media="(min-width: 1024px)" srcset="https://picsum.photos/id/10/1024/300">
<!-- 화면이 중간일 때 (Tablet 768px 이상) -->
<source media="(min-width: 768px)" srcset="https://picsum.photos/id/10/768/400">
<!-- 기본값 (Mobile 768px 미만) -->
<img class="img-responsive art-direction" src="https://picsum.photos/id/10/400/400" alt="풍경 배너">
</picture>
</div>
</div>