모노레포 Next15v Pretendard(프리텐다드) 폰트 적용하기
Pretenard를 쓰는 이유
- 디자이너분들이 많이 쓰는 한글 폰트
- 폰트 굵기가 다양하여 섬세한 폰트 스타일링 가능
- 무료 상업용 폰트
다운로드
Release v1.3.9 · orioncactus/pretendard
Pretendard GOV에서 심벌 문자를 개편하며, 패밀리에서 일부 문자 및 기능 사용성을 개선합니다. 자세한 업데이트 개요는 이곳에서 확인하실 수 있습니다. Pretendard GOV에서 심벌 문자 개편 특정 텍스
github.com
파일을 다운로드하고
`pretendard-1.3.9/web/variable/woff2/PretendardVariable.woff2` 경로에 있는 파일을 프로젝트 디렉토리에 넣는다.
font폴더안에
fonts, src를 만들고 fonts폴더 안에는 다운받은 pretendard폰트를 넣어주었다.
📂 packages
└── 📂 font
├── 📂 fonts
│ └── 📄 Pretendard-Variable.woff2 <- 경로
└── 📂 src
Next.js 15에는 `next/font/local`이라는 아주 편리한 기능이 있다.
→ packages/font/src 폴더 안에 index.ts 라는 파일을 만든다.
packages/font/src/index.ts
import localFont from 'next/font/local';
export const pretendard = localFont({
src: '../fonts/Pretendard-Variable.woff2', // 👈 우리 폰트 파일 위치
display: 'swap',
weight: '45 920', // Pretendard Variable 폰트가 지원하는 굵기 범위
variable: '--font-pretendard', // 👈 이 폰트에 별명을 지어주는 것
});
- `src`: '../fonts/...': index.ts 파일 입장에서 폰트 파일이 어디 있는지 알려주는 것
- `variable`: '--font-pretendard': 나중에 CSS에서 "프리텐다드 폰트 줘!" 대신 var(--font-pretendard) 라는 암호(별명)로 쉽게 부를 수 있다.
이제 우리가 만든 font 패키지를 다른 곳에서 사용하려면 이름표(package.json)가 필요!
- packages/font 폴더 안에 package.json 파일을 만든다
- 아래 내용을 복사해서 붙여넣는다.
{
"name": "@repo/font",
"version": "0.0.0",
"private": true,
"exports": {
"./pretendard": "./src/index.ts"
}
}
복사한 뒤 package.json 목록에 여기에 Next가 없으니 에러를 낼 수 있다.
즉,Next 회사 도구를 써도 좋다고 허락을 안해준 것
Next 설치하기
`packages/font` 폴더로 이동 후 next 도구 설치
pnpm add -D next //pnpm
yarn add next -D //yarn
npm install next --save-dev //npm
설치하면 package.json폴더에 다시 보면 `devDepedncies` 안에 next가 생기는 것을 알 수 있다.
{
"name": "@repo/font",
"version": "0.0.0",
"private": true,
"exports": {
"./pretendard": "./src/index.ts"
},
"devDependencies": {
"next": "^15.3.3"
}
}
`@repo/font` 와 Next.js 에서 사용할 수 있도록 연결작업
- apps/web/package.json 파일을 열어준다.
- dependencies 부분에 아래 한 줄을 추가
"dependencies": {
"@repo/font": "*",
},
명령어로 다시 업데이트
터미널을 열고 프로젝트의 가장 최상위 폴더(루트)에서 `pnpm install` 명령어를 실행한다.
이제 새 폰트를 쓸 수 있다고 알려주는 과정이다.
Next.js Pretendard 폰트를 사용할 수 있도록 설정
- `apps/web/app/layout.tsx` 파일로 들어간다.
- 아래와 같이 코드를 수정해준다.
import type { Metadata } from "next";
// pretendard 폰트를 가져와요!
import { pretendard } from "@repo/font/pretendard";
import "./globals.css";
export const metadata: Metadata = {
title: "Create Turborepo",
description: "Generated by create-turbo",
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}): JSX.Element {
return (
<html lang="ko" className={pretendard.variable}> {/* ✨ 바로 여기! */}
<body>{children}</body>
</html>
);
}
번외) 테일윈드 (Tailwind CSS)를 쓴다면?
테일윈드에게도 우리 폰트가 프리텐다드를 쓸거야! 라고 알려주어야 한다.
모노레포를 사용하고 있기 때문에
`packages/tailwind-config/tailwind.config.ts` 경로로 이동한다.
없으면 새로 tailwind.config.ts를 생성해준다.
이거 때문에 뒤적이다가 리드미 우연히 보고 클릭해서 알게 됨 ㄷㄷ
리드미에 있는 링크를 클릭하면 자동으로 새로 파일을 생성해준다.
코드 추가
import type { Config } from "tailwindcss";
const config: Config = {
// content는 Tailwind가 어떤 파일들을 보고 CSS를 만들지 결정하는 부분
// "우리 앱 폴더와 공용 UI 폴더에 있는 파일들을 다 살펴봐줘!" 라는 뜻
content: [
"../../apps/**/*.{js,ts,jsx,tsx}",
"../../packages/ui/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {
// Pretendard 폰트 규칙 추가
fontFamily: {
sans: ["var(--font-pretendard)", "sans-serif"],
},
},
},
plugins: [],
};
export default config;
파일을 저장하고, 터미널에서 개발 서버를 완전히 껐다가 다시 켜서(pnpm dev) 최종 확인