[Next.js] Next/Image์ sizes ์์ฑ ํบ์๋ณด๊ธฐ
sizes
sizes
๋ ๋ฏธ๋์ด ์กฐ๊ฑด์ ํด๋นํ๋ ์ด๋ฏธ์ง์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ์์ฑ์ด๋ค.
๐ก ๊ณ ์ ํฌ๊ธฐ(๋ก๋๋ ์ด๋ฏธ์ง ํฌ๊ธฐ)๋ next.config.js ํ์ผ์ imageSizes
, deviceSizes
์์ฑ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ๋๋ค(srcset). ์ฌ์ฉ์ ๋๋ฐ์ด์ค ํฌ๊ธฐ์ ๋ฐ๋ผ ์๋ ์ค๋จ์ ์ค ํ๋๊ฐ ๊ณ ์ ํฌ๊ธฐ๊ฐ ๋๋ค.
deviceSizes
๊ธฐ๋ณธ๊ฐ :[640, 750, 828, 1080, 1200, 1920, 2048, 3840]
imageSizes
๊ธฐ๋ณธ๊ฐ :[16, 32, 48, 64, 96, 128, 256, 384]
Next/Image์์ layout='responsive'
ํน์ layout='fill'
์ผ ๋ sizes
์์ฑ์ ์ง์ ํ์ง ์์ผ๋ฉด ํญ์ 100vw ๋๋น์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ค. ๋ง์ฝ ~500px ์ ๋์ ๋ฐฐ๋์ ์ฌ์ฉํ๋ค๋ฉด ํ์ ์ด์์ผ๋ก ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ์
์ด ๋๋ค.
๐ก Next.js์์ sizes
์์ฑ์ layout='responsive'
, layout='fill'
์ผ๋๋ง ์ ์ฉ๋๋ค.
์ด๋ sizes
์์ฑ์ ์ง์ ํ๋ฉด ๋ถํ์ํ๊ฒ ํฐ ์ด๋ฏธ์ง ๋ก๋๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. sizes
์์ฑ์ ์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ด๋ก๋ํ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ ๋ ์ฐธ๊ณ ํ๋ ์์ฑ์ด๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋ ๋๋งํ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ทฐํฌํธ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋ค. sizes
์์ฑ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ทฐํฌํธ๋ณด๋ค ์๋ค๋ ๊ฒ์ ์๋ ค์ค ์ ์๋ค.
width
๋ ์ด๋ฏธ์ง ์ถ๋ ฅ ํฌ๊ธฐ๋ง ์ง์ ํ์ง๋ง sizes
๋ ์ถ๋ ฅ ํฌ๊ธฐ + ์ต์ ํฌ๊ธฐ๋ ํจ๊ป ์ง์ ํ๋ ๊ฐ๋
(sizes
๊ด๋ จ ๋ ์์ธํ ๋ด์ฉ์ ๋งํฌ ์ฐธ๊ณ ).
<div className="grid-element">
<Image
src="/example.png"
fill
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</div>
- ๋ทฐํฌํธ ํฌ๊ธฐ๊ฐ
768px
์ดํ๋ฉด100vw
ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ฌ์ฉ - ๋ทฐํฌํธ ํฌ๊ธฐ๊ฐ
769px ~ 1200px
์ฌ์ด๋ฉด50vw
ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ฌ์ฉ - ๋ทฐํฌํธ ํฌ๊ธฐ๊ฐ
1201px
์ด์์ด๋ฉด33vw
ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ฌ์ฉ
๋ฐฐ๋์ฒ๋ผ ๊ณ ์ ์ ์ธ ํฌ๊ธฐ๋ผ๋ฉด sizes="373px"
์ด๋ ๊ฒ ํน์ ์ฌ์ด์ฆ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์๋ค.
ํํธ Next.js์์ sizes
์์ฑ์ ์ด๋ค ๊ฐ์ ๋ช
์ํ๋์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.
sizes
์์ฑ์ ๋ช ์ํ์ง ์์ผ๋ฉด ๊ณ ์ ํฌ๊ธฐ ์ด๋ฏธ์ง์ ์ ํฉํ small source set์ ์์ฑํ๋ค.'responsive'
,'fill'
๋ ์ด์์์ผ ๋sizes
์์ฑ์ ๋ช ์ํ์ง ์์ผ๋ฉด ํญ์100vw
๊ฐ ๋๋ฏ๋ก ์ฃผ์sizes
์์ฑ์ ๋ช ์ํ๋ฉด ๋ฐ์ํ ์ด๋ฏธ์ง์ ์ ํฉํ large source set์ ์์ฑํ๋ค.50vw
๊ฐ์ ๋ทฐํฌํธ ๋๋น์ ๋น์จ์ ๋ช ์ํ๋ฉด ์ด๋ณด๋ค ์ด๋ฏธ์ง์ ์์ source set์ ์ ์ธ๋๋ค.
width / height
๐ก width
, height
์์ฑ์ ์ ์ ์ผ๋ก ๋ถ๋ฌ์จ ์ด๋ฏธ์ง ํน์ layout="fill"
์ ์ ์ธํ๊ณค ํ์ ํญ๋ชฉ์ด๋ค.
layout
์ด 'responsive'
, 'fill'
์ผ ๋ width
, height
์์ฑ์ ์
๋ ฅํ ๊ฐ๋ณด๋ค ๋ ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค. Next/Image์์ layout
์์ฑ์ ๋ฐ๋ผ width
, height
๊ฐ ๋ค๋ฅด๊ฒ ์๋ํ๊ธฐ ๋๋ฌธ์ด๋ค.
'instrinsic'
,'fixed'
: ๋ ๋๋ง ์ฌ์ด์ฆ'responsive'
,'fill'
: ์๋ณธ ์ด๋ฏธ์ง ์ฌ์ด์ฆ → ์ด๋ฏธ์ง ๋น์จ์ ์ถ์ ํ๋๋ฐ ์ฌ์ฉ
The width property can represent either the rendered width or original width in pixels, depending on the layout and sizes properties.
When using
layout="intrinsic"
orlayout="fixed"
thewidth
property represents the rendered width in pixels, so it will affect how large the image appears.When using
layout="responsive"
,layout="fill"
, thewidth
property represents the original width in pixels, so it will only affect the aspect ratio.The
width
property is required, except for statically imported images, or those withlayout="fill"
.
srcset
srcset
์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ทฐํฌํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ํํ ์ ์๋ ์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ๋ฅผ ๋ช ์ํ๋ ์์ฑ์ด๋ค.
(๋ธ๋ผ์ฐ์ ์๊ฒ ์ด๋ฏธ์ง ์ ํ๊ถ ์์)
๐ก srcset
์ ๋ค์ํ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ๋์ผ ๋น์จ์ ์ด๋ฏธ์ง๋ค์ ์ต์ 2๊ฐ ์ด์ ๋ช
์ํ๋ ์์ฑ์ผ๋ก ์ด๋ฏธ์ง ์ ํ๊ถ์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์์ํ๋ค. ๋๋ฌธ์ ์ด๋ค ํฌ๊ธฐ์ ์ด๋ฏธ์ง๊ฐ ์ ํ๋ ์ง ์ ํํ ์๊ธฐ ์ด๋ ต๋ค. w
(์ด๋ฏธ์ง ๋๋น) x
(์ด๋ฏธ์ง ๋น์จ) ๋์คํฌ๋ฆฝํฐ๋ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์๋ ค์ฃผ๋ ์ฉ๋๋ก, ์ด๋ฏธ์ง์ ์ ํํ ํฌ๊ธฐ๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ w
๋์คํฌ๋ฆฝํฐ๋ฅผ ์ฌ์ฉํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋์คํฌ๋ฆฝํฐ๋ฅผ ํตํด ๊ฐ ์ด๋ฏธ์ง์ ์ต์ ํ๋ ํฝ์
๋ฐ๋๋ฅผ ๊ณ์ฐํด์ ์ ์ ํ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋ค.
Next/Image๋ ๊ฐ ๋๋ฐ์ด์ค ํฌ๊ธฐ์ srcset
์ ๋ฏธ๋ฆฌ ์ง์ ํด ๋๊ณ ์ฌ์ฉ์ ๋๋ฐ์ด์ค์ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ํ ์ ์๋๋ก ์ง์ํ๋ค(srcset
์์ฑ์ ๊ดํ ๋ ์์ธํ ๋ด์ฉ์ ๋งํฌ ์ฐธ๊ณ ). ์ด๋ฏธ์ง์ ๋ํ ์ฒซ ์์ฒญ์ ๋ฐ์ผ๋ฉด Next.js ์๋ฒ์์ ์ฌ์ด์ฆ/ํฌ๋งท ๋ฑ์ ์ต์ ํํ ์ด๋ฏธ์ง ํ์ผ๋ค์ ์์ฑํด์ ์๋ ๊ฐ์ srcset
์ด ์ง์ ๋๋ค.
layout
์์ฑ์ด 'fixed'
, 'intrinsic'
์ผ ๋ 1x
, 2x
2๊ฐ์ srcset
๋ง ์์ฑํ๋ค. 'responsive'
, 'fill'
์ผ ๋ next.config.js ํ์ผ์ ์๋ deviceSizes
, imageSizes
์์ฑ์ ์ฐธ์กฐํด์ srcset
์ ์์ฑํ๋ค. ๋ ์์ฑ์ ๋ฐ๋ก ์ง์ ํ์ง ์์๋ค๋ฉด ์๋ ๊ธฐ๋ณธ๊ฐ์ด ์ ์ฉ๋๋ค. ์ปจํ
์ด๋์ ์ต๋ ๋๋น๊ฐ ์ ํด์ ธ ์๊ฑฐ๋ ์ฌ์ฉ์์ ๋๋ฐ์ด์ค ํฌ๊ธฐ๋ฅผ ์์ธกํ ์ ์์ด์ ์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ๋ฅผ ์ธ๋ถํํ ํ์ ์๋ค๋ฉด ์ง์ ์์ ํ ์๋ ์๋ค.
module.exports = {
images: {
// imageSizes, deviceSizes๋ฅผ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ์๋ ๊ธฐ๋ณธ๊ฐ์ด ์ ์ฉ๋๋ค
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
},
};
๐ก Advanced ์ฌ๋ก๋ฅผ ์ ์ธํ๊ณค deviceSizes
, imageSizes
์์ ํ ์ผ์ ๋ณ๋ก ์๋ค
- deviceSizes : ๋๋ฐ์ด์ค ์ค๋จ์ ๋ชฉ๋ก ์ง์
Next/Image ์ปดํฌ๋ํธ๊ฐsizes
์์ฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐsrcset
์์ฑ์ ์ํด ์ฌ์ฉ๋๋ค. - imageSizes : ์ด๋ฏธ์ง ๋๋น ๋ชฉ๋ก ์ง์
deviceSizes
์ ๋ง์ฐฌ๊ฐ์ง๋กsrcset
์์ฑ์ ์ํด ์ฌ์ฉ๋๋ค.imageSizes
๋deviceSizes
์ ์ฐ๊ฒฐ๋ผ์ ์ ์ฒด ์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.imageSizes
๋sizes
์์ฑ์ ์ ๊ณตํ์ ๋๋ง ์ฌ์ฉ๋๋๋ฐ ์ด ๊ฒฝ์ฐ ์ด๋ฏธ์ง๊ฐ ๋ทฐํฌํธ ๋๋น๋ณด๋ค ์๋ค๋ ๊ฒ์ ๋ํ๋ธ๋ค. ๋ฐ๋ผ์imageSizes
๋๋น๋deviceSizes
๋ฐฐ์ด์ ์๋ ๊ฐ์ฅ ์์ ๊ฐ๋ณด๋ค ์์์ผ ํ๋ค.
sizes/srcset์ ๋ช ์ํ์ ๋ ๋ธ๋ผ์ฐ์ ๋์
- ๊ธฐ๊ธฐ ๋๋น ํ์ธ
sizes
์์ฑ์์ ๊ฐ์ฅ ๋จผ์ ์ฐธ์ด ๋๋ ์กฐ๊ฑด๋ฌธ ํ์ธ- ํด๋น ์กฐ๊ฑด๋ฌธ์์ ์ ๊ณตํ๋ ์ฌ๋กฏ ํฌ๊ธฐ ํ์ธ
- ํด๋น ์ฌ๋กฏ ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง๋ฅผ
srcset
์์ ๊ฒ์ ํ ์ ์ฉ
๋ ํผ๋ฐ์ค
- next/image | Next.js
- Next/Image๋ฅผ ํ์ฉํ ์ด๋ฏธ์ง ์ต์ ํ
- HTML IMG์ srcset๊ณผ sizes ์์ฑ(updated)
- Next.js Image ์ปดํฌ๋ํธ ์๋ฒฝ ๊ฐ์ด๋
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DevTools] Tailwind CSS ์ ํธ๋ฆฌํฐ ํด๋์ค ์๋ ์ ๋ ฌ ํ๋ฌ๊ทธ์ธ (0) | 2024.05.13 |
---|---|
[JS] ์ ๋ก๋ ์งํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ onUploadProgress (0) | 2024.05.13 |
[JS] ์ธ๋ผ์ธ ์คํ์ผ ์ ์ - cssText (0) | 2024.05.13 |
[React] ์บ๋ก์ (Carousel) ์๋ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ (0) | 2024.05.13 |
[React] ๋ ธ๋์ ํธ๋ฆฌ ์์น๋ฅผ ๋ํ๋ด๋ useId ํ (0) | 2024.05.13 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[DevTools] Tailwind CSS ์ ํธ๋ฆฌํฐ ํด๋์ค ์๋ ์ ๋ ฌ ํ๋ฌ๊ทธ์ธ
[DevTools] Tailwind CSS ์ ํธ๋ฆฌํฐ ํด๋์ค ์๋ ์ ๋ ฌ ํ๋ฌ๊ทธ์ธ
2024.05.13 -
[JS] ์ ๋ก๋ ์งํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ onUploadProgress
[JS] ์ ๋ก๋ ์งํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ onUploadProgress
2024.05.13 -
[JS] ์ธ๋ผ์ธ ์คํ์ผ ์ ์ - cssText
[JS] ์ธ๋ผ์ธ ์คํ์ผ ์ ์ - cssText
2024.05.13 -
[React] ์บ๋ก์ (Carousel) ์๋ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ
[React] ์บ๋ก์ (Carousel) ์๋ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ
2024.05.13