Image 컴포넌트 기능 정리Next.js의 Image 컴포넌트를 사용하면 기본적으로 lazy loading이 자동 적용된다.
priority={true} 속성을 사용 → 초기 렌더에 꼭 필요한 이미지를 즉시 로딩loading="eager"로 설정<Image src="/logo.png" alt="logo" width={200} height={100} priority />
Next/Image를 사용하면, 자동으로 lazy loading이 적용됨. lazy loading을 적용시키고 싶지 않다면, 해당 기능을 끌 수도 있음. Image 컴포넌트의 priority 라는 props를 true로 설정하거나, loading props에 “eager” 값을 설정하면 됨. (밑줄이 더 권장)
Image 컴포넌트를 통해 자동으로 적절한 크기로 리사이징하고,💡 이는 브라우저와 디바이스 해상도에 맞는 이미지를 선택적으로 로딩하게 하여,
용량을 줄이고 성능을 높이는 핵심 기능이다.
Image 컴포넌트는 이를 방지하기 위해 placeholder 기능을 제공한다.
placeholder="blur"로 설정next/image가 자동으로 blur용 이미지 생성blurDataURL에 수동 설정해야 함<Image
src="https://example.com/image.jpg"
alt="example"
width={600}
height={400}
placeholder="blur"
blurDataURL="data:image/jpeg;base64,..."
/>
프로젝트의 모든 이미지는 원격 URL을 사용하는 반응형 이미지다.width, height 속성을 지정해야 한다.fill 속성과 objectFit을 함께 사용해 반응형으로 만들 수 있다. 단, 이 경우 부모 요소에 명확한 width/height 또는 비율이 설정되어 있어야 한다.fill 사용 시 주의사항fill은 부모 요소 기준으로 이미지를 꽉 채우는 레이아웃을 제공한다.width와 height가 명시되지 않기 때문에, Next.js가 적절한 최적화 사이즈를 예측하기 어려워진다.✅ 권장 방식:
가능하다면 fill 대신 width, height, sizes를 함께 명시해 Next.js의 자동 최적화를 활용하자.
<Image
src="/example.jpg"
width={600}
height={400}
sizes="(max-width: 768px) 100vw, 600px"
alt="예시 이미지"
/>
width, height를 설정한다.<div className="flex-none p-[0.4rem] md:p-0 w-14 md:w-15">
<Image src={`${process.env.NEXT_PUBLIC_IMAGE_URL}${id}m.gif`}
alt="univImage"
width={60}
height={60}
/>
</div>
next/image 적용 효과 (실제 사례)<img> 태그 사용 시: 평균 이미지 용량 약 8.5kbnext/image로 전환 후: 1.7kb ~ 2.0kb 수준으로 감소gif → webp 등 용량 최적화된 포맷으로 자동 변경됨image/svg+xml)는 예외next/image는 SVG에 대해 별도의 최적화를 적용하지 않기 때문에 오히려 layout 계산, wrapper 렌더링 등으로 성능이 저하될 수 있다.📌 예시:
<img src="/icons/logo.svg" alt="로고" /> → 평균 렌더링 시간 약 400ms<Image src="/icons/logo.svg" /> → 500ms 이상 소요✅ SVG는 <img> 태그 사용 권장
참고 문서
https://nextjs.org/docs/pages/api-reference/components/image
https://tech.kakaoent.com/front-end/2022/220714-next-image/