Next.js : Image

March 03, 2022

Next.js에서 제공하는 Image 컴포넌트에 대해서 알아보자.

아래처럼 일반적인 HTML img element를 쓴다면, 직접 다뤄야할 것들이 많다.

  • 반응형 구현하기
  • third-party 툴이나 라이브러리를 사용하여 최적화하기
  • viewport에 나타났을 때만 불러오기
<img src="/images/profile.jpg" alt="Your Name" />

Next.js는 이런 수고로움을 해결해줄 수 있는 Image 컴포넌트를 제공한다.

이미지 최적화

next/image는 default로 이미지 최적화 기능을 지원한다.

resizing, 최적화, WebP 지원(가능한 브라우저에서) 등이 있다. 이 기능은 작은 viewport에서 큰 이미지를 가져오는 것을 지양한다. Next.js가 자동으로 최신(=점점 더 많이 쓰게 될) 이미지 포맷들을 채택하고 해당 포맷을 지원하는 브라우저들에게 serve하도록 한다.

최적화는 어떤 이미지에도 작용한다. 이미지가 외부 자원에서 host된 것이더라도 최적화한다.

Image 컴포넌트

  • Build time에 이미지를 최적화하는 대신에, user 요청에 의해서 최적화한다. 일반적인 정적 사이트 생성 툴이나 static-only 솔루션과는 다르게, 이미지 개수를 늘려도 build time에 영향을 주지 않는다.
  • 이미지는 default로 lazy load 된다. Page 속도가 viewport 바깥의 이미지 때문에 느려지지 않는다는 것이다. Viewport에 보일 때만 이미지를 로드한다.
  • 이미지는 항상 Cumulative Layout Shift(화면요소 별 노출 시점이 달라서 layout이 흔들리는 것. Google의 Core Web Vital 평가 기준에 들어감)을 피하도록 렌더링된다.

아래처럼 사용하면 된다.

import Image from 'next/image'

const YourComponent = () => (
  <Image
    src="/images/profile.jpg" // Route of the image file
    height={144} // Desired size with correct aspect ratio
    width={144} // Desired size with correct aspect ratio
    alt="Your Name"
  />
)

next/Image는 추가적인 attribute 들도 많이 제공한다. ( ex. 로딩 시 blur 처리를 할 수 있음: placeholder )


Written by Rita Ahn - frontend / UX

© 2023, Built with Gatsby and Leonids theme.