https://googlefonts.github.io/korean/


https://github.com/googlefonts/korean



한글 폰트의 경우 영어폰트와 다르게 글자수가 많기 때문에 파일크기가 크다. 웹폰트의 경우 이 경우, 부담으로 작용하기도 한다. 

그래서 나눔고딕 가볍게 만들기(http://yiunsr.tistory.com/714?category=514016) 같은 식으로 한자를 빼고 폰트를 따로 만들기도 한다. 그런데 이 경우에도 꽤 폰트가 크다. 


Google 에서 이러한 문제를 해결하기 위해 

"Google Fonts는 머신 러닝에 기반을 둔 최적화 기술을 통해 한글 폰트를 동적으로 분할 다운로드합니다."

의 방식을 적용한다. 


서버가 nodejs 방식인데 그냥 샘플인 것인지 아니면 지금은 nodejs 만 가능한지 확인은 좀 필요할 것 같다. 




몰랐는데 어느 순간 구글에서 지원하는 한글 웹폰트가 크게 늘었다.

https://fonts.google.com/?subset=korean



이제는 무료로 사용할 수 있는 웹폰트의 선택 범위가 많이 넓어진 것 같다. 



덧붙이는 글 : 

아, 이건 CSS 만 넣으면 back단의 언어와 상관없이 동작하는 것 같다. 


<link href="https://fonts.googleapis.com/css?family=Gothic+A1:100" rel="stylesheet">

이런식으로 넣으면 CSS 가 붙는데, 

CSS 안에 

@font-face {

  font-family: 'Gothic A1';

  font-style: normal;

  font-weight: 100;

  src: local('Gothic A1 Thin'), local('GothicA1-Thin'), url(https://fonts.gstatic.com/s/gothica1/v2/CSR74z5ZnPydRjlCCwlCCMcvCvF0oo9KYQ_JRW8eai-QrZf9ge_IDOHzsAOH2x6vleKMTplt.0.woff2) format('woff2');

  unicode-rang


이런 식으로 unicode-range 가 정의 되어 있다. unicode-range 때문에 글자가 부분분적 잘 가져오는 것으로 보인다. 

여기서 중요한 것은 이 unicode-range 가 머신 러닝에 기반을 둔 최적화 기술이라는 것이다. 






전에, Google에서 Noto Sans 한글 글꼴이 배포되었다고 알린 적이 있었다. (http://yiunsr.tistory.com/699).  참고로 이 글꼴은 구글과 Adobe 가 같이 만들었는데, 구글에서는 Noto Sans 라고 부르고 Adobe에서는 본고딕이라고 부른다. 


이번에는 거기에 대응되는 Serif 글꼴이 나왔다.  https://developers-kr.googleblog.com/2017/04/noto-serif-cjk-is-here_4.html  이름하여 Noto Serif 이다. 역시 Adobe 와 같이 만들었다. (근데 실질적으로는 adobe가 다 한 것 같은데. ). Adobe 에서는 이 폰트 이름을 본명조라고 칭하고 있다. ( https://source.typekit.com/source-han-serif/kr/ ). 


이번에 나온 폰트도 Open Font License 이다. 


 이제, 고정폭 폰트(monospace font), 이탤릭을 대신하는 손글씨 세트가 더 나오면 정말 완전한 폰트세트가 될 것 같다. 





 


NanumGothicHangSimple.ttf

NanumGothicHangSimple.woff



NanumGothicHangSimple2.ttf

NanumGothicHangSimple2.woff




전 글에서 http://yiunsr.tistory.com/714  폰트를 줄이는 방법을 알아봤다.

그 상태에서 폰트 손실이 발생하지만 더 줄이는 방법이 있다. fontforge의 simplify 기능(https://fontforge.github.io/elementmenu.html#Simplify) 을 이용하면 glyph 모양이 달라지긴 하지만 더 용량이 줄어든다. Simplify 동작은 https://fontforge.github.io/pfaeditmath.html#Approximating 에 있는 것처럼 정보를 삭제하기 때문에 폰트 가독성이 떨어질 수 있다. 특히, 폰트 크기가 작을수록 더 심해질 것이다. 




#-*- coding: utf-8 -*-

import traceback


import fontforge;

import unicodedata2


def filtering_simple():

    try:

        print "== Open File =="

        font = fontforge.open("NanumGothicHang.ttf")

        for index in font :

            item = font[index]

            if item.unicode == -1:

                continue

            ch = unichr( item.encoding )

            if unicodedata2.script( ch ) not in ( 'Common', 'Latin', 'Hangul' ) :

                continue

            item = item.simplify()

            item = item.validate(True)

        flags  = ("opentype",  "apple")

        font.generate("NanumGothicHangSimple.ttf", flags=flags )

        font.generate("NanumGothicHangSimple.woff", flags=flags )

        print "== Close File =="

    except Exception as e:

        print traceback.format_exc() 

        

    return font


if __name__ == "__main__": 

    print "======== FF Start ========"

    filtering_simple()

    print "======== FF END ========"



위 과정을 거치고 지난 글 처럼 PS Glyph Name 제거하면 최종적으로 아래와 같이

줄어든다.





 NanumGothic.ttf

 원본 파일

 4.14MB 

 NanumGothicHang.ttf

일부 Character 제거 

 2.33MB

 NanumGothicHangSimple.ttf

 일부 Character 제거 + Simplify

 1.67MB

 NanumGothicHangSimple2.ttf

  일부 Character 제거 + Simplify

+ PS Glyph Name 제거

 1.52MB



 NanumGothic.woff

 원본 파일

 2.35MB 

 NanumGothicHang.woff

일부 Character 제거 

 1.01MB

 NanumGothicHangSimple.woff

 일부 Character 제거 + Simplify

 636KB

 NanumGothicHangSimple2.woff

  일부 Character 제거 + Simplify

+ PS Glyph Name 제거

 576KB



 폰트를 줄이기 위해서는 기술적인 문제외에도 라이센스문제도 따져봐야한다. 나눔폰트의 경우 OFL이기 때문에 폰트를 수정하는 것은 문제가 되지 않으나, 일반 상용폰트의 경우 구매를 한다고 해도 수정을 허용하지 않는 경우가 대부분이다. 따라서 폰트 라이센스도 꼭 확인이 필요하다.