๋ด๋ณด๋ด๋ฒ(๋ด๊ฐ ๋ณด๋ ค๊ณ ๋ด๊ฐ ๋ฒ์ญํ...) Next.js docs
2021๋ 3์ 31์ผ ๊ธฐ์ค Next.js ๊ณต์ ๋ฌธ์๋ฅผ ๋ฒ์ญํ๋ค.
โป ์์ด ์ ๊ณต์๋ ํด์ธ ์ ํํ๋ ์๋๊ธฐ์ ๋ฒ์ญ์๋ ์์ญ, ์ค์ญ, ๊ตฌ๊ธ ๋ฒ์ญ์ด ๋ฌด์ํ ๋ง์ ์ ์์ผ๋ฉฐ, ํผ์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ์กฐํด๊ฐ๋ฉฐ ๋ฒ์ญํ๋ค ๋ณด๋ ์คํ๋ ๋ง์ ์ ์๋ค. ์ ํํ ๋ด์ฉ์ ๊ณต์๋ฌธ์๋ฅผ ์ง์ ์ดํด๋ณด๊ฑฐ๋ ๋ค๋ฅธ ์ ๋ณด๋ค์ ๋ ์ฐพ์๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.
(ํ์ง๋ง ๋๊ธ ํผ๋๋ฐฑ๋ ํ์ํฉ๋๋ค๐ )
Next.js ๊ณต์๋ฌธ์ ํ์ธํ๊ธฐ>>
Since version 10.0.0, Next.js has a built-in Image Component and Automatic Image Optimization.
10.0.0 ๋ฒ์ ๋ถํฐ Next.js๋ ๋ด์ฅ๋ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ์ ์๋ ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ์ ๊ณตํ๋ค.
The Next.js Image Component, next/image, is an extension of the HTML <img> element, evolved for the modern web.
Next.js ์ด๋ฏธ์ง ์ปดํฌ๋ํธ์ธ next/image๋ HTML <img> ์์๋ฅผ ํ์ฅ์ํจ ๊ฒ์ผ๋ก ๋ชจ๋ ์น์ ์ํด ๋ฐ์ ์์ผฐ๋ค.
The Automatic Image Optimization allows for resizing, optimizing, and serving images in modern formats like WebP when the browser supports it. This avoids shipping large images to devices with a smaller viewport. It also allows Next.js to automatically adopt future image formats and serve them to browsers that support those formats.
Automatic Image Optimization์ ๋ฆฌ์ฌ์ด์ง, ์ต์ ํ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ๊ฒฝ์ฐ WebP์ ๊ฐ์ ๋ชจ๋ํ ํํ์ ์ด๋ฏธ์ง ์ ๊ณต์ ํ์ฉํ๋ค. Automatic Image Optimization์ ์์ ๋ทฐํฌํธ๋ฅผ ๊ฐ๊ณ ์๋ ๊ธฐ๊ธฐ์ ํฐ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. ๋ํ Next.js๊ฐ ํฅํ์ ์ด๋ฏธ์ง ํฌ๋งท์ ์๋์ผ๋ก ์ฑํํ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๋ฌํ ํฌ๋งท๋ค์ ์ง์ํ๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์ ์ ๊ณตํ๋๋ก ํด์ค๋ค.
Automatic Image Optimization works with any image source. Even if the image is hosted by an external data source, like a CMS, it can still be optimized.
Automatic Image Optimization์ ์ด๋ ํ ์ด๋ฏธ์ง ์์ค์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ด๋ฏธ์ง๊ฐ CMS์ ๊ฐ์ ์ธ๋ถ ๋ฐ์ดํฐ ์์ค๋ถํฐ ํธ์คํ ๋๋ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ์ต์ ํ๋ ์ ์๋ค.
Instead of optimizing images at build time, Next.js optimizes images on-demand, as users request them. Unlike static site generators and static-only solutions, your build times aren't increased, whether shipping 10 images or 10 million images.
๋น๋ ์๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๋ ๋์ , Next.js๋ ์ฌ์ฉ์๋ค์ด ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์ ์ฃผ๋ฌธํ ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ์งํํ๋ค. ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์ ์ ์ ์ ์ฉ ์๋ฃจ์ (?)๊ณผ ๋ค๋ฅด๊ฒ, ์ด๋ฏธ์ง๋ฅผ 10์ฅ ์ ์กํ๋ 1000๋ง ์ฅ ์ ์กํ๋ ๋น๋ ์๊ฐ์ ์ฆ๊ฐํ์ง ์๋๋ค.
Images are lazy loaded by default. That means your page speed isn't penalized for images outside the viewport. Images load as they are scrolled into viewport.
์ด๋ฏธ์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ฐ๋ก๋๋๋ค. ์ด๊ฒ์ ์ฆ ๋ทฐํฌํธ ์ธ๋ถ์ ์ด๋ฏธ์ง์ ๋ํด ํ์ด์ง ์๋๊ฐ ๋ถ์ด์ต๋ฐ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฏธ์ง๋ค์ ๋ทฐํฌํธ ์์ผ๋ก ์คํฌ๋กค๋์ด ๋ค์ด์ค๋ฉด์ ๋ก๋๋๋ค. (๋ทฐํฌํธ ๋ฐ์ ์๋ ์ด๋ฏธ์ง๋ค์ ๋ก๋๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง ๋๋ฌธ์ ํ์ด์ง ๋ก๋ ์๋๊ฐ ์ํฅ๋ฐ์ง ์๋๋ค๋ ์๋ฏธ์ธ ๋ฏ ํจ.)
Images are always rendered in such a way as to avoid Cumulative Layout Shift, a Core Web Vital that Google is going to use in search ranking.
์ด๋ฏธ์ง๋ ํญ์ Google์ด ๊ฒ์ ์์์ ์ฌ์ฉํ๋ Core Web Vital์ธ Cumulative Layout Shift๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ์์ผ๋ก ๋ ๋๋ง ๋ฉ๋๋ค.(?)
Image Component
To add an image to your application, import the next/image component:
์ดํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ผ๋ ค๋ฉด next/image ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค.
View all properties available to the next/image component.
next/image ์ปดํฌ๋ํธ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์์ฑ์ ์ฌ๊ธฐ์ ํ์ธํ๋ผ.
Configuration
In addition to using properties available to the next/image component, you can optionally configure Image Optimization for more advanced use cases via next.config.js.
next/image ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๊ฐ๋ฅํ ์์ฑ๋ค์ ๋ํด์, next.config.js๋ฅผ ํตํด์ ๊ณ ๊ธ ์ฌ์ฉ ์ผ์ด์ค(?)๋ค์ ์ํด ์ ํ์ ์ผ๋ก Image Optimization์ ๊ตฌ์ฑํ ์ ์๋ค.
Domains
To enable Image Optimization for images hosted on an external website, use an absolute url for the Image src and specify which domains are allowed to be optimized. This is needed to ensure that external urls can't be abused. When loader is set to an external image service, this option is ignored.
์ธ๋ถ ์ฌ์ดํธ์์ ํธ์คํ ๋๋ ์ด๋ฏธ์ง๋ค์ Image Optimazation์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด๋ฏธ์ง ์์ค์ ์ ๋ url๋ฅผ ์ฌ์ฉํ๊ณ ์ต์ ํํ ์ ์๋ ๋๋ฉ์ธ์ ์ง์ ํด์ผ ํ๋ค. ์ด๋ ์ธ๋ถ url์ด ๋จ์ฉ๋์ง ์๊ฒ ํ๊ธฐ ์ํด ํ์ํ๋ค. ๋ก๋๊ฐ ์ธ๋ถ ์ด๋ฏธ์ง ์๋น์ค๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์ด ์ต์ ์ ๋ฌด์๋๋ค. (?)
Loader
If you want to use a cloud provider to optimize images instead of using the Next.js' built-in Image Optimization, you can configure the loader and path prefix. This allows you to use relative urls for the Image src and automatically generate the correct absolute url for your provider.
์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๊ธฐ ์ํด Next.js๊ฐ ์ ๊ณตํ๋ Image Optimization์ ์ฌ์ฉํ๋ ๋์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด, ๋ก๋์ ๊ฒฝ๋ก ์ ๋์ฌ๋ฅผ ์ค์ ํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ ๊ฒ์ ์ด๋ฏธ์ง๋ฅผ ์ํ ์๋ url์ ์ฌ์ฉํ๊ณ ์๋์ผ๋ก ๊ณต๊ธ์๋ฅผ ์ํด ์๋์ผ๋ก ์ ๋ url์ ์์ฑํ๊ฒ ํด ์ค๋ค.
The following Image Optimization cloud providers are included:
- Vercel: Works automatically when you deploy on Vercel, no configuration necessary. Learn more
- Imgix: loader: 'imgix'
- Cloudinary: loader: 'cloudinary'
- Akamai: loader: 'akamai'
- Default: Works automatically with next dev, next start, or a custom server
์๋์ Image Optimization ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ํฌํจ๋๋ค:
- Vercel: Vercel๋ก ๋ฐฐํฌํ๋ฉด ์๋์ผ๋ก ์๋ํ๋ฉฐ ๋ณ๋์ ์ค์ ์ด ํ์ํ์ง ์๋ค.
- Imgix: ๋ก๋: imgix
- Cloudinary: ๋ก๋: cloudinary
- Akamai: ๋ก๋: akamai
- ๊ธฐ๋ณธ: next dev, next start ํน์ ์ปค์คํ ์๋ฒ์์ ์๋์ผ๋ก ์๋
If you need a different provider, you can use the loader prop with next/image.
๋ค๋ฅธ ๊ณต๊ธ์๊ฐ ํ์ํ ๊ฒฝ์ฐ, loader prop์ next/image์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
The next/image component's default loader is not supported when using next export. However, other loader options will work.
next/image ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ ๋ก๋๋ next export ์ฌ์ฉ ์์ ์ง์ํ์ง ์๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ๋ก๋ ์ต์ ๋ค์ ๋์ํ ๊ฒ์ด๋ค.
Caching
The following describes the caching algorithm for the default loader. For all other loaders, please refer to your cloud provider's documentation.
๋ค์์ ๋ด์ฉ์ ๊ธฐ๋ณธ loader๋ฅผ ์ํ ์บ์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํ๋ค. ๊ทธ ๋ฐ์ ๋ก๋๋ค์ ๋ํด์๋ ๋ณธ์ธ์ด ์ฌ์ฉํ๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋ผ.
Images are optimized dynamically upon request and stored in the <distDir>/cache/images directory. The optimized image file will be served for subsequent requests until the expiration is reached. When a request is made that matches a cached but expired file, the cached file is deleted before generating a new optimized image and caching the new file.
์ด๋ฏธ์ง๋ ์์ฒญ์ ๋ฐ๋ผ์ ๋์ ์ผ๋ก ์ต์ ํ๋๊ณ <distDir>/cache/images ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๋ค. ์ต์ ํ๋ ์ด๋ฏธ์ง ํ์ผ์ ์ ํจ๊ธฐ๊ฐ ์ ๊น์ง๋ ์ถํ ์์ฒญ์ ๋ํด ์ ๊ณต๋ ๊ฒ์ด๋ค. ์บ์ ๋ ๋ฐ์ดํฐ์ ์ผ์นํ์ง๋ง ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ํ์ผ์ ๋ํด ์์ฒญ์ด ๋ค์ด์จ ๊ฒฝ์ฐ ์๋ก์ด ์ต์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์บ์๋ ํ์ผ์ ์ง์์ง๊ณ ์๋ก์ด ํ์ผ์ ์บ์ฑํ ๊ฒ์ด๋ค.
The expiration (or rather Max Age) is defined by the upstream server's Cache-Control header.
๋ง๋ฃ๊ธฐํ(Max Age)๋ ์ ์คํธ๋ฆผ ์๋ฒ์ ์บ์ ์ปจํธ๋กค ํค๋์ ์ํด์ ์ ํด์ง๋ค.(?)
If s-maxage is found in Cache-Control, it is used. If no s-maxage is found, then max-age is used. If no max-age is found, then 60 seconds is used.
s-maxage๋ฅผ Cache-Control์์ ์ฐพ์ ์ ์๋ค๋ฉด ์ด๊ฒ์ ์ฌ์ฉํ๋ค. ๋ง์ฝ s-maxage๊ฐ ์๋ค๋ฉด max-age๊ฐ ์ฌ์ฉ๋๋ค. max-age๊ฐ ์์ผ๋ฉด 60์ด๊ฐ ์ฌ์ฉ๋๋ค. (?)
You can configure deviceSizes and imageSizes to reduce the total number of possible generated images.
์์ฑ ๊ฐ๋ฅํ ์ ์ฒด ์ด๋ฏธ์ง ์ซ์๋ฅผ ์ค์ด๊ธฐ ์ํด์ deviceSizes์ imageSizes๋ฅผ ์ค์ ํ ์ ์๋ค.
Advanced
The following configuration is for advanced use cases and is usually not necessary. If you choose to configure the properties below, you will override any changes to the Next.js defaults in future updates.
๋ค์์ ์ค์ ์ ๊ณ ๊ธ ์ฌ์ฉ ๊ฒฝ์ฐ๋ฅผ ์ํจ์ด๋ฉฐ ๋๊ฐ ํ์ํ์ง ์๋ค. ์๋์ ์์ฑ๋ค์ ๋ํด ์ค์ ํ๊ธฐ๋ฅผ ์ ํํ ๊ฒฝ์ฐ, ํฅํ ์ ๋ฐ์ดํธ์์ Next.js์ ๊ธฐ๋ณธ๊ฐ์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ค๋ฒ๋ผ์ด๋ ๋ ๊ฒ์ด๋ค.
Device Sizes
In some cases, where you know the expected device widths from the users of your website, you can specify a list of device width breakpoints using the deviceSizes property. These widths are used when the next/image component uses layout="responsive" or layout="fill" so that the correct image is served for the device visiting your website.
์น์ฌ์ดํธ์ ์ฌ์ฉ์๋ค๋ก๋ถํฐ ์์๋๋ ๊ธฐ๊ธฐ ๋๋น๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ, deviceSizes ์์ฑ์ ์ฌ์ฉํ์ฌ ๊ธฐ๊ธฐ ๋๋น ์ค๋จ์ ๋ชฉ๋ก์ ์ง์ ํ ์ ์๋ค. ์ด๋ฌํ ๋๋น๋ค์ next/image ์ปดํฌ๋ํธ๊ฐ layout="responsive"๋ layout="fill"์ ์ฌ์ฉํ ๋ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ธฐ๊ธฐ์๊ฒ ์ฌ๋ฐ๋ฅธ ์ด๋ฏธ์ง๊ฐ ์ ๊ณตํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค.
If no configuration is provided, the default below is used.
์ค์ ํ์ง ์๋ ๊ฒฝ์ฐ ์๋์ ๊ธฐ๋ณธ๊ฐ์ด ์ฌ์ฉ๋๋ค.
Image Sizes
You can specify a list of image widths using the imageSizes property. These widths should be different (usually smaller) than the widths defined in deviceSizes because the arrays will be concatenated. These widths are used when the next/image component uses layout="fixed" or layout="intrinsic".
imageSizes ์์ฑ์ ์ฌ์ฉํด์ ์ด๋ฏธ์ง ๋๋น์ ๋ชฉ๋ก์ ์ง์ ํ ์ ์๋ค. ์ด ๋๋น๋ค์ deviceSizes์ ์ ์๋ ๋๋น์ ๋ฌ๋ผ์ผ (๋ณดํต ์์์ผ) ํ๋๋ฐ ๋ฐฐ์ด๋ค์ด ์ฐ๊ฒฐ๋๊ธฐ ๋๋ฌธ์ด๋ค. (?) ์ด๋ฌํ ๋๋น๋ค์ next/image ์ปดํฌ๋ํธ์์ layout="fixed"๋ layout="intrinsic"์ ์ฌ์ฉํ ๋ ์ฌ์ฉ๋๋ค.
If no configuration is provided, the default below is used.
์ค์ ํ์ง ์๋ ๊ฒฝ์ฐ ์๋์ ๊ธฐ๋ณธ๊ฐ์ด ์ฌ์ฉ๋๋ค.
'Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ด๋ณด๋ด๋ฒ] Next.js docs - Static File Serving (0) | 2021.04.02 |
---|---|
[๋ด๋ณด๋ด๋ฒ] Next.js docs - next/image (0) | 2021.04.01 |
[๋ด๋ณด๋ด๋ฒ] Next.js docs - Built-In CSS Support (0) | 2021.03.31 |
[๋ด๋ณด๋ด๋ฒ] Next.js docs - Routing (0) | 2021.03.30 |
[๋ด๋ณด๋ด๋ฒ] Next.js docs - Data Fetching (0) | 2021.03.30 |