๐ด ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง์ ํ์์ฑ
๋ค๋์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฉด, ์ด๋ฏธ์ง๋ค์ ์๋ก ๋ค๋ฅธ ํฌ๊ธฐ์ ์ฉ๋์ผ๋ก ์ฌ์ดํธ์ ์ ๋ฐ์ ์ธ ์๋๋ฅผ ๋ฎ์ถ ์๊ฐ ์๋ค. ๋ํ ๋คํธ์ํฌ ์ ์ก๋์ด ์ฆ๊ฐํ๋ ๊ฒ์ด๊ธฐ์ ์ด์ ๋ฐ๋ฅธ ๋น์ฉ๋ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ค๋ฅผ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์๊ธด๋ค.
โช ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ
๐ท <picture> ํ๊ทธ
<picture> ํ๊ทธ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ๋ฌ ์ด๋ฏธ์ง ์ค์์ ์ ์ ํ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋๋ก ๋๋ ํ๊ทธ์ด๋ค. meida query ์ ๋น์ทํ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ํธํ๋ค.
// ์๋๊ฒฝ๋ก
<picture>
<source media="(min-width: 1200px)" srcset="large.jpg" />
<source media="(min-width: 768px)" srcset="medium.jpg" />
<source media="(min-width: 480px)" srcset="small.jpg" />
<img src="default.jpg" alt="Description of your image" />
</picture>
// ์ ๋๊ฒฝ๋ก
<picture>
<source media="(min-width: 700px)" srcset="/examples/images/people_960.jpg">
<source media="(min-width: 400px)" srcset="/examples/images/people_575.jpg">
<img src="/examples/images/people_200.jpg" alt="People">
</picture>
๐ท srcset ์์ฑ
์ด๋ฏธ์ง์ ์ฌ๋ฌ ๋ฒ์ ์ ์ ๊ณตํ์ฌ, ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด ํฌ๊ธฐ ๋ฐ ํด์๋์ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋๋ก ๋๋๋ค.
<img
src="default.jpg"
srcset="small.jpg 480w, medium.jpg 768w, large.jpg 1200w"
alt="Description of your image"
sizes="(max-width: 480px) 480px, (max-width: 768px) 768px, 1200px"
/>
๐ท ์จ๋๋งจ๋ ๋ฆฌ์ฌ์ด์ง
์ด๋ฏธ์ง๋ฅผ ์์ฒญํ ๋ ์๋ฒ์์ ๋์ ์ผ๋ก ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ๋ฐฉ๋ฒ์ CDN์ด๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ค. ์ง์ ๊ตฌํํ ์๋ ์์ง๋ง, ์ด๋ฏธ ๊ตฌํ๋์ด ์๋ ์๋น์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ํธํ๋ค. ( ex : Cloudinary, imgix ๋ฑ)
- ์๋ ์์
1. URI์ parameter๋ฅผ ๋ด์ ์ํ๋ ํด์๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๋ค.
2. ์ด๋ฏธ์ง ์บ์ ์๋ฒ์ ์บ์ฑ๋ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ ์กํ๋ค. (์๋ค๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ค)
3. ์บ์ฑ๋ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฏ๋ก ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง ์๋ฒ์ API ๋๋ SDK๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๋ค.
4. ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง ์๋ฒ๋ API ๋๋ SDK๋ฅผ ํตํด ์ด๋ฏธ์ง ์คํ ๋ฆฌ์ง ์๋ฒ์ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๋ค.
5. ์ด๋ฏธ์ง ์คํ ๋ฆฌ์ง ์๋ฒ๋ ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง ์๋ฒ์ ์ด๋ฏธ์ง๋ฅผ ์ ์กํ๋ค. ์ด๋ฏธ์ง๊ฐ ์๋ค๋ฉด ์๋ฌ ์ฝ๋ ๋ฐ์.
6. ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง ์๋ฒ๋ ์๋ฌ์ฝ๋๊ฐ ์๋ ์ ์์ ์ธ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ ์ URI๋ฅผ ํด์ํ์ฌ ์ํ๋ ์ด๋ฏธ์ง๋ก ๋ฆฌ์ฌ์ด์ง ํ ์ด๋ฏธ์ง ์บ์ ์๋ฒ๋ก ์ ์กํ๋ค. ๋ค๋ง ์ด๋ฏธ์ง ์คํ ๋ฆฌ์ง์ ์๋ฒ์์ ์๋ฌ์ฝ๋๋ฅผ ๋ฐ์ผ๋ฉด ์ด๋ฏธ์ง ์บ์ ์๋ฒ์ ์๋ฌ์ฝ๋๋ฅผ ์ ์กํ๋ค.
<img
src="https://res.cloudinary.com/your-cloud-name/image/upload/w_500,h_300,c_fill/sample.jpg"
alt="Description of your image"
/>
๐ต img, pickture ํ๊ทธ์ ์จ๋๋งจ๋ ๋ฆฌ์ฌ์ด์ง์ ์ฐจ์ด
๊ธฐ์กด์ ๋ฐฉ์๋ค์ ๋ค์ํ ํด์๋์ ์ด๋ฏธ์ง๋ก ๋ฏธ๋ฆฌ ์ ์ฅ์ ํ๋ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์์ ์ด์ ์ด ๋ง์ถ์ด์ ธ ์๋ค.
๋ฐ๋ผ์ ์ ๋ก๋ ์์ ์ด๋ฏธ์ง๋ฅผ ๋ฆฌ์ฌ์ด์ง ํ๊ฑฐ๋ ๋ ๋๋ง ํด์ผํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ฌ์์ด ์ข์์ผํ๊ณ , ์๋ก์ด ํด์๋์ ์ด๋ฏธ์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋์์ด ์ด๋ ค์ฐ๋ฉฐ, ์คํ ๋ฆฌ์ง ๋น์ฉ ์ฆ๊ฐ ๋ฑ์ ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์๋ค.
์จ๋๋งจ๋ ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง์ ์ด๋ฏธ์ง ๋ก๋ฉ ์ ํ์ํ ๋๋ง ํด์๋ ๋๋ ๋ ๋๋ง์ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ ์ด์ ์ด ๋ง์ถ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์คํ ๋ฆฌ์ง ๋น์ฉ ๊ฐ์, ํด์๋ ๋์ ์ํ ๋ฑ์ ์ฅ์ ์ ์์ง๋ง, ์ต์ด ์ด๋ฏธ์ง๋ฅผ ์์ฒญ ์ ์ด๋ฏธ์ง๋ฅผ ๋ฆฌ์ฌ์ด์ง ํด์ผ ํ๋ฏ๋ก ๋ก๋ฉ์ด ๋๋ฆฌ๊ณ , ์บ์ฑ ๋์ด ์์ง ์์ ํด์๋์ ์ด๋ฏธ์ง๋ฅผ ๋์ํ๊ธฐ์ํด ๋ง์ ์ฐ์ฐ์ด ํ์ํ๋ค๋ ๋จ์ ๋ํ ๋ฐ์ํฉ๋๋ค.
์ฌ๋ฌ๊ฐ์ง ์ํฉ์ ๊ณ ๋ คํ์ฌ ๋ง๋ ๋ฆฌ์ฌ์ด์ง ๋ฐฉ์์ ์ ํํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
โซ img ํ๊ทธ์ pickture ํ๊ทธ์ ์ฐจ์ด
๋ ํ๊ทธ์ srcset ์์ฑ์ ๋ชจ๋ ๋ฐ์ํ์ ์ํด ์ฌ์ฉํ๋ ์์ฑ์ผ๋ก, ์ฌ๋ฌ ํด์๋์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ต์์ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ ์ ์๊ฒ ์ ํ๊ถ์ ์ฃผ๋ ํ๊ทธ์ด๋ค. ๋จ ์กฐ๊ธ ์ฐ์์๊ฐ ๋ค๋ฅด๋ค.
img ํ๊ทธ : x(pixel density : ๋ช ๋ฐฐ์ ) ์ w(viewport) ๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
srcset์ ์ฌ์ฉํ์ง๋ง src ํ๊ทธ๋ฅผ ๊ฐ์ด ๊ธฐ์ฌํด์ฃผ๋ ๊ฒ์ ์ด์ ๋ธ๋ผ์ฐ์ ๋์์ ์ํด ํ์ํ๋ค.
picture ํ๊ทธ : ํ๊ทธ ์์ source ํ๊ทธ๋ค๋ก ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ ๋ชจ๋ source ์์์ ์ด๋ฏธ์ง ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฉด ๋ง์ง๋ง img ๋ฅผ ๋ ๋๋งํ๊ธฐ์ ๋ฐ๋์ img ํ๊ทธ ๋ํ ์ฌ์ฉํด์ผํ๋ค.
srcset์ผ๋ก ์ด๋ค ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , media๋ฅผ ํตํด viewport์ ๋๋น์ ๋ฐ๋ผ ๊ฐ๊ฐ์ srcset์ ๋ถ๋ฌ์จ๋ค. type ์์ฑ์ผ๋ก๋ webp ๋ avif ์ ๊ฐ์ ํฌ๋งท๊น์ง ์ง์ ํด์ค ์ ์๋ค.
<picture>
<source srcset="awesomeNewFormat.avif" type="image/avif">
<source srcset="NewFormat.webp" type="image/webp">
<img src="oldFormat.jpeg" alt="๊ตฌํ ์ด๋ฏธ์ง ํฌ๋งท์ ๋ง์ง๋ง์ ๊ผญ ๋ฐฐ์นํด์ผํฉ๋๋ค.">
</picture>
์์์ ์ ์ ์๋ฏ, img ํ๊ทธ์ srcset์ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ก ๋ฐ๊พธ์ง ๋ชปํ๋ค. ์ฆ ํด์๋์ ๋ฐ๋ผ ๊ฐ์ ์ด๋ฏธ์ง์ ํ์ง์ ์ปจํธ๋กค ํ๊ณ ์ถ์ผ๋ฉด img srcset ์, ํด์๋์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง or format ์๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๋๋ picture๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๐ Reference
https://jaycode.tistory.com/17 ==> img vs pickture