brunch

You can make anything
by writing

C.S.Lewis

by Cylogic May 17. 2021

UTF-8 코드는 뭘까요?

UTF-8 코드는 폰트 파일을 만들 때에는 전혀 유니코드와 구별할 필요가 없는 것이므로, 폰트 제작자는 몰라도 되는 내용임을 미리 밝혀 둔다.

따라서 이 글은 글자의 코드에 관한 이야기가 나올 때 생기는 궁금증을 해소해 드리기 위한 글이지 글꼴 제작자가 필수적으로 알아야 하는 것이 아니라는 것이다.
(프로그래머와 호기심 많은 분들을 위한 글이란 뜻이다.)


이전에 한글 완성형 코드, 조합형 코드, 유니코드 등에 대한 글을 쓴 적이 있다.

관련 내용에 대해 잘 이해하지 못한다면, 먼저 위의 링크를 클릭하여 한번 읽어보고 오시면 도움이 될 것이다.


위의 글에서는 코드의 일반적인 개념을 이해시키려는 생각으로 코드에 대한 설명을 했기 때문에 구태여 UTF-8 코드에 대해 설명하지 않았는데, 웹 페이지를 만들거나 문서를 저장할 때 utf-8 코드에 대한 이야기가 많이 나 오게 되고, 이를 궁금해하는 분들을 위해 UTF-8 코드에 대해 설명하려고 한다.


utf8은 "Unicode Transformation Format 8 bit"의 앞 자로 만들어진 이름이다.


이름에서 보이는 바와 같이 utf8코드는 완성형 코드나 조합형 코드와 같이 유니코드 와는 완전히 다른 구성의 한글 코드 체계는 아니고 코드의 기본 체계는 유니코드의 구성을 그대로 가지고 있다. 단, 유니코드처럼 2byte를 가지고 한글을 표현하는 것이 아니고 3byte를 사용하여 한글을 표현한다. 


UTF-8 코드는 폰트를 만들거나 이해하려는 사람들에게는 유니코드와 다를 바가 없는 코드 체계(정확히는 인코딩)인 것이다. 

그러나 어차피 코드에 대한 이해를 하려고 앞 선 글을 작성하였으므로 UTF-8에 대해서도 알아보도록 하자.


유니코드는 거의 세계의 모든 언어에서 사용되는 코드를 포함할 수는 있지만, 어떤 글자도 2Byte를 사용해야 해서, 알파벳 기반의 1Byte 문자를 사용하는 문서에서는 데이터 양이 2배가 된다. 이를 해소하기 위하여 2Byte를 사용하는 국가의 언어가 3Byte 이상의 코드를 가지게 한다는 아주 이기적 생각에서 출발한 구조인 것이다.(물론 내 개인적인 의견이다.)


웹 화면을 구성하고 있는 대부분의 프로그램 명령어들이 알파벳 기반의 문자로 구성되어 있어서 명령에 관련된 부분의 데이터 량이 적어지는 것에는 확실한 효과를 보여준다. 그리고 2Byte에서 3~4Byte로 변경된 문서 하나만 있는 경우에는 데이터 손해를 볼지 모르지만, 그림과 동영상 등으로 만들어진 화면의 구성에서 텍스트 데이터가 가지는 크기는 아주 미미하므로 이에 대한 고려는 할 필요가 없었는지도 모른다.


일반적인 유니코드에서 한글은 0xAC00 코드에서 시작하여 0xD7A3까지의 코드로 "가"에서 "힣"까지의 코드를 가지게 된다.

그러니까 모든 한글은 앞서 이야기 한 코드의 중간에 있는 2바이트의 코드 값으로 표현되게 되는 것이다.

그런데 유니코드의 변형된 코드 형식인 UTF-8은 3개의 바이트로 한글을 표현하게 되고, 그 각각의 바이트의 형태는 아래의 그림과 같은 구성을 가지게 된다.


유니코드의 2개 byte를 각각 4개의 bit로 나누어 그 내용을 3개의 byte로 구성된 utf8의 코드에 넣으면 되는 것이다. 그림의 빨간색 초록색 하늘색 노란색의 위치에 서로 일치하는  유니코드 내용이 들어가면 되는 것이다.


한글의 시작 글자의 "가"와 "힣"의 코드는 어떻게 변환될지 보시면 더 확실히 이해가 될 것으로 생각한다.

이해가 되셨길 바란다.

다음 글은 좀 더 글꼴과 가까운 이야기를 다뤄 보도록 하자.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari