콘텐츠로 건너뛰기

구글 폰트 적용 방법 (웹 폰트, 로컬 폰트, CDN 장단점)

1. 구글 폰트 사이트 (Google Fonts)

https://fonts.google.com/

구글 폰트 사이트는 무료로 다양한 폰트를 사용할 수 있습니다.

좌측의 Filter 를 사용하여 언어와 글자 모양 등을 설정하여 검색하면 더 찾기 쉽습니다.

원하는 폰트 클릭 후 우측 상단에 Get font 버튼을 눌러줍니다

그러면 우측에 Get embed codeDownload all 버튼이 생깁니다

이때, 좌측을 보시면 Noto Sans Korean 과 Hahmlet 두가지의 폰트가 선택되어 있는데요

원하지 않는 폰트는 Remove 버튼을 눌러서 삭제해줍니다.

2. Get embed code (웹 폰트 적용 방법)

폰트를 다운 받지 않고 html 과 css 파일에 코드를 추가하여 바로 사용할 수 있는 방법입니다.

제가 선택한 Hahmlet 폰트는 Weight 가 100 부터 900까지 지원됩니다.

적용 방법은 <link> 또는 @import 가 있습니다.

2-1. html 헤더에 <link> 추가 + css 파일에 class 생성

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹폰트</title>
    <link rel="stylesheet" href="/css/font.css">
    
    <!-- 웹폰트 link 태그 시작 -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2             family=Hahmlet:wght@100..900&family=Noto+Sans+KR:wght@100..900&display=swap"
        rel="stylesheet">
    <!-- 웹폰트 link 태그 끝 -->
    
</head>

<body>
    <h1>결과물</h1>
    <ul>
        <li>적용안함</li>
        <li class="hahmlet-100">클래스명: font-weight 100</li>
        <li class="hahmlet-200">클래스명: font-weight 200</li>
        <li class="hahmlet-300">클래스명: font-weight 300</li>
        <li class="hahmlet-400">클래스명: font-weight 400</li>
        <li class="hahmlet-500">클래스명: font-weight 500</li>
        <li class="hahmlet-600">클래스명: font-weight 600</li>
        <li class="hahmlet-700">클래스명: font-weight 700</li>
        <li class="hahmlet-800">클래스명: font-weight 800</li>
        <li class="hahmlet-900">클래스명: font-weight 900</li>
    </ul>
</body>

</html>

“Embed code in the <head> of your html” 부분에 적힌 코드를 복사하여 html 헤더태그 사이에 넣어줍니다.

/* <uniquifier>: Use a unique and descriptive class name */
/* <weight>: Use a value from 100 to 900 */

.hahmlet-100 {
  font-family: "Hahmlet", serif;
  font-optical-sizing: auto;
  font-weight: 100;
  font-style: normal;
}
.hahmlet-200 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 200;
    font-style: normal;
  }
  .hahmlet-300 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 300;
    font-style: normal;
  }
  .hahmlet-400 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 400;
    font-style: normal;
  }
  .hahmlet-500 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 500;
    font-style: normal;
  }
  .hahmlet-600 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 600;
    font-style: normal;
  }
  .hahmlet-700 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 700;
    font-style: normal;
  }
  .hahmlet-800 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 800;
    font-style: normal;
  }
  .hahmlet-900 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 900;
    font-style: normal;
  }

“Hahmlet: CSS class for a variable style” 부분에 적힌 코드를 복사하여 css 파일에 넣어줍니다.

이때 저는 <uniquifier> 부분에 weight 를 적어주어 클래스 사용 시 폰트 두께를 구문 할 수 있도록 하였습니다.

2-2. html 헤더에 <style> @import 추가 + css 파일에 class 생성

@import 를 체크하면 html 헤드 태그에 넣을 스타일 태그가 나옵니다

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹폰트</title>
    <link rel="stylesheet" href="/css/font.css">
    
    <!-- 웹폰트 style 태그 시작 -->
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Hahmlet:wght@100..900&display=swap');
    </style>
    <!-- 웹폰트 style 태그 끝 -->
    
</head>

