Next.js์์ img์ Image ์ปดํฌ๋ํธ ๋น๊ต
Next.js๋ก ์น ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ์ฝ์ ํ ๋ ๋ ๊ฐ์ง ์ ํ์ง๊ฐ ์๋ค. ๋ฐ๋ก HTML ๊ธฐ๋ณธ ํ๊ทธ์ธ <img>์ Next.js๊ฐ ์ ๊ณตํ๋ <Image> ์ปดํฌ๋ํธ๋ค. ๋น์ทํด ๋ณด์ด์ง๋ง, ๋ ๋ฐฉ๋ฒ์ ๋ด๋ถ ๋์ ๋ฐฉ์, ์ฑ๋ฅ ์ต์ ํ, ์ฌ์ฉ ํธ์์ฑ ์ธก๋ฉด์์ ์๋นํ ๋ค๋ฅด๋ค.
Next.js๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์์ฒด๊ฐ ์ต์ ํ๋ React ๊ฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ์ง ๋ํ ์ ์ฉ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ทน ํ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
"๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ด ์น ์๋น์ค" ๋ฅผ ๋ชฉํ๋ก ํ๋ค๋ฉด, Next.js์ <Image>๋ฅผ ์ฌ์ฉํ์!
1. ๊ธฐ๋ณธ ์ ์
<img> | <Image> | |
์ ์ | HTML ํ์ค ์ด๋ฏธ์ง ํ๊ทธ | Next.js ์ ์ฉ ๊ณ ์ฑ๋ฅ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ |
์ ๊ณต ์ฃผ์ฒด | ๋ธ๋ผ์ฐ์ ํ์ค | Next.js (next/image ๋ชจ๋) |
2. ๋์ ๋ฐฉ์
<img> ํ๊ทธ
- ๊ทธ๋ฅ HTML <img> ๊ทธ ์์ฒด๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฆ์ ๋ค์ด๋ก๋ํ๊ณ ๋ ๋๋งํ๋ค.
- ์ด๋ฏธ์ง ํฌ๊ธฐ ์ต์ ํ, ํฌ๋งท ๋ณํ, ์ง์ฐ ๋ก๋ฉ ๊ฐ์ ๊ธฐ๋ฅ์ ์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
- CSS๋ก ํฌ๊ธฐ(width, height)๋ฅผ ์กฐ์ ํ ์ ์๋ค.
<Image> ์ปดํฌ๋ํธ
- Next.js๊ฐ ์ ๊ณตํ๋ ๊ณ ์ฑ๋ฅ ์ด๋ฏธ์ง ์ต์ ํ ์ปดํฌ๋ํธ๋ค.
- ๋ด๋ถ์ ์ผ๋ก ์๋ ์ต์ ํ๊ฐ ์ ์ฉ๋๋ค:
- ์ง์ฐ ๋ก๋ฉ(Lazy loading) ๊ธฐ๋ณธ ์ ์ฉ
- WebP ๋ณํ ์ง์ (๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ฉด WebP๋ก ์๋ ๋ณํ)
- ์ฌ์ด์ฆ ์ต์ ํ (ํ์ํ ํฌ๊ธฐ๋ง ๋ค์ด๋ก๋)
- CDN ํ์ฉ (Next.js๊ฐ ์ด๋ฏธ์ง ์์ฒญ์ ์ต์ ํํด์ ์ฒ๋ฆฌ)
- width์ height๋ฅผ ๋ช ์ํ๋ฉด, ๋ ์ด์์ ์ํํธ(CLS)๋ฅผ ๋ฐฉ์งํด ํผํฌ๋จผ์ค๊ฐ ํฅ์๋๋ค.
- ๐์ธ๋ถ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด next.config.js ์ค์ ์ด ํ์ํด์ ๋ฒ๊ฑฐ๋ก์.
3. ์ฝ๋ ์์
4. ์ธ์ ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?
์ํฉ | ์ถ์ฒ ๋ฐฉ์ |
๊ฐ๋จํ ํ ์คํธ์ฉ ์ด๋ฏธ์ง ์ฝ์ | <img> |
ํผํฌ๋จผ์ค ์ต์ ํ๊ฐ ์ค์ํ ์ค์๋น์ค | <Image> |
SEO(๊ฒ์์์ง ์ต์ ํ)๋ ์น ์ฑ๋ฅ ์ ์๊ฐ ์ค์ํ ๊ฒฝ์ฐ | <Image> |
์ธ๋ถ URL ์ด๋ฏธ์ง๋ฅผ ๋น ๋ฅด๊ฒ ๋ฃ๊ณ ์ถ์ ๋ | <Image> (๋จ, ๋๋ฉ์ธ ์ค์ ํ์) |
์์ฝ:
๐ ์์ ํ
์คํธ ํ๋ก์ ํธ๋ ์คํํฑ ์ด๋ฏธ์ง ๋ช ์ฅ๋ง ์์ ๋๋ <img>๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋ค.
๐ ํ์ง๋ง ์ค์ ์๋น์ค(ํนํ SEO๋ ์ฑ๋ฅ์ด ์ค์ํ ์๋น์ค)์์๋ <Image>๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
5. ์ฃผ์ํ ์
- <Image> ์ปดํฌ๋ํธ๋ src ๊ฒฝ๋ก๊ฐ ์ ์ (public ํด๋) ์ด๊ฑฐ๋, next.config.js์ ์ธ๋ถ ์ด๋ฏธ์ง ๋๋ฉ์ธ์ ๋ฑ๋กํด์ผ ํ๋ค.
- ์๋ ์ต์ ํ ๊ธฐ๋ฅ์ ์ฐ๊ธฐ ์ซ๊ฑฐ๋, ์ ๋ง ๋ณต์กํ ์ปค์คํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ <img>๋ฅผ ์จ์ผ ํ ๋๋ ์๋ค.
- Next.js 14๋ถํฐ <Image>๋ ์ ์ ๋ ๊ธฐ๋ฅ์ด ๊ฐํ๋๊ณ ์๋ค. ์๋ฅผ ๋ค์ด blurDataURL์ ํตํ ๋ก๋ฉ ์ค ๋ธ๋ฌ ์ฒ๋ฆฌ ๋ฑ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.