Next.js의 next/image
는 웹 사이트의 이미지를 더 효율적으로 로드하고 렌더링하는 컴포넌트입니다. 이는 웹 성능 최적화에 매우 중요한 요소인데, 이미지는 대체로 웹 사이트의 대역폭을 가장 많이 사용하며 로딩 시간에 큰 영향을 미칩니다. next/image
는 다음의 기능을 제공하여 이러한 문제를 해결합니다:
장점:
자동 최적화: Next.js는 이미지를 자동으로 최적화하여 필요한 만큼만 로드하게 합니다. 즉, 클라이언트의 네트워크 속도와 장치 크기에 맞게 이미지를 자동으로 축소하거나 확대합니다.
지연 로딩 (Lazy loading): next/image
는 기본적으로 이미지의 지연 로딩을 지원합니다. 즉, 이미지가 화면에 표시되기 전까지 이미지 로딩을 지연시킵니다. 이로 인해 웹사이트의 초기 로딩 시간이 크게 단축될 수 있습니다.
현대 이미지 형식 지원: 현대의 이미지 형식 (예: WebP)를 지원하여 이미지를 더 작은 파일 크기로 제공하면서도 품질을 유지할 수 있습니다.
반응형 이미지: 이미지의 크기와 해상도를 자동으로 조절하여 다양한 장치에서 웹사이트를 더욱 잘 보여줄 수 있습니다.
단점:
설정 필요: Next.js가 이미지를 제공하는 URL을 신뢰할 수 있도록 next.config.js
파일에 domains
또는 loader
를 추가하여 설정해야 합니다. 이는 처음 사용하는 사용자에게는 약간의 진입 장벽이 될 수 있습니다.
서버 사이드 렌더링 제한: next/image
는 클라이언트 측에서만 작동합니다. 따라서 서버 사이드 렌더링(SSR)이나 정적 사이트 생성(SSG)에서는 작동하지 않습니다.
레이아웃 이슈: next/image
는 특정 레이아웃 요구 사항이 있습니다. 이미지의 크기를 명시적으로 지정해야 하며, 이는 일부 디자인에 제약을 줄 수 있습니다.
다음은 next/image
의 사용 예시입니다:
import Image from 'next/image'
function MyComponent() {
return (
<div>
<Image
src="/path/to/image.jpg" // 이미지 소스
alt="Description of the image" // 이미지 설명
width={500} // 이미지 너비
height={300} // 이미지 높이
/>
</div>
)
}
export default MyComponent
위 코드에서 next/image
는 src
, alt
, width
, height
와 같은 속성을 받습니다. 이 속성들은 각각 이미지의 소스, 설명, 너비, 높이를 나타냅니다. 이런 방식으로 next/image
를 사용하면 웹 사이트의 이미지 로딩 성능을 크게 향상시킬 수 있습니다.