์„œ๋น„์Šค์˜ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ :: ์ด๋ฏธ์ง€ ์ตœ์ ํ™”

https://web.dev/fast/#optimize-your-images ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์š”์•ฝํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์ž…๋‹ˆ๋‹ค.*

๋„์ž…

์„œ๋น„์Šค์˜ ์†๋„๋Š” UX์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ , UX๋Š” ๊ณง ์‚ฌ์šฉ์ž์˜ ์œ ์ž…์„ ๊ฒฐ์ •ํ•œ๋‹ค. ์„œ๋น„์Šค ์†๋„ ๊ฐœ์„ ์—๋Š” ๋‹ค์–‘ํ•œ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด๋ฒˆ์—๋Š” ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ฅผ ์‚ดํŽด๋ณด์ž.

 

์ด๋ฏธ์ง€ ์ข…๋ฅ˜

์ด๋ฏธ์ง€๋Š” 2๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • vector ์ด๋ฏธ์ง€
  • raster ์ด๋ฏธ์ง€

vector ์ด๋ฏธ์ง€๋Š” ์„ , ์ , ๋ฉด ๋“ฑ์˜ ๋ฒกํ„ฐ์  ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ๊ฐ„๋‹จํ•œ ๊ธฐํ•˜ํ•™ ๋ชจ์–‘ (๋กœ๊ณ , ๊ธ€์ž, ์•„์ด์ฝ˜ ๋“ฑ)์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์— ์ ํ•ฉํ•˜๋‹ค. vector ์ด๋ฏธ์ง€๋Š” ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ฅธ ๊นจ์ง ์—†์ด ์ด๋ฏธ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํ‘œํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ชจ์–‘์ด ๋ณต์žกํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

raster ์ด๋ฏธ์ง€๋Š” ํ”ํžˆ ๋“ฃ๋Š” png, jpeg, webp ๋“ฑ์˜ ํฌ๋งท์„ ๊ฐ–๋Š” ํ‘œํ˜„ ๋ฐฉ์‹์ด๋‹ค. pixel ๋‹จ์œ„๋กœ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ encoding ํ•˜๋ฉฐ, ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ง€๋ฏ€๋กœ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‚ฌ์ด์ฆˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.

  • raster ์ด๋ฏธ์ง€์˜ ๊ตฌ๋ถ„์€ lossy filter ๊ณผ์ •๊ณผ lossless filter ๊ณผ์ •์—์„œ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ง€์— ๋”ฐ๋ผ ์ด๋ฃจ์–ด์ง„๋‹ค.
    • lossy filter : pixel data๋ฅผ ์—†์• ๋Š” ์ด๋ฏธ์ง€ ์••์ถ• ๋ฐฉ๋ฒ•
    • lossless filter : pixel data๋ฅผ ์†Œ๋ฉธ ์—†์ด ์••์ถ•ํ•˜๋Š” ์ด๋ฏธ์ง€ ์••์ถ• ๋ฐฉ๋ฒ•

 

๊ฟ€ํŒ

1. GIF๋Š” video element๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

<video autoplay loop muted playsinline></video>

video tag์˜ autoplay(์ž๋™ ์žฌ์ƒ), loop, muted ์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด GIF์™€ ๊ฐ™์ด ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. source๋Š” webm ⇒ mp4๋กœ ๊ธฐ์žฌํ•˜์—ฌ fallback ์‹œ mp4๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

> gif์˜ ํฌ๋งท ๋ณ€๊ฒฝ์€ https://www.ffmpeg.org/ ์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ๊ฐ„๋‹จํ•œ ๋ชจ์–‘์€ vector format์ธ svg๋ฅผ ํ™œ์šฉํ•˜์ž.

 

3. svg assets์€ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์••์ถ•ํ•˜์ž.

> SVGO ๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

4. webp๋Š” ๋‹ค๋ฅธ raster format๋ณด๋‹ค ๋‚ซ์ง€๋งŒ, ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

> raster ์ด๋ฏธ์ง€๋Š” cwebp๋‚˜ imagemin ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ convert ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ๋ฐ˜์‘ํ˜• ์ด๋ฏธ์ง€๋Š” ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋ฏธ๋ฆฌ ์ •๋ณด๋ฅผ ์ฃผ์ž.

<img src="flower-large.jpg" srcset="flower-small.jpg 480w, flower-large.jpg 1080w" sizes="50vw">โ€‹

srcset์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช… width๊ฐ€ comma๋กœ ์ด์–ด์ ธ ์žˆ๊ณ , ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์–ด๋–ค ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ค width๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ค€๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•ด์ค€๋‹ค.size์™€ srcset ์†์„ฑ์ด ์—†์œผ๋ฉด fallback์œผ๋กœ src ์†์„ฑ์„ ์ฐพ์•„ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.

size ์†์„ฑ์€ ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ ์–ผ๋งˆ๋‚˜ ๋„“๊ฒŒ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•  ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. css๋Š” ์—ฌ์ „ํžˆ ํ•„์š”ํ•˜๊ณ  size ์†์„ฑ์ด ๋„ˆ๋น„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค ์ด๋ฏธ์ง€๊ฐ€ load๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

 

6. cdn์€ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๊ณ  ์ „๋‹ฌํ•ด์ฃผ๋Š” api ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด ๊ณณ์—์„œ ์ „์†กํ•ด์ฃผ๋Š” ์„œ๋ฒ„์ด๋‹ค.

 

7. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ํ•ฉ์ณ์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ ๊ธฐ๋ฒ•๋„ ์žˆ๋‹ค.

 

์ธก์ •

์ด๋ฏธ์ง€ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ์ธก์ •์€ lighthouse๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

efficiently encode images ํ•ญ๋ชฉ์„ ๋ณด๊ฑฐ๋‚˜ lighthouse > options > performance์—์„œ resize ๋˜์–ด์•ผ ํ•  ์ด๋ฏธ์ง€๋“ค์˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 ๋ถ€์ •ํ™•ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! 

 ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š” :) 

๋ฐ˜์‘ํ˜•