Front-end/Optimizing

๐ŸŽจ ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ: ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ์ˆจ์€ ๋ฌด๊ธฐ

xeunnie 2025. 3. 7. 01:00
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽจ ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ: ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ์ˆจ์€ ๋ฌด๊ธฐ

 

์›น์‚ฌ์ดํŠธ๋ฅผ ์—ด ๋•Œ ํฐํŠธ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ถˆํŽธํ•จ์„ ๋А๋ผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ „์ฒด ํฐํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ์ฃ . ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ธŒ์…‹ ์ถ”์ถœ(Subset Extraction)์„ ํ™œ์šฉํ•˜๋ฉด ํฐํŠธ ์„ฑ๋Šฅ์„ ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ์ด ๋ฌด์—‡์ธ์ง€, ์™œ ํ•„์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”.

 

1. ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ์ด๋ž€?

 

โœ‚๏ธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ(Subsetting)

 

์„œ๋ธŒ์…‹ ์ถ”์ถœ์€ ํฐํŠธ ํŒŒ์ผ์—์„œ **ํŠน์ • ๊ธ€๋ฆฌํ”„(๋ฌธ์ž)**๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜์–ด ์•ŒํŒŒ๋ฒณ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ดํŠธ์—์„œ๋Š” ํ•œ๊ธ€, ์ผ๋ณธ์–ด, ์ค‘๊ตญ์–ด ๋“ฑ์˜ ๊ธ€๋ฆฌํ”„๋ฅผ ์ œ๊ฑฐํ•œ ๊ฒฝ๋Ÿ‰ ํฐํŠธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐ŸŽฏ ์™œ ์„œ๋ธŒ์…‹ ์ถ”์ถœ์ด ํ•„์š”ํ•œ๊ฐ€?

1. ์„ฑ๋Šฅ ์ตœ์ ํ™”

ํฐํŠธ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํฐํŠธ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

2. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

์ฒซ ํ™”๋ฉด์—์„œ “FOUT(Flash of Unstyled Text)” ๋ฌธ์ œ๋ฅผ ์ค„์ด๊ณ , ํ…์ŠคํŠธ๋ฅผ ๋” ๋นจ๋ฆฌ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ ˆ๊ฐ

๊ธ€๋กœ๋ฒŒ ํฐํŠธ์—๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜๋Š”๋ฐ, ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ์—์„œ๋Š” ๊ทธ์ค‘ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

2. ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ์˜ ์ž‘๋™ ์›๋ฆฌ

 

๐Ÿงฉ ์ „์ฒด ํฐํŠธ ํŒŒ์ผ์˜ ๊ตฌ์กฐ

 

ํฐํŠธ ํŒŒ์ผ(TTF, OTF ๋“ฑ)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

๊ธ€๋ฆฌํ”„ ๋ฐ์ดํ„ฐ: ๊ฐ ๋ฌธ์ž(์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž)์˜ ๋ชจ์–‘ ์ •๋ณด.

๋ฉ”ํŠธ๋ฆญ์Šค: ๊ฐ ๊ธ€๋ฆฌํ”„์˜ ํฌ๊ธฐ์™€ ๊ฐ„๊ฒฉ ์ •๋ณด.

์ปค๋‹ ์ •๋ณด: ๊ธ€๋ฆฌํ”„ ๊ฐ„์˜ ๊ฐ„๊ฒฉ ์กฐ์ • ์ •๋ณด.

 

์„œ๋ธŒ์…‹ ์ถ”์ถœ์€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ธ€๋ฆฌํ”„ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํฐํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

โš™๏ธ Subset์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •

1. ์‚ฌ์šฉํ•  ๋ฌธ์ž ์ง‘ํ•ฉ ์ •์˜: ์˜ˆ๋ฅผ ๋“ค์–ด, A-Z, a-z, 0-9, ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จ.

2. ํฐํŠธ ํŒŒ์ผ ์ถ”์ถœ: ์ •์˜๋œ ๋ฌธ์ž๋งŒ ํฌํ•จ๋œ ์ƒˆ ํฐํŠธ ํŒŒ์ผ ์ƒ์„ฑ.

