Next.js Image 컴포넌트란?
Next.js Image 컴포넌트는 기본 HTML <img> 태그를 대체하여 자동으로 이미지 최적화와 성능 향상을 제공하는 React 컴포넌트입니다. 웹 성능에 큰 영향을 미치는 이미지 처리를 개발자가 별도로 구현하지 않아도 최적화된 상태로 제공받을 수 있습니다.
기본 <img> 태그와 달리 Next.js Image는 현대 웹 환경에 맞는 이미지 최적화 기능들을 내장하고 있어, 사용자 경험과 웹사이트 성능을 동시에 개선할 수 있습니다.
핵심 개념
1. 자동 포맷 최적화
Next.js Image는 브라우저 지원 여부에 따라 최적의 이미지 포맷을 자동으로 선택합니다.
// 기본 img 태그
<img src="/photo.jpg" alt="사진" />
// Next.js Image - 브라우저가 WebP를 지원하면 자동으로 WebP 제공
import Image from 'next/image'
<Image
src="/photo.jpg"
alt="사진"
width={500}
height={300}
/>
WebP를 지원하는 브라우저에서는 JPEG/PNG 대신 WebP를 제공하여 파일 크기를 25-50% 줄일 수 있습니다. 사용자는 동일한 이미지 품질을 더 빠르게 로딩할 수 있게 됩니다.
2. 반응형 이미지 크기 조정
요청되는 뷰포트 크기에 따라 적절한 크기의 이미지를 제공합니다.
// 다양한 화면 크기에 맞는 이미지 제공
<Image
src="/hero-image.jpg"
alt="히어로 이미지"
sizes="(max-width: 768px) 100vw, 50vw"
fill
priority
/>
// 고정 크기 이미지
<Image
src="/thumbnail.jpg"
alt="썸네일"
width={200}
height={200}
/>
이를 통해 모바일에서는 작은 이미지를, 데스크톱에서는 큰 이미지를 제공하여 불필요한 데이터 전송을 방지합니다.
3. 지연 로딩과 플레이스홀더
기본적으로 뷰포트에 들어올 때만 이미지를 로드하며, 로딩 중 플레이스홀더를 제공합니다.
// 블러 플레이스홀더와 함께 지연 로딩
<Image
src="/gallery-image.jpg"
alt="갤러리 이미지"
width={400}
height={300}
placeholder="blur"
blurDataURL="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ..."
/>
// 즉시 로딩이 필요한 중요 이미지
<Image
src="/logo.png"
alt="로고"
width={100}
height={50}
priority // 지연 로딩 비활성화
/>
4. 외부 도메인 이미지 처리
외부 도메인의 이미지를 사용할 때는 보안을 위해 허용 목록을 설정해야 합니다.
// next.config.js
module.exports = {
images: {
domains: ['example.com', 'cdn.example.com'],
// 또는 패턴 사용
remotePatterns: [
{
protocol: 'https',
hostname: '**.example.com',
pathname: '/images/**',
},
],
},
}
정리
| 기능 | 기본 img 태그 | Next.js Image |
|---|---|---|
| 포맷 최적화 | 수동 구현 필요 | 자동 (WebP, AVIF 등) |
| 반응형 크기 | srcset 직접 작성 | sizes 속성으로 간단 구현 |
| 지연 로딩 | loading="lazy" 속성 | 기본 제공 |
| 플레이스홀더 | CSS로 구현 | blur, empty 옵션 제공 |
| 성능 최적화 | 개발자 직접 구현 | 자동 최적화 |
Next.js Image 컴포넌트는 이미지 최적화를 위한 복잡한 작업들을 자동화하여, 개발자가 성능과 사용자 경험을 쉽게 개선할 수 있게 해줍니다. 특히 대용량 이미지가 많은 웹사이트에서는 로딩 속도와 사용자 경험 측면에서 상당한 개선 효과를 얻을 수 있습니다.