๐ซ ๊น๋นก์ด๋ ์ด๋ฏธ์ง๊ฐ ๊ฑฐ์ฌ๋ฆฌ๊ธฐ ์์ํ์ ๋
๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ค๊ณ ๋์, ํฌํธํด๋ฆฌ์ค ํ์ด์ง์ ํฌ์คํธ ๋ชฉ๋ก ํ์ด์ง์ ๊ฐ๊ฐ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ์๋ค. ๊ทธ๋ฐ๋ฐ ํ์ด์ง์ ์ ๊ทผํ ๋, ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ์๊ฐ ๋๋ฌธ์ ๋น ํ๋ฉด์ด ๋ณด์๋ค๊ฐ ์ด๋ฏธ์ง๊ฐ ๋ฑ์ฅํ๋ ๊ฒ์ด ์ ๊ฒฝ ์ฐ์ฌ์ ๊ฐ์ ํ๊ธฐ๋ก ๋ง์ ๋จน์๋ค.
๐ Next.js์ Image ์ปดํฌ๋ํธ
๋ธ๋ก๊ทธ์ ์ฐ์ธ ์ด๋ฏธ์ง๋ ๊ธฐ์กด html ํ๊ทธ์ธ <img>
๊ฐ ์๋ Next.js์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ์ธ <Image>
๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋๋ฌธ์ด์๋ค.
- ์ฑ๋ฅ ํฅ์ : ๋ชจ๋ ์ด๋ฏธ์ง ํฌ๋งท์ ์ฌ์ฉํด ๊ฐ ๋๋ฐ์ด์ค์ ๋ง๋ ์ฌ์ด์ฆ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ํ๋ฉด ์์ ์ฑ : ๋ ์ด์์ ์ฌํํธ๋ฅผ ์๋ ๋ฐฉ์งํ๋ค.
- ๋น ๋ฅธ ํ์ด์ง ๋ก๋ : ์ ์ ๊ฐ ๋ทฐํฌํธ์ ์ง์ ํ ๋๋ง ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ค.
- ์์ ์ ์ฐ์ฑ: ๋ฆฌ๋ชจํธ ์๋ฒ์ ์๋ ์ด๋ฏธ์ง๋ ์จ๋๋งจ๋๋ก ๋ฆฌ์ฌ์ด์งํ๋ค. (์ถ์ฒ : Next.js ๊ณต์ ๋ฌธ์)
Image ์ปดํฌ๋ํธ๋ฅผ ํตํด ์ธ๋ถ ์ด๋ฏธ์ง ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ์๋์ ๊ฐ์ Props๊ฐ ํ์์ ์ด๋ค.
<Image
src="/me.png"
alt="Picture of the author"
width={500} // ๋ ์ด์์ ์ฌํํธ ๋ฐฉ์ง๋ฅผ ์ํด ๋๋น์ ๋์ด๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค
height={500} // ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ํฌ๊ธฐ์ ๋ง์ถ๊ณ ์ถ์ ๋๋, fill์ ์ฌ์ฉํ ์๋ ์๋ค
/>
๊ธฐ์กด์๋ ํ์์ ์ธ Props์ธ width์ height๋ง ์ค์ ํด์ฃผ์๋ค๊ฐ, ์ด๋ฏธ์ง ๋ก๋ ์ placeholder ์ธํ
์ ์ํด placeholder
์ blurDataURL
Props๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
โ๏ธ placeholder & blurDataURL
Image ์ปดํฌ๋ํธ์ placeholder๋ ์ด๋ฏธ์ง๊ฐ ๋ก๋ ๋ ๋์ ํ๋ฉด์ ๋ํ๋ผ ์์๋ฅผ ์ค์ ํ๋ Props๋ค. ๊ธฐ๋ณธ ์ธํ
์ empty
๊ณ , ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ๋์ ๋ธ๋ฌ ์ฒ๋ฆฌ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์๋ blur
๋ก ์ค์ ํ ์ ์๋ค.
<Image
src="/me.png"
alt="Picture of the author"
width={500} // ๋ ์ด์์ ์ฌํํธ ๋ฐฉ์ง๋ฅผ ์ํด ๋๋น์ ๋์ด๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค
height={500} // ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ํฌ๊ธฐ์ ๋ง์ถ๊ณ ์ถ์ ๋๋, fill์ ์ฌ์ฉํ ์๋ ์๋ค
placeholder="blur"
blurDataURL={blurDataURL} //base64๋ก ์ธ์ฝ๋ฉ ๋ ์ด๋ฏธ์ง ์์ค
/>
blur
๋ก ์ค์ ํ์ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ์ ์ผ๋ก blurDataURL์ด๋ผ๋ Props๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ ํ๊ณ , ๋ฐ๋ก ์ฌ๊ธฐ์ base64 ํ์์ ์ด๋ฏธ์ง ์์ค๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น ์ด๋ฏธ์ง๊ฐ ๋ก๋ ๋ ๋์ ๋ธ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค.
๐ base64 ํ์์ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
Next.js ๊ณต์ ๋ฌธ์์์๋ ์ blurDataURL์ ๋ค์ด๊ฐ ์ด๋ฏธ์ง ์์ค ์์ฑ์ ์ํด plaiceholder
๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ถ์ฒํ๊ณ ์๋ค. ์ฌ์ฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค.
import { getPlaiceholder } from "plaiceholder";
const { base64 } = await getPlaiceholder("/path-to-your-image.jpg");
plaiceholder ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ถํฐ getPlaiceholder
๋ผ๋ ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ base64๋ก ์ธ์ฝ๋ฉ๋ ๊ฐ์ ์ป์ด์ค๋ฉด ๋๋ค.
์ด ๋ธ๋ก๊ทธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์๋ฒ ์ฌ์ด๋์์ ์ฒ๋ฆฌ๋๊ณ ์๊ธฐ ๋๋ฌธ์, getStaticProps
์์ ํด๋น ์ฝ๋๋ฅผ ๋ฃ์ด ํ์ด์ง์ Props๋ก ๋๊ฒจ์ฃผ์๋ค. ์ด์ ๋ชจ๋ ์ด๋ฏธ์ง๋ค์ด ๋ก๋ ๋๋ ๋์ ์์ฐ์ค๋ฝ๊ฒ ๋ธ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๊ฒ ๋๋ค :)