3. ์›น์‚ฌ์ดํŠธ์— ์ ์šฉ: ์ตœ์ ํ™”๋œ ์„œ๋ธŒ์…‹ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํฐํŠธ ๋กœ๋”ฉ ์„ฑ๋Šฅ ๊ฐœ์„ .

 

3. ์„œ๋ธŒ์…‹ ์ถ”์ถœ ๋„๊ตฌ

 

๐Ÿ› ๏ธ 1) Google Fonts Subsetting Tool

 

Google Fonts์—์„œ ํฐํŠธ๋ฅผ ์„ ํƒํ•˜๋ฉด Customize ํƒญ์—์„œ ์‚ฌ์šฉํ•  ๋ฌธ์ž ์ง‘ํ•ฉ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์› ๋ฌธ์ž ์ง‘ํ•ฉ: ๊ธฐ๋ณธ ๋ผํ‹ด, ํ™•์žฅ ๋ผํ‹ด, ํ•œ๊ธ€, ์ผ๋ณธ์–ด ๋“ฑ.

์žฅ์ : ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , Google Fonts์™€ ํ†ตํ•ฉ๋˜์–ด ์žˆ์Œ.

 

๐Ÿ› ๏ธ 2) Glyphhanger

 

CLI ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋กœ, HTML ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ๋œ ๊ธ€๋ฆฌํ”„๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ถœํ•˜๊ณ  ์„œ๋ธŒ์…‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ๋ฒ•

1. Glyphhanger ์„ค์น˜:

 

npm install -g glyphhanger

 

 

2. HTML์—์„œ ์‚ฌ์šฉ๋œ ๋ฌธ์ž ์ถ”์ถœ:

 

glyphhanger ./index.html --whitelist=A-Z,a-z,0-9

 

 

3. ํฐํŠธ ํŒŒ์ผ ์ƒ์„ฑ:

 

glyphhanger --subset=./path/to/font.ttf --output=./path/to/subset.ttf

 

๐Ÿ› ๏ธ 3) FontForge

 

ํฐํŠธ ํŽธ์ง‘๊ธฐ ๋„๊ตฌ๋กœ, GUI ํ™˜๊ฒฝ์—์„œ ์„œ๋ธŒ์…‹ ์ถ”์ถœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ๋ฒ•

1. FontForge๋ฅผ ์—ด๊ณ  ํฐํŠธ ํŒŒ์ผ ๋กœ๋“œ.

2. ํ•„์š”ํ•œ ๊ธ€๋ฆฌํ”„๋งŒ ์„ ํƒ.

3. “Export”๋ฅผ ํ†ตํ•ด ์„œ๋ธŒ์…‹ ํฐํŠธ ์ €์žฅ.

 

4. ์‹ค๋ฌด์—์„œ์˜ ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ

 

๐Ÿ“„ 1) Tailwind CSS ํ”„๋กœ์ ํŠธ์— ์„œ๋ธŒ์…‹ ํฐํŠธ ์ ์šฉ

1. ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ ํ›„, woff2 ํ˜•์‹์œผ๋กœ ์ €์žฅ.

2. Tailwind CSS์— ์ปค์Šคํ…€ ํฐํŠธ ์„ค์ •:

 

// tailwind.config.js

module.exports = {

  theme: {

    extend: {

      fontFamily: {

        sans: ['MySubsetFont', 'sans-serif'],

      },

    },

  },

};

 

 

3. ์Šคํƒ€์ผ ํŒŒ์ผ์— ํฐํŠธ ์ ์šฉ:

 

@font-face {

  font-family: 'MySubsetFont';

  src: url('/fonts/MySubsetFont.woff2') format('woff2');

  font-weight: normal;

  font-style: normal;

}

 

๐Ÿงช 2) React์—์„œ ํฐํŠธ ์„œ๋ธŒ์…‹ ์ ์šฉ

1. ํฐํŠธ ํŒŒ์ผ์„ public ํด๋”์— ์ €์žฅ.

2. index.css ๋˜๋Š” ์Šคํƒ€์ผ ํŒŒ์ผ์— ์ ์šฉ:

 

@font-face {

  font-family: 'MySubsetFont';

  src: url('/fonts/MySubsetFont.woff2') format('woff2');

}

 

body {

  font-family: 'MySubsetFont', Arial, sans-serif;

}

 

