알쓸잇(it)잡/아는척-컴퓨터

한글 문자, 기호에서 코드로의 여정

IT조아(it-zowa) 2025. 10. 17. 05:35
728x90
반응형

알파벳을 그대로 쓰는 영어와 달리, 한글은 초성·중성·종성을 조합하여 글자를 만드는 문자다. 이 때문에 현대에서 우리가 사용하는 한글로 만들 수 있는 글자의 수는 이론적으로 초성 19자 × 중성 21자 × 종성 28자 = 11,172자에 달한다.

초성 자모 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ 19자
중성 자모 ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ 21자
종성 자모 ㄱ  ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ 28자

 

그렇다면 컴퓨터는 이 많은 글자를 전부 하나하나 저장해 두는 걸까? 아니면 한글의 조합 원리를 이용한 더 효율적인 방법이 있을까?

조합형의 탄생

한글은 애초에 ‘조합의 문자’로 만들어졌다. 세종대왕은 초성·중성·종성을 따로 창제하고, 이를 조립하듯 결합해 무수한 글자를 만들 수 있도록 설계했다. 따라서 모든 글자를 미리 저장해 둘 필요는 없었다.

 

이 원리를 그대로 컴퓨터에 옮긴 것이 바로 n바이트 조합형 방식이다. 조합형은 한글의 자모 하나하나를 미리 코드로 저장해 두고, 입력된 자모를 알파벳이나 숫자와 같은 기호 코드에 대응시켜 조합하는 방식이다. 예를 들어,  초성 ‘ㄱ’을 영어의 a, ‘ㄴ’을 b에, 'ㄷ'을 c에 매핑해 두면, 사용자가 입력한 코드를 보고 컴퓨터가 글자를 조립하는 방식이다.

자모 매핑 코드에는 여러 버전이 있었지만, 이해를 위해 단순화시킨 예시를 아래 표와 같이 사용했다면, 
한글 자모
대응 알파벳 a b c d e f g h i j k l m n
한글 자모
대응 알파벳 o p q r s t u v w x
 

이 약속에 따라 ‘케데헌’은 다음처럼 입력된다.

  • 케 = ㅋ(k) + ㅔ(r)
  • 데 = ㄷ(c) + ㅔ(r)
  • 헌 = ㅎ(n) + ㅓ(q) + ㄴ(b)

즉, 'krcrnqb'라는 알파벳 조합이 곧 ‘케데헌’이 되는 것이다.

조합형의 한계와 개선

초창기 n바이트 조합형에는 단점이 있었다. 받침(종성)이 있는 글자와 없는 글자의 바이트 크기가 달라졌던 것이다. 받침이 없는 글자는 2바이트, 받침이 있으면 3바이트를 차지했기 때문에 컴퓨터가 문자열 길이를 일정하게 처리하기 어려웠다.

 

이를 개선한 것이 바로 3바이트 고정 조합형이다. 초성·중성·종성을 각각 1바이트씩 고정하여, 어떤 글자든 항상 3바이트로 표현하도록 만든 것이다. 예를 들어 ‘케데헌’을 3바이트 조합형으로 표현하면 다음과 같다.

 

  초성 중성 종성 16진수 표현
ㅋ(14) ㅔ(6) 없음(0) [0E][06][00]
ㄷ(3) ㅔ(6) 없음(0) [03][06][00]
ㅎ(19) ㅓ(4) ㄴ(4) [13][04][04]

이후에는 이를 더 효율적으로 만든 2바이트 조합형이 등장했다. 2바이트(16비트) 안에 초성, 중성, 종성을 각각 5비트씩 나눠 저장하고, 남는 1비트는 “이 글자가 한글임”을 표시하는 데 사용했다. 이 방식은 조합형 중에서도 가장 압축적인 형태였다.

2바이트 조합형
2바트 조합형 코드표 (출처 : Wikipedia)
2바이트 조합형에서 '케데헌'은 이렇게 표현될 수 있다.

 

  초성 중성 종성 2진수 표현
ㅋ(14) ㅔ(6) 없음(0) 1 01110 00110 00000
ㄷ(3) ㅔ(6) 없음(0) 1 00011 00110 00000
ㅎ(19) ㅓ(4) ㄴ(4) 1 10011 00100 00100

