본문 바로가기
Web/React

[React] Next JS 이미지 최적화, 이미지 컴퍼넌트 / Image Component / Image Optimization

by 서상혁 2021. 3. 8.

 

목차

 


Image Component & Image Optimization

 

💡
version 10.0.0 부터 이미지 최적화 기능을 사용할 수 있습니다.

 

  • <img> 대신 next/image<Image> 모듈을 이용하자!
  • 리사이징, 최적화, 브라우저 호환 등을 지원한다.
  • 최적화는 빌드 타임에 진행되지 않고, on-demand 하게 이루어진다.
    • 즉, 이미지 개수에 따라 빌드 타임이 길어지지 않는다는 뜻이다.

 

 

 

Quick look differences

 

예시

import Image from 'next/image'

function Home() {
  return (
    <>
      <h1>My Homepage</h1>
      <Image
        src="/me.png"
        alt="Picture of the author"
        width={500}
        height={500}
      />
      <p>Welcome to my homepage!</p>
    </>
  )
}

export default Home

 

 

Configuration

  • image optimization 관련 configuration

 

외부에서 가져오는 이미지인 경우

 

  • 외부 웹사이트 이미지인경우, 이미지 src 의 도메인을 옵션에 명시해주면 된다.

예시

module.exports = {
  images: {
    domains: ['example.com'],
  },
}

 

 

Loader 설정

 

  • Next JS 자체 이미지 최적화가 아닌 다른 클라우드 이미지 로더를 쓰고 싶은 경우

 

에시

module.exports = {
  images: {
    loader: 'imgix',
    path: 'https://example.com/myaccount/',
  },
}
  • Imgixloader: 'imgix'

 

 

Caching 설정

 

  • default loader 에 대한 캐쉬 설정 방법
    • 다른 cloud 이미지 로더에 대해서는 해당 로더에서 지원하는 방식을 써야한다.
  • 이미지가 한번 제공되면, 그 이후에는 최적화된 이미지가 <distDir>/cache/images 디렉토리에 캐싱된다.
  • expiration 은 upstream server의 Cache-Control 헤더에 따른다.
    • expired 시간이 지나면 삭제된다.
    • Cache-controls-maxage 탐색, 없다면

      max-age 탐색, 없다면

      ⇒ 60 seconds default.

 

 

Device Sizes

 

  • deviceSizes 를 이용해서 디바이스 사이즈 breakpoint 설정이 가능하다.
  • Image 컴퍼넌트가 layout="responsive" 일 떄, layout="fill" 일 때 적용된다.

 

예시 (default)

module.exports = {
  images: {
    deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
  },
}

 

Image Sizes

 

  • imageSizes 를 이용.
  • Image 컴퍼넌트가 layout="fixed" 일 떄, layout="intrinsic" 일 때 적용된다.

 

예시 (default)

module.exports = {
  images: {
    imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
  },
}

 

728x90

댓글