<body>
    <h1>결과물</h1>
    <ul>
        <li>적용안함</li>
        <li class="hahmlet-100">클래스명: font-weight 100</li>
        <li class="hahmlet-200">클래스명: font-weight 200</li>
        <li class="hahmlet-300">클래스명: font-weight 300</li>
        <li class="hahmlet-400">클래스명: font-weight 400</li>
        <li class="hahmlet-500">클래스명: font-weight 500</li>
        <li class="hahmlet-600">클래스명: font-weight 600</li>
        <li class="hahmlet-700">클래스명: font-weight 700</li>
        <li class="hahmlet-800">클래스명: font-weight 800</li>
        <li class="hahmlet-900">클래스명: font-weight 900</li>
    </ul>
</body>

</html>

아까와 마찬가지로 “Embed code in the <head> of your html” 부분에 적힌 코드를 복사하여 html 헤더태그 사이에 넣어줍니다.

/* <uniquifier>: Use a unique and descriptive class name */
/* <weight>: Use a value from 100 to 900 */

.hahmlet-100 {
    font-family: "Hahmlet", serif;
    font-optical-sizing: auto;
    font-weight: 100;
    font-style: normal;
  }
  .hahmlet-200 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 200;
      font-style: normal;
    }
    .hahmlet-300 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 300;
      font-style: normal;
    }
    .hahmlet-400 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 400;
      font-style: normal;
    }
    .hahmlet-500 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 500;
      font-style: normal;
    }
    .hahmlet-600 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 600;
      font-style: normal;
    }
    .hahmlet-700 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 700;
      font-style: normal;
    }
    .hahmlet-800 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 800;
      font-style: normal;
    }
    .hahmlet-900 {
      font-family: "Hahmlet", serif;
      font-optical-sizing: auto;
      font-weight: 900;
      font-style: normal;
    }

css 파일에도 아까와 동일하게

“Hahmlet: CSS class for a variable style” 부분에 적힌 코드를 복사하여 css 파일에 넣어줍니다.

3. Download (로컬 폰트 적용 방법)

다운로드 버튼을 누르면 선택한 폰트를 다운 받을 수 있습니다.

웹폰트 파일 확장자로는 .woff(웹오픈폰트) .ttf(트루타입폰트) .otf(오픈타입폰트) 등이 있습니다.

저의 경우 압축을 해제하니 두께별로 ttf 파일이 있었습니다.

3-1. 폰트 파일의 종류

폰트 파일은 글꼴을 디지털 장치에서 표시하기 위해 사용되는 파일 형식입니다. 각각의 파일 형식은 특정한 장점과 용도로 사용되며, 아래에 주요한 폰트 파일 형식에 대한 설명을 제공합니다:

  1. TTF (TrueType Font):
    • 설명: TTF는 1980년대 후반에 Apple과 Microsoft가 공동 개발한 폰트 파일 형식입니다. 가장 널리 사용되는 포맷 중 하나로, 단순하면서도 높은 호환성을 자랑합니다. TTF 파일은 글꼴의 스크린과 인쇄 품질을 유지하기 위해 비트맵 데이터를 사용합니다.
    • 장점: 대부분의 운영 체제와 호환되며, 간단한 구조로 인해 빠른 렌더링 속도를 제공합니다.
  2. OTF (OpenType Font):
    • 설명: OTF는 TrueType의 발전된 버전으로, Adobe와 Microsoft가 공동 개발한 포맷입니다. OTF는 TTF와는 달리 비트맵 대신 곡선 데이터를 기반으로 하며, 더 많은 타이포그래피 기능을 지원합니다. 예를 들어, 다양한 언어의 글자 형태, 서체 스타일, 리가처(ligatures) 등이 가능합니다.
    • 장점: 다양한 글꼴 기능과 높은 확장성을 제공하며, 인쇄와 디지털 디스플레이 모두에 적합합니다.
  3. WOFF (Web Open Font Format):
    • 설명: WOFF는 웹에서 폰트를 효율적으로 사용하기 위해 개발된 파일 형식입니다. TTF나 OTF와 같은 폰트를 압축하여 웹 페이지에 포함할 수 있게 해줍니다. 이는 웹 페이지 로딩 시간을 단축하고, 폰트를 보호하는 데 도움이 됩니다.
    • 장점: 웹에서 사용하기에 적합하며, 파일 크기를 줄여 로딩 속도를 향상시킵니다.
  4. WOFF2 (Web Open Font Format 2):
    • 설명: WOFF2는 WOFF의 후속 버전으로, 더 높은 압축률을 제공하여 파일 크기를 더욱 줄일 수 있습니다. Google이 주도하여 개발한 이 포맷은 더욱 최적화된 웹 폰트 렌더링을 가능하게 합니다.
    • 장점: WOFF보다 더 작은 파일 크기를 제공하며, 웹에서 폰트 파일을 효율적으로 전송할 수 있습니다.

