1 분 소요


1. 글꼴을 최적화 해야하는 이유

웹 페이지에서 사용자 정의 글꼴을 사용하면 레이아웃 시프트가 발생할 수 있다.

  • 브라우저가 처음에는 시스템 글꼴로 텍스트를 렌더링한 후, 사용자 정의 글꼴이 로드되면 이를 교체하기 때문이다.
  • 이로 인해 텍스트 크기나 간격, 레이아웃이 변경되어 주변 요소가 이동하는 시프트 현상이 발생한다.


*페이지 로드 시 발생하는 레이아웃 시프트


Next.js에서는 next/font 모듈을 사용하여 글꼴을 자동으로 최적화할 수 있다.

  • 이 모듈은 빌드 시 글꼴 파일을 다운로드하여 정적 애셋과 함께 제공하므로, 사용자가 페이지를 로드할 때 추가 네트워크 요청이 필요 없어 성능을 크게 개선할 수 있다.



2. 주요 글꼴 추가하기

이제 Next.js 애플리케이션에 Google 글꼴을 추가하여, 이 글꼴을 최적화하는 방법을 살펴보자.


2.1 fonts.ts 파일 생성

먼저, /app/ui 디렉토리에 fonts.ts 파일을 생성하여 애플리케이션 전체에서 사용될 글꼴을 관리하자.

// app/ui/fonts.ts
import { Inter } from "next/font/google";


그런 다음, next/font/google 모듈에서 Inter 글꼴을 가져오자.

// app/ui/fonts.ts
import { Inter } from "next/font/google";

export const inter = Inter({ subsets: ["latin"] });


2.2 글꼴을 레이아웃에 추가

이제 /app/layout.tsx 파일에서 가져온 글꼴을 <body> 요소에 추가하여, 전체 애플리케이션에 적용할 수 있다.

// app/layout.tsx
import "./globals.css";
import { inter } from "./ui/fonts";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body className={`${inter.className} antialiased`}>{children}</body>
    </html>
  );
}
  • inter.className: 글꼴 클래스를 <body>에 적용하여, 모든 하위 요소에 Inter 글꼴이 적용된다.
  • antialiased 클래스: Tailwind CSS의 클래스 중 하나로, 텍스트를 부드럽게 렌더링한다. 필수는 아니지만, 시각적인 품질을 향상시키는 데 유용하다.


2.3 글꼴 적용 확인

브라우저에서 개발자 도구를 열고 <body> 요소를 확인하면 Inter와 Inter_Fallback 글꼴이 적용된 것을 확인할 수 있다.

필요한 경우, 특정 요소에만 글꼴을 적용할 수도 있다.

<div className="font-sans">{/* 특정 컴포넌트나 섹션에만 글꼴 적용 */}</div>



3. 보조 글꼴 추가하기

[Google Fonts↗️] 웹사이트를 방문하여 맘에 드는 글꼴의 이름을 검색하자.

그 후, next/font/google 모듈을 사용하여 글꼴을 가져오면 된다.

import { Inter, Lusitana } from "next/font/google";

export const inter = Inter({ subsets: ["latin"] });

export const lusitana = Lusitana({
  weight: ["400", "700"],
  subsets: ["latin"],
});


이제 lusitana 글꼴을 HomePage 컴포넌트에 적용하자.

"use client";

import { lusitana } from "./ui/fonts";

const HomePage = () => {
  return (
    <div>
      <h1 className={`${lusitana.className}`}>title !!! </h1>
    </div>
  );
};

export default HomePage;



참조


카테고리:

업데이트:

댓글남기기