5. ์„œ๋ธŒ์…‹ ์ถ”์ถœ๊ณผ ์„ฑ๋Šฅ ๋น„๊ต

 

ํฐํŠธ ํŒŒ์ผ ์šฉ๋Ÿ‰ ๋กœ๋”ฉ ์‹œ๊ฐ„

๊ธฐ๋ณธ ํฐํŠธ 500KB 1.5์ดˆ

์„œ๋ธŒ์…‹ ํฐํŠธ 50KB 0.3์ดˆ

 

๐ŸŽฏ ๊ฒฐ๋ก : ์„œ๋ธŒ์…‹ ์ถ”์ถœ์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํ•„์ˆ˜์ !

 

6. ์„œ๋ธŒ์…‹ ์ถ”์ถœ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

1. ์‚ฌ์šฉํ•  ๋ฌธ์ž ์‹๋ณ„: ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ฌธ์ž๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์„ธ์š”.

2. ํ…Œ์ŠคํŠธ: ์„œ๋ธŒ์…‹ ํฐํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

3. ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ: ์„œ๋ธŒ์…‹ ํฐํŠธ ํŒŒ์ผ ํ˜•์‹(woff2)์ด ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

 

๊ฒฐ๋ก : ์„œ๋ธŒ์…‹ ์ถ”์ถœ๋กœ ํฐํŠธ ์ตœ์ ํ™”ํ•˜๊ธฐ

 

ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ ์˜ ์ค‘์š”ํ•œ ์—ด์‡ ์ž…๋‹ˆ๋‹ค.

๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋‚จ๊ฒจ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ์„ธ์š”.

๐ŸŒท์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น!๐ŸŒท

 

๐Ÿ–‹๏ธ Font Subset ์ถ”์ถœ: ์›น ์„ฑ๋Šฅ์„ ์œ„ํ•œ ์Šค๋งˆํŠธํ•œ ์„ ํƒ

 

์›น ํŽ˜์ด์ง€์—์„œ ํฐํŠธ๋Š” ์‹œ๊ฐ์  ์™„์„ฑ๋„๋ฅผ ๋†’์ด๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์˜ˆ์š”. ํ•˜์ง€๋งŒ, ํฐํŠธ ํŒŒ์ผ์ด ํฌ๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ๊ธ€๋ฆฌํ”„(๋ฌธ์ž์™€ ์‹ฌ๋ณผ)๊นŒ์ง€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Font Subset ์ถ”์ถœ์„ ์‚ฌ์šฉํ•˜๋ฉด ํฐํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Font Subset์ด ๋ฌด์—‡์ธ์ง€, ์™œ ์ค‘์š”ํ•œ์ง€, ์–ด๋–ป๊ฒŒ ์ถ”์ถœํ•˜๋Š”์ง€ ๋“ฑ์„ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”! ๐Ÿง

 

1. Font Subset ์ถ”์ถœ์ด๋ž€?

 

Font Subset์ด๋ž€?

 

Font Subset์€ ํฐํŠธ ํŒŒ์ผ์—์„œ ํŠน์ • ๊ธ€๋ฆฌํ”„(๋ฌธ์ž, ๊ธฐํ˜ธ ๋“ฑ)๋งŒ ์ถ”์ถœํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ์ค„์ธ ํฐํŠธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŽ˜์ด์ง€์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž๋งŒ ํฌํ•จ๋œ ํฐํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด์—์š”.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ๊ธ€ ํฐํŠธ์—๋Š” ์•ฝ 11,000์—ฌ ๊ฐœ์˜ ๊ธ€์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ, ์›น ํŽ˜์ด์ง€์—์„œ ๊ทธ์ค‘ ๋ช‡๋ฐฑ ๊ฐœ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ๊ธ€๋ฆฌํ”„๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์™œ ์ค‘์š”ํ•œ๊ฐ€์š”?

1. ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„ 

ํฐํŠธ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํฐํŠธ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์–ด ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ์š”.

2. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ

๋กœ๋”ฉ ์‹œ๊ฐ„์ด ์งง์•„์ง€๋ฉด ํฐํŠธ๊ฐ€ ์ ์šฉ๋˜๊ธฐ ์ „์˜ “FOUT(Flash of Unstyled Text)” ํ˜„์ƒ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

