ํ๋ก์ ํธ์์ app ํด๋ ๋ด์ fonts ํด๋๋ฅผ public ํด๋๋ก ์ด๋ํ๋ ์์ ์ ์ํํ๋ค.
ํฐํธ ์ค์ ์ ๋ค๋ฅธ ํ์๋ถ์ด ๋งก์ผ์ จ๊ณ , next/font๋ฅผ ์ฌ์ฉํ ์ฝ๋๊ฐ ์๋์ ๊ฐ์๋ค.
import localFont from 'next/font/local';
import '@/globals.css';
const pretendard = localFont({
src: '../fonts/PretendardVariable.woff2',
display: 'swap',
weight: '45 920',
variable: '--font-pretendard',
});
...
const RootLayout = async ({
children,
}: Readonly<{
children: React.ReactNode;
}>) => {
return (
<html lang="ko">
<body className={`${pretendard.variable} antialiased`}>
...
{children}
</body>
</html>
);
};
export default RootLayout;
์ด ์์ ์ ์งํํ๋ฉด์ ๋ ๊ฐ์ง ์๋ฌธ์ ์ด ์๊ฒผ๋ค.
- ์ global.css ๋์ next/font๋ฅผ ์ฌ์ฉํ ๊น?
- ๊ฐ์๊ธฐ ๋ฐ์ํ ์๋ฌ์ ์์ธ์?
์ด ๋๊ฐ์ง๋ฅผ ์ ๋ฆฌ๋ณด๊ณ ์ ํ๋ค.
์ global.css ๋์ next/font๋ฅผ ์ฌ์ฉํ ๊น?
Next.js 13๋ฒ์ ๋ถํฐ ์ถ๊ฐ๋ next/font๋ font๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ์ต์ ํ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค.
์ฑ๋ฅ ์ต์ ํ
1. ์๋ ์๋ธ์ ํ
- ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฌธ์๋ง ํฌํจ๋ ์๋ธ์ ์ ์์ฑํด ํฐํธ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค.
- ๋ง์ฝ ์ฌ์ดํธ์์ ์์ด๋ง ์ฌ์ฉํ๋ค๋ฉด, ์์ด ๋ฌธ์๋ง ํฌํจ๋ ํฐํธ ํ์ผ์ ๋ง๋ค์ด ๋ถํ์ํ ๋ค๋ฅธ ์ธ์ด ๋ฌธ์๋ฅผ ๋บ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ์ด์ง ๋ก๋ฉ์ด ํจ์ฌ ๋นจ๋ผ์ง๋ค
2. ๋ ๋๋ง ์ต์ ํ
- ํฐํธ๊ฐ ๋ก๋๋ ๋ ํ๋ฉด์ด ๊น๋นก์ด๊ฑฐ๋ ํ ์คํธ๊ฐ ์ ๋ณด์ด๋ ํ์์ ๋ฐฉ์งํ๋ค.
- display: swap์ค์ ์ผ๋ก ํฐํธ๊ฐ ๋ก๋ฉ๋ ๋๊น์ง ๊ธฐ๋ณธ ํฐํธ๋ก ๋จผ์ ํ ์คํธ๋ฅผ ๋ณด์ฌ์ค์, ์ฌ์ฉ์๊ฐ ๋น ํ๋ฉด์ ๋ณด์ง ์๋๋ก ํ๋ค.
๊ฐํธํ ํฐํธ ๊ด๋ฆฌ
1. ๋ถํ์ํ ์ธ๋ถ ์์ฒญ ๋ฐฉ์ง
- Google Fonts ๊ฐ์ ์ธ๋ถ ์๋น์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๋์ , ํฐํธ๋ฅผ ํ๋ก์ ํธ ์์ ์ง์ ํฌํจ์์ผ์ ์ธ๋ถ ์์ฒญ์ ์ค์ผ ์ ์๋ค.
2. ๋น๋ ํ์ ์ต์ ํ
- ํฐํธ๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋น๋ํ ๋ ์ฒ๋ฆฌ๋์ด, ์ฌ์ดํธ๊ฐ ์ค์ ๋ก ์คํ๋ ๋ ๋ ๋น ๋ฅด๊ฒ ์๋ํ๋ค.
์ ์ฐํ ์ปค์คํ ์ต์
1. ๊ฐ๋ณ ํฐํธ ์ง์
- ํ๋์ ํฐํธ ํ์ผ๋ก ์ฌ๋ฌ ๊ตต๊ธฐ์ ์คํ์ผ์ ์ง์ํ ์ ์๋ค.
- ๊ตต์ ๊ธ์จ์ ์์ ๊ธ์จ๋ฅผ ๋ฐ๋ก ๋ก๋ํ์ง ์๊ณ , ํ๋์ ํ์ผ๋ก ๋ค์ํ ์คํ์ผ์ ํํํ ์ ์์ด์ ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
2. ์ปค์คํ ํฐํธ
- ๋ก์ปฌ์ ์ ์ฅ๋ ํฐํธ๋ ๋ค๋ฅธ ์น ํฐํธ ์ ๊ณต์์ ํฐํธ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
next/font์ค์ ์ค ๋ฐ์ํ ์๋ฌ
ํฐํธ ํ์ผ ์์น๋ฅผ publicํด๋๋ก ์ฎ๊ธฐ๊ณ src ๊ฒฝ๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
const pretendard = localFont({
src: '/public/fonts/PretendardVariable.woff2',
display: 'swap',
weight: '45 920',
variable: '--font-pretendard',
});
ํ์ง๋ง ์๋ฌ ๋ฐ์๐ฅ ๊ฐ์๊ธฐ ./๋ ์ด๋์ ๋ํ๋ ๊ฑฐ์ง..?
๋ค์ํ ์๋
/public/fonts
→ ์คํจ../public/fonts
→ ์คํจ@/public/fonts
→ ์คํจ/fonts
→ ์คํจ../fonts
→ ์คํจ../../public/fonts
→ ์ฑ๊ณต!๐
์์ธ : ์๋ ๊ฒฝ๋ก์ ์ค์์ฑ
localFont์์๋ src๋ ์๋ ๊ฒฝ๋ก๋ก ์ค์ ํด์ผ ํ๋ค. publicํด๋ ์์ ์๋ ํฐํธ ํ์ผ๋ ์๋ ๊ฒฝ๋ก๋ก ์ ๊ทผํด์ผ ํ๋ค.
const pretendard = localFont({
src: '../../public/fonts/PretendardVariable.woff2',
display: 'swap',
weight: '45 920',
variable: '--font-pretendard',
});
๊ฒฐ๋ก
- next/font๋ ์ฑ๋ฅ ์ต์ ํ, ์๋ธ์ ํ , ๋ ๋๋ง ๊ฐ์ ๋ฑ์ผ๋ก global.css๋ณด๋ค ํจ์จ์ ์ด๋ค.
- localFont๋ ์๋ ๊ฒฝ๋ก๋ก ์ ๊ทผํด์ผ ํ๋ค.
ํ๋ฌดํ ๊ฒฐ๋ง์ด์ง๋ง, ํด๊ฒฐํ์ผ๋ ๋ง์กฑํ๋ค…๐
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JWT ํ ํฐ ์ด๋์ ์ ์ฅํ๋๊ฒ ์ข์๊น? (1) | 2024.12.16 |
---|---|
SVGR jest ํ ์คํ ์๋ฌ (0) | 2024.12.07 |
React Query์ SSR: ์๋ฒ ์ฌ์ด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ Hydration ํ์ฉ (1) | 2024.12.07 |
Swiper ์ฌ์ฉ ํ๊ธฐ (feat. ํ ์ผ์๋) (0) | 2024.12.07 |
์น ์์ผ๊ณผ Socket.io (1) | 2024.11.25 |