이와 같은 폰트 파일 형식은 각기 다른 용도와 플랫폼에서 최적의 성능을 발휘하며, 디자이너와 개발자는 이들 중 적절한 파일 형식을 선택하여 사용합니다.

3-2. 로컬 폰트 적용

다운 받은 폰트를 fonts 폴더에 넣고 font.css 파일에 내용을 추가 해줍니다.

@font-face {
    font-family: "Hahmlet";
    font-weight: 100;
    font-style: normal;
    src: url('/fonts/Hahmlet/Hahmlet-Thin.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 200;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-ExtraLight.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 300;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-Light.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 400;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-Regular.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 500;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-Medium.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 600;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-SemiBold.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 700;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-Bold.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 800;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-ExtraBold.ttf') format('truetype');
}
@font-face {
  font-family: "Hahmlet";
  font-weight: 900;
  font-style: normal;
  src: url('/fonts/Hahmlet/Hahmlet-Black.ttf') format('truetype');
}


/* 사용할 부분에 폰트 적용 */
body{
  font-family: "Hahmlet";
}
  • font-family : "Hahmlet"는 사용자가 지정한 폰트의 이름입니다. CSS에서 이 이름으로 폰트를 참조할 수 있습니다.
  • src : 폰트 파일의 경로를 지정합니다. 위의 예시에서는 .ttf 만 있지만 .woff2, .woff, .ttf 파일 등을 여러 개 지정할 수 있습니다.브라우저는 가능한 첫 번째 파일을 사용하며, 지원하지 않는 경우 다음 파일을 시도합니다. 따라서 여러 개의 폰트 파일을 불러올 경우 가장 크기가 작은 파일부터 순서대로 쓰는 것이 좋습니다. (예시, woff2 – woff – ttf)
    • local() : 사용자의 로컬환경에 설치된 폰트는 local() 이라는 구문을 사용하여 지정가능
    • url() : 파일의 위치를 나타내는 URL 값
    • format() : 파일 형식을 지정 woff, woff2, truetype, opentype, embedded-opentype, svg 중에 선택
/* 여러개의 src 예시 */
@font-face {
    font-family: "Hahmlet";
    src: local('Hahmlet-Medium'),
        url('/fonts/Hahmlet-Medium.woff2') format('woff2'),
        url('/fonts/Hahmlet-Medium.woff') format('woff'),
        url('/fonts/Hahmlet-Medium.ttf') format('truetype');
    font-weight: 500;
    font-style: normal;
}
  • font-weightfont-style: 폰트의 굵기와 스타일을 지정합니다. 필요에 따라 bold, italic 등의 값을 사용할 수 있습니다.

4. CDN 사용

Content Delivery Network 의 약자로 정적인 파일들을 전세계에 분산된 여러 서버에 저장해 두고, 사용자가 해당 파일에 접근할 때 자동으로 가장 가까운 서버에서 파일을 제공하는 기술입니다.