3. ๋ฐ์ดํ„ฐ ๋น„์šฉ ์ ˆ๊ฐ

๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ํฐํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์ด๋ฉด ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ๋น„์šฉ์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. SEO ๊ฐœ์„ 

๋กœ๋”ฉ ์†๋„๋Š” ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋” ๋น ๋ฅธ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋” ๋‚˜์€ SEO ๊ฒฐ๊ณผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

 

2. Font Subset ์ถ”์ถœ์˜ ์ž‘๋™ ์›๋ฆฌ

1. ํ…์ŠคํŠธ ๋ถ„์„

ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ…์ŠคํŠธ๋ฅผ ๋ถ„์„ํ•ด ํ•„์š”ํ•œ ๋ฌธ์ž๋งŒ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

2. ํฐํŠธ ํŒŒ์ผ ์ฒ˜๋ฆฌ

์›๋ณธ ํฐํŠธ ํŒŒ์ผ์—์„œ ํ•„์š”ํ•œ ๋ฌธ์ž๋งŒ ํฌํ•จํ•œ ์ƒˆ ํฐํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. ์›น ํŽ˜์ด์ง€์— ์ ์šฉ

์ถ”์ถœ๋œ ํฐํŠธ๋ฅผ ํŽ˜์ด์ง€์— ๋กœ๋“œํ•˜์—ฌ ์ตœ์ ํ™”๋œ ํฐํŠธ ๋ Œ๋”๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

3. Font Subset ์ถ”์ถœ ๋ฐฉ๋ฒ•

 

1) Google Fonts ์‚ฌ์šฉํ•˜๊ธฐ

 

Google Fonts๋Š” ์ž๋™์œผ๋กœ ์‚ฌ์šฉ๋œ ๊ธ€๋ฆฌํ”„๋งŒ ํฌํ•จ๋œ ์„œ๋ธŒ์…‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet">

 

Google Fonts๋Š” ์ž๋™์œผ๋กœ ์„œ๋ธŒ์…‹์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ชจ๋“  ์ƒํ™ฉ์— ๋งž์ถ”๊ธฐ์—” ํ•œ๊ณ„๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด์š”.

 

2) Font Subsetter ๋„๊ตฌ ์‚ฌ์šฉ

 

1. Pyftsubset (FontTools)

 

FontTools๋Š” Python ๊ธฐ๋ฐ˜์˜ ๋„๊ตฌ๋กœ, ํฐํŠธ ์„œ๋ธŒ์…‹ ์ถ”์ถœ์— ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์„ค์น˜

 

pip install fonttools

 

์‚ฌ์šฉ๋ฒ•

 

pyftsubset your-font.ttf --text="Hello World" --output-file=subset-font.ttf

 

--text: ํฐํŠธ์—์„œ ์‚ฌ์šฉํ•  ํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

--output-file: ์ถ”์ถœ๋œ ํฐํŠธ์˜ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

2. Glyphhanger

 

Glyphhanger๋Š” ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ๋œ ๊ธ€๋ฆฌํ”„๋ฅผ ์ž๋™์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ํฐํŠธ ์„œ๋ธŒ์…‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

์„ค์น˜

 

npm install -g glyphhanger

 

์‚ฌ์šฉ๋ฒ•

 

glyphhanger --subset=*.woff2 --US-ascii https://your-website.com

 

์ด ๋ช…๋ น์–ด๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ๋œ ๊ธ€๋ฆฌํ”„๋งŒ ํฌํ•จ๋œ WOFF2 ํฐํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

3. Transfonter

 

Transfonter๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ์„œ๋ธŒ์…‹ ์ƒ์„ฑ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

1. ์›น์‚ฌ์ดํŠธ์— ์ ‘์†.

2. ํฐํŠธ ํŒŒ์ผ ์—…๋กœ๋“œ.

3. ์‚ฌ์šฉํ•  ๋ฌธ์ž(๊ธ€๋ฆฌํ”„) ์„ ํƒ.

4. ์„œ๋ธŒ์…‹ ํฐํŠธ ๋‹ค์šด๋กœ๋“œ.

 

3) ์ง์ ‘ ์ฝ”๋“œ ์ž‘์„ฑ

 

JS๋‚˜ CSS์—์„œ ์ง์ ‘ ํฐํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•„์š”ํ•œ ๊ธ€๋ฆฌํ”„๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

