๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽฎ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐Ÿ‘ฉ‍๐Ÿ’ป ๊ฐœ๋ฐœ ๊ณต๋ถ€

[NextJS] ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• : img vs Image ํƒœ๊ทธ ๋น„๊ต

by xxilliant 2025. 4. 26.
728x90
๋ฐ˜์‘ํ˜•

 

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์„ ํ†ตํ•œ ๋กœ๋”ฉ ์ค‘ ๋ธ”๋Ÿฌ ์ฒ˜๋ฆฌ ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•