이론적으로는 이 체계로 현대 한글 11,172자를 모두 표현할 수 있었다. 그러나 세계 각국의 컴퓨터가 서로 다른 인코딩 체계를 쓰던 시절이었기에, 국제 표준과의 호환 문제로 결국 조합형은 사라지고 말았다.

KS5601 완성형 코드 – “한글의 치욕”

1980~90년대, 컴퓨터의 성능이 아직 충분하지 않던 시절, 조합형은 느리고 호환성도 떨어졌다. 이런 상황에서 정부는 완성형 한글 코드(KS5601)를 국가 표준으로 채택했다.

 

완성형은 조합형과 달리 자모 단위가 아니라, 조합된 글자 하나하나에 직접 코드값을 부여하는 방식이었다. 당시 코드 영역은 0xA1A1부터 0xFEFE까지 총 8,836자였는데, 그중 한글에 배정된 것은 고작 2,350자뿐이었다. 나머지 4,888자는 한자, 1,598자는 알파벳·부호·가나 등 외국 문자가 차지했다.

 

결국 현대에서 사용되는 한글 11,172자 중 2,350자만 가능했기에 컴퓨터에서 표현할 수 없는 글자들이 속출했다. 예를 들어, 소설가 김홍신의 대표작 제목인 「똠방각하」의 ‘’, 유명 아파트 브랜드 「더 샾(The Sharp)」의 ‘’, 심지어 주민등록부에 이름을 등재할 수 없는 경우까지 생겼다.  

 

이 문제는 국무회의 안건으로도 다뤄진 바 있으며, 사람들은 이 시기를 “한글의 치욕”이라 불렀다. 만약 세종대왕께 이를 보셨다면, 단단히 노하셨을지도 모른다.

(사진출처 : 왓챠, 더샵)

유니코드 – 모든 문자를 위한 새로운 질서

사실 이런 문제는 한국만의 것이 아니었다. 일본, 중국, 유럽 등 각국이 제각각의 문자 체계를 쓰고 있었기 때문이다. 다른 나라에서 작성한 문서를 열면 글자가 깨져 보이는 현상도 흔했다.

 

이를 해결하기 위해 1990년대 중반, “모든 문자를 하나의 체계로 통합하자”는 발상에서 유니코드(Unicode)가 등장했다. 유니코드는 한글의 두 가지 철학인 조합형의 원리(자모 단위)와 완성형의 원리(완성된 글자)를 모두 포괄했다.

영역 이름 코드 범위 설명
한글 자모 (Hangul Jamo) 1100–11FF 초성·중성·종성 자모 하나하나 저장
호환용 자모 3130–318F 옛 시스템과의 호환을 위한 자모
확장 A 자모 A960–A97F 옛한글 조합에 필요한 특수 자모
한글 소리마디 AC00–D7AF 우리가 쓰는 완성형 글자 11,172자
확장 B 자모 D7B0–D7FF 역사적 옛한글 자소 추가 영역

예를 들어 ‘가’라는 글자는 완성형 코드 AC00으로도 표현할 수 있고, ‘ㄱ’ + ‘ㅏ’라는 조합으로도 표현할 수 있다.

 

유니코드 1.0에는 한글이 아직 6,656자만 수록되어 있었으나, 1996년에 발표된 2.0 버전에서 드디어 현대 한글 11,172자 전체가 확정되었다. 오늘날 우리가 쓰는 문자 코드 체계의 뼈대가 바로 이때 완성된 것이다.

옛 한글의 남은 과제

이렇게 한글은 조합형과 완성형, 그리고 유니코드에 이르는 긴 여정을 걸어왔다. 덕분에 오늘날 우리는 일상에서 쓰는 모든 현대 한글을 컴퓨터에서 자유롭게 표현할 수 있다.

 

그러나 아직 완벽하다고는 할 수 없다. 옛 한글의 경우도 유니코드에서 표현할 수 있게 되었다고 하지만, 여전히 일부만 표현 가능하다. 훈민정음의 제자 원리를 온전히 구현하기까지는 아직 조금의 거리가 남아 있는 셈이다.

 

그 이야기는 다음 장에서 이어가 보자.

 

반응형