지난번 포스트에서 우리는 디지털 문자의 시초인 아스키(ASCII) 코드에 대해 알아보았습니다. 아스키는 훌륭했지만, 128개라는 공간은 전 세계의 언어를 담기엔 턱없이 부족했습니다.
오늘은 아스키의 한계를 넘어, 한글, 한자, 아랍어, 그리고 이모지까지 세상의 모든 문자를 통합한 거대한 약속, 유니코드(Unicode) 에 대해 이야기해 보겠습니다.
과거 인터넷 초창기, 다른 국가의 웹사이트에 접속하면 글자가 꺠져서 □ 같은 기호로 뒤덮인 화면을 보는 일이 흔했습니다. 이를 '모지바케(Mojibake)' 현상이라고 부릅니다.
이유는 단순했습니다. 각 나라, 각 언어권마다 서로 다른 문자표(Encoding) 를 사용했기 때문입니다. 같은 2진수 데이터를 두고도 어떤 컴퓨터는 "이건 한글이야"라고 해석하고, 다른 컴퓨터는 "이건 서유럽 언어야"라고 해석하는 식이었죠.
이 디지털 바벨탑의 혼란을 잠재우기 위해 등장한 구세주가 바로 유니코드(Unicode) 입니다.

1. 유니코드란 무엇인가?
유니코드(Unicode)는 "Universal Code" 의 줄임말로, 전 세계의 모든 문자에 대해 고유한 번호(Code Point) 를 부여한 국제 표준입니다.
아스키 코드가 0번부터 127번까지 번호를 매겼다면, 유니코드는 그 범위를 사실상 무한대로 확장했습니다. 현재 유니코드에는 14만 자 이상의 문자가 등록되어 있으며, 여기에는 현존하는 언어뿐만 아니라 고대 상형문자, 악보 기호, 그리고 우리가 매일 쓰는 이모지(Emoji)까지 포함됩니다.
코드 포인트 (Code Point)
유니코드는 각 문자에 U+로 시작하는 16진수 번호를 붙여 관리합니다.
-
라틴 문자 'A': $U+0041$ (아스키 코드와 동일)
-
한글 '가': $U+AC00$
-
한자 '日': $U+65E5$
-
이모지 '😀': $U+1F600$
이제 전 세계 모든 컴퓨터는 $U+1F600$이라는 신호를 받으면, 언어 설정과 관계없이 똑같이 웃는 얼굴(😀)을 떠올릴 수 있게 되었습니다.
2. 유니코드와 UTF-8은 같은 것인가?
많은 분들이 헷갈려 하는 부분입니다. "유니코드" 와 흔히 보는 "UTF-8" 은 다릅니다. 이 둘의 관계를 이해하는 것이 오늘 글의 핵심입니다.
-
유니코드: 문자와 숫자를 연결해 놓은 '지도(Map)' 입니다. (추상적인 약속)
-
UTF-8 (Encoding): 그 숫자를 컴퓨터 메모리에 실제로 저장하는 '포장 방식(Method)' 입니다.
만약 유니코드가 전 세계 모든 물건에 ID 번호를 붙인 '카탈로그'라면, UTF-8은 그 물건을 트럭에 싣기 위해 상자에 포장하는 '기술'입니다.
3. 왜 UTF-8이 표준이 되었을까?
유니코드의 문자를 컴퓨터에 저장하는 방식(인코딩)은 UTF-16, UTF-32 등 여러 가지가 있습니다. 하지만 현재 웹(Web) 세상의 98% 이상은 UTF-8을 사용합니다.
UTF-8이 승리한 이유는 '가변 길이(Variable Width)' 라는 천재적인 효율성 때문입니다. 글자의 종류에 따라 저장 공간(Byte)을 다르게 배정합니다.
| 문자 종류 | 예시 | 유니코드 번호 | UTF-8 저장 크기 | 특징 |
|---|---|---|---|---|
| 기본 라틴어 | A | $U+0041$ | 1 Byte | 아스키 코드와 100% 호환 |
| 중동/유럽어 | Ω, ¶ | $U+03A9$ | 2 Bytes | 라틴 확장, 그리스어 등 |
| CJK (한중일) | 한, 中, あ | $U+D55C$ | 3 Bytes | 대부분의 아시아권 문자 |
| 이모지/고대어 | 🚀 | $U+1F680$ | 4 Bytes | 평면을 넘어선 문자들 |
UTF-8의 장점
-
아스키 호환성: 영문 문서를 저장할 때는 아스키 코드와 용량이 똑같습니다. 기존 시스템과 완벽하게 호환됩니다.
-
효율성: 자주 쓰는 영문/숫자는 1바이트로 짧게, 복잡한 문자는 길게 저장하여 전체 용량을 최적화합니다.
4. 개발자가 유니코드를 대할 때 주의할 점
문자가 1바이트(아스키)로만 이루어졌던 시절과 달리, 유니코드 환경에서는 "문자열의 길이" 를 계산할 때 주의가 필요합니다.
-
메모리 관점(Byte): 'A'는 1, '한'은 3입니다.
-
문자 관점(Character): 'A'도 1글자, '한'도 1글자입니다.
과거의 방식으로 문자열을 자르거나 저장하다가는, 멀티바이트 문자(한글, 한자 등)의 중간이 잘려나가 데이터가 깨지는 사고가 발생할 수 있습니다. 따라서 현대 프로그래밍 언어들은 이러한 유니코드 처리를 자동으로 지원하는 라이브러리를 기본적으로 내장하고 있습니다.
요약
-
유니코드: 전 세계 모든 문자에 고유 번호(Code Point)를 부여한 국제 표준 규약.
-
목적: 언어권마다 달랐던 인코딩 방식을 통합하여 문자 깨짐(모지바케) 현상 해결.
-
UTF-8: 유니코드를 가장 효율적으로 저장하는 방식. 영문은 1바이트, 한/중/일 문자는 3바이트로 가변 저장함.
유니코드는 단순한 기술 표준을 넘어, 언어 장벽 없이 전 세계가 정보를 교환할 수 있게 만든 디지털 시대의 가장 포용적인 인프라입니다.
🚀 다음 글 예고
우리가 텍스트를 저장하는 방법(인코딩)을 알았으니, 이제 데이터를 더 똑똑하게 다루는 법을 알아볼 차례입니다. "이미지는 어떻게 0과 1로 저장될까?" 픽셀과 해상도, 그리고 RGB 색상의 원리에 대해 아주 쉽게 풀어보겠습니다.
👇 함께 읽으면 좋은 글
유익하게 읽으셨다면, 다른 IT 기술 이야기도 놓치지 않도록 구독 부탁드립니다!
댓글이 없습니다.