자주 사용하는 눈누 사이트(https://noonnu.cc/)에서도 볼 수 있습니다

웹폰트를 CDN 으로 제공할 경우 HTML 파일의 헤더에 별다른 첨부 없이

CSS 파일에 소스를 추가하면 바로 적용이 가능합니다.

/* 웹폰트 CDN으로 첨부 */
@font-face {
    font-family: 'Paperlogy';
    src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-1Thin.woff2')   
         format('woff2');
    font-weight: 100;
    font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-2ExtraLight.woff2') 
       format('woff2');
  font-weight: 200;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-3Light.woff2') 
      format('woff2');
  font-weight: 300;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-4Regular.woff2') 
       format('woff2');
  font-weight: 400;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-5Medium.woff2') 
       format('woff2');
  font-weight: 500;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-6SemiBold.woff2') 
       format('woff2');
  font-weight: 600;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-7Bold.woff2') 
       format('woff2');
  font-weight: 700;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-8ExtraBold.woff2') 
       format('woff2');
  font-weight: 800;
  font-style: normal;
}
@font-face {
  font-family: 'Paperlogy';
  src: url('https://fastly.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-9Black.woff2') 
       format('woff2');
  font-weight: 900;
  font-style: normal;
}

body{
  font-family: 'Paperlogy';
}

5. 웹폰트, 로컬폰트, CDN 방식의 장단점

웹폰트 (Web Font)

  • 정의: 웹에서 직접 URL을 통해 불러오는 폰트. Google Fonts 같은 외부 폰트 제공 서비스에서 링크를 통해 불러와 사용.

장점:

  • 간편함: 외부 서비스에서 제공하는 폰트를 링크로 간단하게 불러와 사용할 수 있습니다.
  • 자동 업데이트: 폰트 제공 서비스에서 폰트를 업데이트하면, 자동으로 최신 버전을 사용할 수 있습니다.
  • 다양한 선택: 여러 스타일과 언어를 지원하는 다양한 폰트를 쉽게 사용할 수 있습니다.

단점:

  • 의존성: 외부 서비스에 의존하게 되므로, 서비스 제공자가 다운되거나 느려지면 웹사이트의 폰트 로딩에 문제가 생길 수 있습니다.
  • 속도 저하: 외부 리소스를 불러오기 때문에 페이지 로딩 속도에 영향을 줄 수 있습니다.
  • 라이선스 문제: 무료로 제공되는 폰트도 라이선스 조건을 주의 깊게 확인해야 합니다.

로컬폰트 (Local Font)

  • 정의: 폰트 파일을 웹 서버에 직접 업로드하고, CSS의 @font-face를 통해 웹사이트에 적용하는 방식.

장점:

  • 제어 가능성: 폰트 파일을 직접 관리할 수 있어, 파일의 버전이나 스타일을 완전히 제어할 수 있습니다.
  • 안정성: 외부 서비스에 의존하지 않기 때문에, 서버의 상태가 안정적이라면 폰트 로딩 문제를 줄일 수 있습니다.
  • 맞춤화: 폰트의 서브셋(subset)을 만들어 필요한 문자만 포함한 폰트를 사용하여 파일 크기를 줄일 수 있습니다.

단점:

  • 서버 부하: 폰트 파일이 서버에 저장되어 있어, 서버에 추가적인 부하가 발생할 수 있습니다.
  • 관리 부담: 폰트 파일의 설치, 유지보수 및 라이선스 관리가 필요합니다.
  • 캐싱 부족: 웹폰트나 CDN 폰트에 비해, 다른 사이트에서 이 폰트가 캐시되지 않기 때문에 첫 로딩 시 느릴 수 있습니다.

CDN (Content Delivery Network) 방식

  • 정의: 전 세계에 분산된 서버 네트워크를 통해 폰트 파일을 제공하는 방식. 예를 들어, Google Fonts, Adobe Fonts 등이 있습니다.

장점:

  • 빠른 로딩 속도: 사용자와 가까운 서버에서 폰트를 불러오기 때문에 로딩 속도가 빠르고 안정적입니다.
  • 광범위한 캐싱: 인기 있는 CDN 서비스의 폰트는 이미 많은 사용자의 브라우저에 캐시되어 있을 가능성이 높아, 더 빠른 로딩이 가능합니다.
  • 간편함: 설정이 간단하고 유지보수 부담이 적습니다.

단점:

  • 제어 불가: 폰트 파일에 대한 직접적인 제어가 불가능하며, 폰트 스타일이나 버전을 자유롭게 변경하기 어렵습니다.
  • 의존성: CDN 서비스가 중단되거나 문제가 생기면 폰트 로딩에 영향을 미칠 수 있습니다.
  • 프라이버시 우려: CDN을 사용할 때 사용자 정보가 해당 서비스 제공자에게 노출될 수 있습니다.

요약:

  • 웹폰트: 사용이 간편하고 다양한 선택지가 있지만, 외부 서비스에 의존해야 하며 속도 저하가 있을 수 있습니다.
  • 로컬폰트: 폰트를 완전히 제어할 수 있고 안정적이지만, 서버 부하와 관리의 부담이 따릅니다.
  • CDN: 빠르고 광범위한 캐싱이 가능하지만, 제어권이 부족하고 외부 서비스에 의존하게 됩니다.

각 방식은 웹사이트의 특성과 요구사항에 따라 적절하게 선택하는 것이 중요합니다.