lazy loading๋ฅผ ์์์ผ ํ๋ ์ด์
์ด๋ฏธ์ง, ๋์์์ด ์น ํ์ด์ง์ ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๋ง์ด ์ฐจ์งํ๊ณ ์๋ค๋ฉด
์ฌ์ฉ์์๊ฒ '์ค์ ์ ์ผ๋ก' ๋ ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ์ถ๋ค๋ฉด
์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
์ด๋ฏธ์ง๋ ๋์์ ๊ฐ์ ์ฝํ
์ธ ๋ค์ lazy loading์ผ๋ก ๋ ๋๋งํ ์ ์๋ค.
lazy loading
์์ด ๋จ์ด ์ค 'lazy'๋ '๊ฐ๋ฅํ ํ ๊ธธ๊ฒ ์ผ์ ๋ฏธ๋ฃจ๋ ํ์'๋ ์๋ฏธ์ ๊ธฐ๋ฐํฉ๋๋ค. ๊ทธ๋์ lazy loading์ ๊ฐ๋ฅํ ํ ๊ธธ๊ฒ ๋ฏธ๋ฃจ์ด ์นํ์ด์ง์์ ๋ณด์ฌ์ค ์ฝํ
์ธ ๋ค์ด ์ค์ ๋ก ํ๋ฉด์ ๋ณด์ผ ๋๊น์ง ๋ฏธ๋ฃฌ ํ ๋ก๋ฉํ๋ ๊ธฐ์ ์
๋๋ค. ๋ค์ ํ๋ฒ ๊ฐ์กฐํ๋ฉด ์ด ๋ฆฌ์์ค๋ค์ ํ์ํ ๋ ๋ก๋๋ผ์ผํฉ๋๋ค. ํ
์คํธ ์ธ์ ์ด๋ฏธ์ง์ ๋์์ ๊ฐ์ ์ฝํ
์ธ ๋ค์ ๋ชจ๋ ์น์ฌ์ดํธ์ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์
๋๋ค. ํ์ง๋ง ์ด๋ฌํ ์ฝํ
์ธ ๋ค์ ํ์ด์ง ์ฑ๋ฅ์ ๊ฐ์ฅ ๋ง์ด ์ํฅ์ ์ฃผ๊ณ ์๋ ์์์ด๊ธฐ๋ ํฉ๋๋ค.
๊ทธ๋์ ๋ง์ ์์ง๋์ด๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํด์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋
ธ๋ ฅํ๊ณ ๊ทธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ๋๊ฐ lazy loading ์
๋๋ค.
์๋ ์์์ lazy loading์ผ๋ก ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ์ฅ๋ฉด์
๋๋ค. ํ์์ placeholder ์์ญ์ ์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ ์๋๋ก ๋ด๋ฆด ๋ ํ๋ฉด์ ์ ์์ ์ผ๋ก load ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ์์ ์น ์ฑ๋ฅ๊ณผ ๋๋ฐ์ด์ค ๋ด ๋ฆฌ์์ค ํ์ฉ๋ ์ฆ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ฐ๊ด๋ ๋น์ฉ์ ์ค์ด๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ํ์ด์ง์์ ์คํฌ๋กค์ ์๋๋ก ๋ด๋ฆผ์ผ๋ก์จ, ์ด๋ฏธ์ง์ placeholder๋ ๋ทฐํฌํธ(์น ํ์ด์ง ๋ด ๋ณด์ด๋ ๋ถ๋ถ)์ ๋ค๊ฐ์ค๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ทฐํฌํธ์ ๋ณด์ด๊ฒ๋๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ก๋ฉ๋๋๋ก ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ผ์ผํจ ํ, ์ค์ ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํฉ๋๋ค.
lazy loading ์ฌ์ฉ ๋ฐฉ๋ฒ
image tag ์ด์ฉ ๋ฐฉ๋ฒ
Lazy loading ์ด๋ฏธ์ง๋ค์ ๋ ๋จ๊ณ๋ก ๋๋ ์ ์์ต๋๋ค.
๋จผ์ , ์ด๋ฏธ์ง ๋ก๋ฉ์ ์ฌ์ ์ ๋ง๋ ๊ฒ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ์ง๋ ํ๊ทธ ๋ด src ์์ฑ์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ฐฉ์์ ์น๋ช
์ ์ธ ๋จ์ ์ด ์์ต๋๋ค. HTML ๋ด ์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง๋ 1000๋ฒ์งธ ์ด๋ฏธ์ง์ด๋ , ํน์ ๋ทฐํฌํธ ๋ฐ์ ์๋ ์๊ด์์ด ๋ง์ฝ <img> ํ๊ทธ๊ฐ src ์์ฑ์ ๊ฐ์ง๋ฉด, ์ด๋ฏธ์ง๋ฅผ ๋ฌด์กฐ๊ฑด ๋ก๋ํฉ๋๋ค.
๊ทธ๋์ src ์์ฑ ๋์ ๋ค๋ฅธ ์์ฑ์๋ค๊ฐ ์ด๋ฏธ์ง URL์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก lazy loading์ ์ด์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด <img> ํ๊ทธ์ data-src๋ผ๋ ์์ฑ์ ์ด๋ฏธ์ง URL์ ์ง์ ํ๋ค๋ฉด, ์ด๊ธฐ์ html ํ๊ทธ๊ฐ ์นํ์ด์ง์ ๊ทธ๋ ค์ง ๋๋ ์ด๋ฏธ์ง๋ ๋ก๋๋์ง ์์ต๋๋ค.
<img data-src="<https://ik.imagekit.io/demo/default-image.jpg>" />
HTML
๋ณต์ฌ
ํ์ง๋ง ์ด๋ ๊ฒ๋ง ์์ฑํ๋ฉด ์ค์ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋์ง ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ธ์ ๋ก๋ฉํ ๊ฒ์ธ์ง ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค.
์ด๋ฅผ ์ํด์๋, ํด๋น ์ด๋ฏธ์ง(ํ์ฌ๋ placeholder ์ํ)๊ฐ ๋ทฐํฌํธ์ ๋ค์ด์๋์ง(์ฌ์ฉ์๊ฐ ๋ณด๋ ํ์ด์ง์ ๋ค์ด์๋์ง) ํ์ธํด์ผ ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ด๋ฒคํธ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
scroll, resize ๊ทธ๋ฆฌ๊ณ orientationChange์ ๊ฐ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. scroll ์ด๋ฒคํธ๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง์์ ์คํฌ๋กค ํ๋ ์์ ์ ํ์ธํ ์ ์์ต๋๋ค. resize ์ด๋ฒคํธ๋ ์๋์ฐ ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ๊ฐ ๋ฐ๋ ๋ ๋ฐ์ํฉ๋๋ค. orientationChange ์ด๋ฒคํธ๋ ๋๋ฐ์ด์ค ํ๋ฉด์ด ๊ฐ๋ก ๋๋ ์ธ๋ก๋ก ๋ฐ๋ ๋ ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ด์ฉํ์ฌ ์ด๋ค ์ด๋ฏธ์ง๊ฐ ๋ทฐํฌํธ ์์ผ๋ก ๋ค์ด์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ทฐํฌํธ ์์ผ๋ก ๋ค์ด๊ฐ๋ฉด <img> ํ๊ทธ์ data-src ์์ฑ์ ์ง์ ๋ URL์ src ์์ฑ์ ๋ฃ์ด์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํฉ๋๋ค. ์ดํ ๋์ค์ ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ๋ฅผ ์ผ์ผํค๊ธฐ ์ํด ๋ก๋ฉ์ ์ง์ฐ์ํฌ ์ด๋ฏธ์ง๋ก ์๋ณํ๋ lazy ํด๋์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ ๋ก๋ฉ๋ ์ดํ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
Intersection Observer API๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
Intersection Observer API๋ ์๋ฆฌ๋จผํธ ์์๊ฐ ๋ทฐํฌํธ์ ๋ค์ด๊ฐ๋ ๊ฒ์ ๊ฐ์งํ๊ณ ์ก์
์ ์ทจํ๋ ๊ฒ์ ๊ฐ๋จํ๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ API์
๋๋ค. Intersection Observer API๋ ์ด๋ฏธ์ง ๋ก๋๋ฅผ ์ง์ฐ์ํค๊ธฐ ์ํด ๋ชจ๋ ์ด๋ฏธ์ง์ Observer๋ฅผ ๋ถ์ฐฉ์ํต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฆฌ๋จผํธ๊ฐ ๋ทฐํฌํธ์ ๋ค์ด๊ฐ ๊ฒ์ ๊ฐ์งํ๊ฒ ๋๋ฉด, isIntersecting ์์ฑ์ ์ด์ฉํ์ฌ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , data ์์ฑ์ ์ง์ ๋ url์ src ์์ฑ์ผ๋ก ์ฎ๊ธฐ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
Native lazy loading
์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก Native lazy loading์ ์ด์ฉํ ์ ์์ต๋๋ค.
<img src="image.jpg" alt="..." loading="lazy">
<iframe src="video-player.html" title="..." loading="lazy"></iframe>
HTML
๋ณต์ฌ
lazy loading์ ๊ตฌํํ๊ธฐ ์ํด ๋จ์ง ์๋ฒ ๋ฉ ํ ์ด๋ฏธ์ง ๋๋ iframe์ 'loading' ์์ฑ๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
loading ์์ฑ์๋ ์๋์ ๊ฐ์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โข
lazy: ๋ทฐํฌํธ์์ ์ผ์ ํ ๊ฑฐ๋ฆฌ์ ๋ฟ์ ๋๊น์ง ๋ก๋ฉ์ ์ง์ฐ์ํต๋๋ค.
โข
eager: ํ์ฌ ํ์ด์ง ์์น๊ฐ ์, ์๋ ์ด๋์ ์์นํ๋ ์๊ด์์ด, ํ์ด์ง๊ฐ ๋ก๋ฉ๋์๋ง์ ํด๋น ์์๋ฅผ ๋ก๋ฉํฉ๋๋ค.
์ ๋ฆฌ
โข
lazy loading์ ์ด์ฉํ๋ฉด, ํ์ด์ง ์ด๊ธฐ ๋ก๋ฉ ์ ํ์๋ก ํ ์ด๋ฏธ์ง์ ์๋ฅผ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ์์ฐ์ค๋ฝ๊ฒ ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋๋ค.
โข
lazy loading์ ์ด๋ฏธ์ง๊ฐ ๋ณด์ฌ์ง์ง ์์ผ๋ฉด ์ ๋ ๋ก๋ฉํ์ง ์์ผ๋ฏ๋ก, ํ์ด์ง ๋ด์์ ์ ๋ฌํ ์ด ๋ฐ์ดํธ ์ฉ๋์ ์ค์ผ ์ ์๋ค.
์ฐธ๊ณ ๋งํฌ
โข