CSS @font-face ์‚ฌ์šฉ ์˜ˆ์‹œ

 

@font-face {

  font-family: 'MyFont';

  src: url('/path-to-fonts/subset-font.woff2') format('woff2');

  unicode-range: U+0041-005A, U+0061-007A; /* A-Z, a-z */

}

 

unicode-range๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ ๊ธ€๋ฆฌํ”„ ๋ฒ”์œ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

4. Font Subset ํ™œ์šฉ ์‚ฌ๋ก€

1. ๋‹ค๊ตญ์–ด ์›น์‚ฌ์ดํŠธ

๊ฐ ์–ธ์–ด๋ณ„๋กœ ์„œ๋ธŒ์…‹ ํฐํŠธ๋ฅผ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜์–ด๋Š” ๋กœ๋งˆ์ž๋งŒ ํฌํ•จ๋œ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ•œ๊ธ€์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธ€๋ฆฌํ”„๋งŒ ํฌํ•จ๋œ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)

์ดˆ๊ธฐ ๋กœ๋“œ์— ํ•„์š”ํ•œ ์ตœ์†Œ ๊ธ€๋ฆฌํ”„๋งŒ ํฌํ•จ๋œ ํฐํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” Lazy Loading์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

3. ๋ชจ๋ฐ”์ผ ํผ์ŠคํŠธ ๋””์ž์ธ

๋ชจ๋ฐ”์ผ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธ€๋ฆฌํ”„๋งŒ ํฌํ•จ๋œ ๊ฒฝ๋Ÿ‰ ํฐํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

5. Font Subset์˜ ์žฅ๋‹จ์ 

 

๐Ÿ‘ ์žฅ์ 

๋น ๋ฅธ ๋กœ๋”ฉ: ๋ถˆํ•„์š”ํ•œ ๊ธ€๋ฆฌํ”„๋ฅผ ์ œ๊ฑฐํ•ด ํฐํŠธ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.

๋ฐ์ดํ„ฐ ์ ˆ์•ฝ: ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์œ ๋ฆฌ.

SEO: ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„ ์œผ๋กœ ๊ฒ€์ƒ‰ ์—”์ง„ ์ˆœ์œ„ ์ƒ์Šน.

 

๐Ÿ‘Ž ๋‹จ์ 

์ดˆ๊ธฐ ์ž‘์—… ํ•„์š”: ๊ธ€๋ฆฌํ”„๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•จ.

๋‹ค๊ตญ์–ด ์ง€์› ์–ด๋ ค์›€: ๋ชจ๋“  ์–ธ์–ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์„œ๋ธŒ์…‹ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ.

 

6. Font Subset๊ณผ ๊ด€๋ จ๋œ ์ฃผ์š” ์šฉ์–ด

WOFF/WOFF2: ์›น์— ์ตœ์ ํ™”๋œ ํฐํŠธ ํ˜•์‹. ์„œ๋ธŒ์…‹ ์ƒ์„ฑ ์‹œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋จ.

Unicode Range: ํŠน์ • ๋ฌธ์ž์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜์—ฌ ํฐํŠธ ์„œ๋ธŒ์…‹์„ ์ƒ์„ฑ.

Glyph: ํฐํŠธ์˜ ๊ฐœ๋ณ„ ๋ฌธ์ž, ์‹ฌ๋ณผ, ์•„์ด์ฝ˜ ๋“ฑ์„ ์˜๋ฏธ.

Fallback Font: ํฐํŠธ ๋กœ๋”ฉ ์ „์— ์ž„์‹œ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ธฐ๋ณธ ํฐํŠธ.

 

๊ฒฐ๋ก 

 

Font Subset ์ถ”์ถœ์€ ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธ€๋ฆฌํ”„๋งŒ ํฌํ•จ๋œ ํฐํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋กœ๋”ฉ ์†๋„, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜, ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์—์„œ ํฐ ๊ฐœ์„ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ง€๊ธˆ ๋ฐ”๋กœ Font Subset์„ ๋„์ž…ํ•ด ๋” ๋น ๋ฅด๊ณ  ์ตœ์ ํ™”๋œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

๐ŸŒท์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น!๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•