์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ์ ์๋ ํ๊ฒฝ์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
Next.js๋ ์ด ๋ ํ๊ฒฝ์ ๋ชจ๋ ํ์ฉํ๋ ํ๋ ์์ํฌ๋ก, ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
Next.js์์ ์ ๊ณตํ๋ Image ์ปดํฌ๋ํธ๋ ์ผ๋ฐ HTML์
<img>ํ๊ทธ๋ณด๋ค ๋ง์ ์ต์ ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ!
Image์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด height์ width๊ฐ์ ์ถ๊ฐํด์ค์ผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ๋ง์ฝ ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ height์ width๊ฐ์ ํ์๋ก ์ถ๊ฐํ๋๋ก ํ์์๊น?
Next.js๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์์์ผ ์ ์ ํ ํฌ๊ธฐ๋ก ์ต์ ํ ํ ์ ์๊ฒ ๋๋ค. ์ ํํ width์ height๋ฅผ ์ง์ ํ๋ฉด Next.js์ ์ด๋ฏธ์ง ์ต์ ํ ์์ง์ด ๋ถํ์ํ๊ฒ ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ํ์ง ์๊ณ ํ์ํ ํฌ๊ธฐ์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํ ํ ์ ์๋ค.
์ด๋ฏธ์ง๊ฐ ๋ก๋ ๋๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์๊ณ ์์ผ๋ฉด, ํ์ด์ง ๋ ์ด์์์ ํ์ํ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ๋ณดํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ก๋๋ ๋ ๋ค๋ฅธ ์ฝํ ์ธ ๊ฐ ๋ฐ๋ ค๋๋ ๋ ์ด์์ ์ฌํํธ๋ฅผ ๋ฐฉ์งํ์ฌ UX๋ฅผ ํฅ์์ํฌ ์ ์๋ค. ์ด๊ฒ์ Core Web Vitalsdml CLS(Cumulative Layout Shift) ์งํ๋ฅผ ๊ฐ์ ํ๋๋ฐ ์ค์ํ ์์์ด๋ค.
์ฒ์๋ถํฐ ๋ชจ๋ ์ด๋ฏธ์ง๋ค์ ๋ก๋ํ์ง ์๊ณ , viewport(ํ๋ฉด์ ๋ณด์ด๋ ์์ญ)์ ๊ฐ๊น์์ง๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ค. ์ด๋ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์๊ฐ๊ณผ ๋์ญํญ ์ฌ์ฉ๋์ ์ค์ฌ์ค๋ค.
Next.js Image์ปดํฌ๋ํธ๋ CDN ์บ์ฑ ์๋ฆฌ๋ฅผ ํ์ฉํ๋ค. ํนํ Vercel์ ๋ฐฐํฌํ ๊ฒฝ์ฐ, Vercel์ ๊ธ๋ก๋ฒ ์ฃ์ง ๋คํธ์ํฌ๊ฐ ์๋์ผ๋ก ์ต์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์บ์ฑํ๊ณ ๋ฐฐํฌํ๋ค. ์ฒซ ์์ฒญ ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์๋ณธ ์์ค์์ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ๊ณ ์ดํ ์์ฒญ ์์๋ ์บ์์์ ๋ฐ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
import Image from 'next/image';
function MyComponent() {
return (
<Image
src="/my-image.jpg"
width={500}
height={300}
alt="์ด๋ฏธ์ง ์ค๋ช
"
// priority ์์ฑ์ ์ถ๊ฐํ๋ฉด ์ฆ์ ๋ก๋(์ง์ฐ ๋ก๋ฉ ๋นํ์ฑํ)
// priority
/>
);
}
๊ทธ๋ผ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก Image ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น?
- Image ์ปดํฌ๋ํธ๋ ๋ง์ ์ด์ ์ด ์์ด ๊ฐ๋ฅํ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ผ๋, ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ๋ ์ค์ํ๋ค.
Tailwind CSS๋ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์ฌ์ฉํด HTML ๋ด์์ ์ง์ ์คํ์ผ์ ์ ์ฉํ ์ ์์ด ๊ฐ๋ฐ ์๋๋ฅผ ํฌ๊ฒ ํฅ์ ์ํจ๋ค. ๋ณ๋์ CSS ํ์ผ์ ์์ฑํ๊ณ ๊ด๋ฆฌํ ํ์๊ฐ ์์ด์ง๋ค.
ํ๋ก๋์ ๋น๋์์ ์ฌ์ฉํ์ง ์๋ ์คํ์ผ์ ์๋์ผ๋ก ์ ๊ฑฐํ์ฌ ์ต์ข CSS ํ์ผ ํฌ๊ธฐ๋ฅผ ์ต์ํ ํ๋ค.
tailwind.config.js ํ์ผ์ ํตํด ํ
๋ง, ์์, ๊ฐ๊ฒฉ๋ฑ์ ์ค์์์ ๊ด๋ฆฌํ ์ ์์ด ์ผ๊ด๋ UI๋ฅผ ์ ์งํ๊ธฐ ์ฝ๋ค.
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
primary: '#3490dc',
secondary: '#ffed4a',
accent: '#f56565',
}
}
}
}
Next.js๋ Tailwind CSS ์ค์ ์ ์ํ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ ์ ๊ณตํ๋ฉฐ, ์ ํ๋ก์ ํธ ์์ฑ ์ ๊ฐ๋จํ ์ต์ ์ ์ ํํ๋ฉด ์ค์ ์ด ์๋ฃ๋๋ค.
npx create-next-app --tailwind
๋ ๊ธฐ์ ๋ชจ๋ Vercel์ด๋ผ๋ ํ์ฌ๊ฐ ์ง์ํ๊ณ ์์ด ๊ธด๋ฐํ ํตํฉ๊ณผ ์ง์์ ์ธ ํธํ์ฑ์ด ๋ณด์ฅ๋๋ค. Vercel์ Next.js๋ฅผ ๋ง๋ ํ์ฌ์ด๋ฉฐ, Tailwind CSS์ ๊ฐ๋ฐ๋ ์ ๊ทน ์ง์ํ๊ณ ์๋ค.