정보과학 IT

유니코드와 한글

물곰탱이 2012. 7. 3. 15:01

한글날 기념 - 유니코드와 한글, 한자

 

웹에서의 정보 검색이, 앞으로는 이미지나 동영상 기반으로 바뀔 것이라는 전망이 제시되고 있지만 웹에서의 정보의 대부분은 여전히 문자로 이루어져 있다. 특히 정보 검색의 면에서는 거의 대부분이 문자에 의존하고 있다. 앞으로는 이미지 검색이나 동영상 검색이 본격화되겠지만 그렇게 되더라도 인류의 생활에서 문자가 정보 소통의 왕좌의 자리를 내어 놓을 가능성은 없다. 역사 자료는 어떤가. 당연히 문자로 이루어져 있다. 역통의 역사 자료에는 물론 사진이나 음성이 포함되어 있지만 이들 자료도 검색에는 문자가 사용된다. 역통의 역사 자료에 사용되는 문자는 한글과 한자가 대부분이다. 우리 역사의 특성 상 일본 문자, 로마자 등으로 기록된 역사 자료도 물론 꽤 있지만 기본 문자는 한글과 한자이다. 그리고 현재 역통에서는 큰 무리 없이 한글과 한자를 검색하고 열람할 수 있다. 어찌보면 당연한 듯 하지만 컴퓨터에서 한글과 한자를 무리 없이 사용할 수 있는 것은 최근 10년간의 큰 진보 덕택이다. 컴퓨터에서의 문자는 로마자(특히 영어 기반 로마자)에 기초하여 발달되어 왔고 컴퓨터에서 한글을 어떻게 처리할 것인가는 논쟁적인 주제였다. 초성, 중성, 종성의 결합으로 거의 셀 수 없이 많은 낱글자를 표현하는 한글을 컴퓨터 상에서 자유롭게 구현하는 것은 한글 연구자, 한글을 사용하는 컴퓨터 연구자의 오랜 과제였다. 지금은, 적어도 이론적으로는 옛한글을 포함하여 모든 한글을 컴퓨터에서 자유롭게 구사할 수 있다. 이 글에서는 컴퓨터에서 한글 그리고 한자가 어떻게 구현되는지 그리고 역통에서는 어떤 방법을 쓰는지, 그 한계는 무엇인지를 정리하여 본다.

 

유니코드

 

지금 한글로 된 대부분의 인터넷 사이트에서는 euc-kr이라는 코드 셋으로 한글을 처리하고 있다. 이 코드 셋은 완성형 방식으로 한글을 처리하고 있는데 완성형이란 한글 한 음절을 하나의 코드에 대응시키는 방식이다. 컴퓨터에서 문자를 처리한다는 것은, 컴퓨터라는 것이 숫자밖에 이해하지 못하니까, 결국 특정한 문자를 특정한 숫자에 대응시킨다는 것이다. 이 대응 방법이 사람마다, 회사마다, 나라마다 다르다면 서로 소통하는 게 불가능하니까 당연히 표준을 정한다. 한국에서 한글 문자 코드의 표준은 KSC 5601에서 시작한다. 한글을 컴퓨터에서 표현하는 방법으로 초기에 완성형과 조합형이 있었다. 완성형이란 한글 음절 하나를 하나의 코드에 대응시키는 방법이다. 즉 ‘가’라는 음절은 코드 어디에, ‘나’라는 음절은 코드 어디에 배당하는 방법이다. 음절 하나마다 코드 하나가 필요하므로 당연히 무지하게 많은 코드가 필요하다. 그런데 모든 음절마다 코드를 배당하는 것이 힘드니까 표현되는 음절을 제한하였고 그래서 표현할 수 없는 한글이 많다. euc-kr에서는 2,350자의 한글 음절을 표현할 수 있다고 한다(위키백과, ‘한글 완성형 인코딩’). 조합형은 말 그대로 한글 자모를 조합하여 한글 음절을 표현하는 방식이다. 예를 들어‘강’이라는 글자를 ‘ㄱ+ㅏ+ㅇ’라는 방식으로 세 자모의 조합으로 표현하는 방식이다. 완성형과 조합형 모두가 한글 문자 코드의 표준에 포함되긴 하였지만 완성형 방식이 대세를 점하였고 현재 웹에서는 대표적인 완성형 코드인 euc-kr이 많이 사용되고 있다. 따라서, 당연히 한글 표현에 제약이 있다. 컴퓨터 완성형 코드 체계에서 한글 표현에 제약이 있는 것처럼 서로 다른 문자를 한 문서에 표현하는 데에도 제약이 있었다. 한글, 러시아 문자, 아랍 문자, 일본어 가나, 한자가 한 문서에 쓰인다면 어떻게 해야할까. 각 문자마다 표준 코드 셋이 다르므로 서로 다른 문자를 한꺼번에 표현하는 것이 쉽지 않은 일이었다. 하나의 문자로 기록된 문서라고 해도 컴퓨터의 특성에 따라 제대로 표현되지 못하는 경우도 있다. 외국에서 온 이메일이 깨진다든지 텍스트 문서가 제대로 열리지 않는다든지 하는 경험이 있을 것이다. 그래서 만들어진 것이 유니코드이다. 한마디로 단일하고 체계적인 문자 코드 셋을 만들어 전 세계 모든 문자를 아무런 제약 없이 사용하자는 게 취지다. 전 세계 문자를 하나의 코드 셋으로 표현하자는 움직임은 유니코드 콘소시움과 국제표준 기구인 ISO 양측에서 추진되었는데 결국 두 기구의 합의로 하나의 표준이 만들어졌다. 유니코드는 전 세계 문자를 다 표현하겠다는 목표로 만들어진 만큼 표현할 수 있는 한글도 대폭 늘어났다(현재는 옛한글까지 포함하여 한글로 만들 수 있는 모든 글자를, 적어도 이론적으로는 다 구현할 수 있다). 유니코드는 언어판 17개로 이루어지는데 기본 언어판을 보면 16진수 네 자리로 이루어진다. 예를 들어 한글 자모 초성 ‘ㅋ’은 110F에 배당되어 있다. 16진수 네자리니까 16의 네 제곱, 즉 256 × 256 = 65,536의 글자를 표현할 수 있다. 그런데 세상의 모든 문자가 예상보다 참으로 많아서 이 한 판으로는 다 표현할 수가 없었다. 그래서 새롭게 판을 만들기로 했는데 그게 대행 코드 영역이다. 그러니까 상위 대행 코드 1,024개, 하위 대행 코드 1,024개를 지정하여 이 코드에는 문자를 배당하지 않고 새로운 코드를 만들 때만 쓰기로 한 것이다. 예를 들어 상위 대행 코드 D800을 가로로, 하위 대행 코드 DC00을 세로로 조합하면 하나의 새로운 문자 코드가 탄생하는 것이다. 1,024 * 1,024 = 1,048,576이니까 약 백 만자의 문자 코드를 새로 지정할 수 있다. 유니코드에서는 65,536 개를 문자판 하나로 사용하니까 1,048,576를 65,536으로 나누면 16 즉 16개의 언어판이 새로 만들어진다. 앞서 16진수 네 자리로 표현된 언어판을 기본 언어판(BMP)이라고 하는데 여기에다 대행 영역 코드로 만들어지는 16개의 문자판을 합쳐서 유니코드가 만들어지는 것이다. 이제 전 세계의 문자를 다 표현할 수 있는 판은 깔린 셈이니까 전 세계의 문자를 체계적으로 코드화하면 컴퓨터 상에서 문자 구현에 제약이 없어진다. 물론 아직 현실과 이론적 표준 사이에는 거리가 있다. 하지만 유니코드 문자 셋 덕분에 컴퓨터에서 표현할 수 있는 한글과 한자 수가 크게 늘어 났다. 한글, 한자, 일본어 가나, 로마자까지 다양한 문자로 표현된 역사 자료를 제공하고 있는 역통에서는 당연히 유니코드를 채택하였고 덕분에 역사 자료의 검색과 열람에 제약이 많이 적어졌다. 다음에는 유니코드에서 한글과 한자가 어떻게 표현되어 있는지 살펴 보자.

 

한글의 표현

 

앞서 한글 완성형에서 표현할 수 있는 한글 음절이 제한되어 있다고 했다. 유니코드에서는 어떨까. 결론적으로 말하면 유니코드에서는 한글을 모두 표현할 수 있다. 그 방법은 두 가지이다. 완성형 방식과 '첫가끝' 방식이다. 일단 현대 한국어에서 쓰는 한글은 완성형으로 모두 코드가 배정되어 있다. 유니코드에서 제공하는 문자 차트를 보자. http://www.unicode.org/charts/로 가면 볼 수 있는데 그 중 Korean-specific이라는 분류가 보이고 그 아래 Hangul Syllable이 보인다. 여기에 11,172자의 한글 음절에 대한 코드가 정리되어 있는데 이 글자가 현대 한국어 체계에서 사용할 수 있는 모든 글자(음절)라고 한다. 따라서 현대 한국에서 사용되는 음절들이 모두 표현되므로 유니코드에서는 현대 한국어 표기에 제약이 없다. 그런데 옛한글은 어떨까? ‘나랏말미’ 같은 글은 어떻게 표현할 것인가. 완성형 방식으로 옛한글까지 포함하여 한글로 표현할 수 있는 모든 음절을 표현하자면 무수히 많은 코드가 필요할 것이다. 아마 유니코드 언어판 하나 이상이 필요할 것이다. 그래서 사용하는 방법이 초성, 중성, 종성을 조합하는 방법이다. 그 취지는 조합형과 비슷한데 지금은 ‘첫가끝 한글 부호계’라는 이름으로 많이 불린다(부산대 김경석 교수의 제안이라고 한다). 첫가끝은 첫소리+가운데소리+끝소리를 의미한다. 한글 자모를 초성, 중성, 종성으로 조합해서 한 음절을 표현하는 것이다. 이 방법을 쓰기 위해서는 조합될 한글 자모의 코드가 정해져 있어야 한다. 그래서 만들어진 것이 유니코드의 한글 자모이다. 앞의 유니코드 차트에 보면 Hangul Jamo라는 항목이 보이는데 여기에 첫가끝 방식에 사용될 한글 자모의 코드가 정의되어 있다. 유니코드 5.0까지는 240 자가 지정되어 있었는데 2007년 ISO 회의를 통해 한국에서 추가 요청한 117자가 추가되었다(고려대 민족문화연구원 문자코드연구센터 소식지 19호, 2007년 7월). 이상의 한글 음절과 한글 자모 모두 유니코드 BMP 영역에 배치되어 있다. 그러니까 현대 한국어 음절 11,172자 이외의 글자라도 한글 자모의 조합을 통해서 모두 표현할 수 있는 것이다. 이로써 유니코드 상에서 한글은 아무런 제약 없이 자유롭게 표현할 수 있게 되었다. 그렇지만 아직 컴퓨터에서 이 방법이 모두 구현된 것은 아니다. 보통의 컴퓨터 사용자를 기준으로 말하자면, 윈도우 운영 체계는(윈도우 2000부터) 유니코드를 지원하고 있고 글도 최신 버전은 모두 유니코드 기반으로 작동된다. 웹 사이트의 경우도 유니코드 기반으로 만들어진 사이트는 당연히 현대 한국어를 모두 표현한다. 역통도 당연히 현대 한국어를 모두 표현하고 있지만 옛한글에 대해서는 조금 사정이 다르다. 윈도우 운영 체계와 글에서는 옛한글을 첫가끝 체계로 표현하고 있지 않다. '한양 사용자 정의 영역 코드'를 사용하고 있는데 이 방법은 기본적으로 옛한글을 유니코드 기본 언어판에 완성형 방식으로 배정하는 것이다. 기본 언어판에는 사용자 정의 영역이 있는데 이는 각자 알아서 사용하라고 유니코드 표준에서 비워둔 영역이다. 이 빈 자리에 옛한글을 배치하여 구현하는 방식인 것이다. 지금 역통에서 사용하는 방식도 이 방식이다(옛한글 구현 방법에 대해서는 위키백과,옛한글 항목 참조). 역통에서는 ‘이고’ 같은 옛한글이 표현되고 검색도 된다. 한양 사용자 정의 영역 코드 방식을 공유하고 있으니까 역통 검색엔진(키스티에서 개발한 크리스탈 검색 엔진을 사용하고 있다)에서 색인도 가능하고 인터넷 익스플로러와 같은 웹 브라우저에서도 구현도 가능하다. 그런데 한양 사용자 정의 영역 코드에 배정된 옛한글의 숫자가 제한되어 있으므로 표현에 제약이 있다. 간단히 정리하자면 역통에서는 유니코드를 사용하고 있는데 현대 한국어는 제약 없이 구현되고 옛한글은 제한된 방식으로 구현되고 있다. 이미 개항기 자료 등에 나타난 옛한글을 표현할 수 없어서 두 글자 이상을 조합하여 표현하거나 현대 한국어로 대체한 경우가 있는데 앞으로 역사 자료에 다양한 옛한글 자료가 등장할 가능성이 아주 높다. 지금 뜻있는 이들이 현대 한국어뿐만 아니라 옛한글까지 표현할 수 있는 유니코드 표준 방식을 실제 사용자의 컴퓨터에서 구현하는 다양한 방법을 연구하고 있는 것으로 알고 있다. 관련된 이들이 조금씩 노력한다면 얼마 지나지 않아 한글 모두를 웹 상에서 자유롭게 검색하고 표현할 수 있는 날이 올 것이다

 

한자의 표현

 

유니코드를 사용함으로써 한자의 구현이 획기적으로 개선되었다. 앞서 유니코드 차트를 다시 살펴 보자. 거기에 보면 Han Ideographs라는 분류가 있는데 그 아래 Unified CJK Ideographs(통합 한자), CJK Ideographs Ext.A(한자 확장 A), CJK Ideographs Ext.B(한자 확장 B) 항목이 보이는데 여기에 한자에 대한 코드가 정리되어 있다. CJK는 중국, 일본, 한국을 뜻하는 것으로 한중일이 합동으로 한자의 문자 코드 표준을 정리하였다는 뜻이다. 통합 한자가 20,902자, Ext.A가 6,582자, Ext.B가 42,711자이다. Ext.A까지가 유니코드 3.0에 포함되어 있고 Ext.B는 유니코드 3.1 버전부터 추가되었다. 역통은 유니코드 3.0을 표준으로 채택하고 있어서 Ext.B는 제대로 구현하고 있지 못하다 즉 Ext.A까지 약 2,7000여 자의 한자는 검색, 표현에 제약이 없는 반면 Ext.B부터는 구현에 제약이 있다. 한편 현재 유니코드 콘소시움에서는 Ext.C까지 지정 작업을 끝낸 것으로 알려져 있다. 앞으로 폰트 제작 등 현실적인 여건이 개선된다면 거의 10만자에 가까운 한자를 웹 상에서 자유롭게 표현할 수 있을 것이다. 그럼, 역통에서는 통합 한자와 확장 A에 포함되지 않는 한자를 어떻게 표현하고 있을까. 우리는 이 영역에 포함되지 않는 한자를 신출한자로 취급하고 있는데 그 구현 방법은 해당 한자의 이미지 파일을 제작하여 해당 위치에 붙이는 방법이다(유니코드 한자와 신출한자 데이터베이스는 역통의 유니코드 한자 검색 시스템을 통해 서비스하고 있다). 그러니까 일단 웹 페이지 상에서, 그리 예쁘지는 않지만 해당 신출한자가 표현은 되고 있다. 그런데 문제는 해당 한자가 검색되지 않는다는 것이다. 글 첫 머리에도 말했듯이 검색은 문자를 기반으로 이루어진다. 해당 신출한자는 이미지이므로 검색 엔진에서 색인을 걸 수 없고 따라서 검색도 되지 않는다. 역통에서 유니코드 3.1을 표준으로 채택하면 확장 B의 4만여 자까지 검색과 구현에 제약이 없어질 것이다. 이는 이용자의 환경(브라우저, 폰트 등)과 검색 엔진의 성능에 달린 문제인데 이르면 내년쯤부터 유니코드 3.1의 채택을 고려 중에 있다. 요약하자면, 역통에서는 현대 한국어와 옛한글의 일부 그리고 한자 27,000여 글자에 대해 아무런 제약 없이 검색하고 표현하고 있는 반면 옛한글의 또 다른 일부는 검색하고 표현할 수 없고 27,000여 자에 포함되지 않는 한자는 웹 상에서 표현은 되지만 검색할 수는 없다. 컴퓨터의 힘을 빌려 역사 자료를 찾고 보고 이용할 수 있기까지 여러 번의 고비를 넘겨 왔다. 지금은 이두로 된 고문서나 한글 고소설까지, 비록 약간의 제약은 있지만 검색하고 표현할 수 있다. 이 같은 발전 덕분에 역통을 비롯한 역사 자료 검색 사이트가 제 기능을 하고 있는 것이다. 현재 컴퓨터 상에서 옛한글의 구현을 위한 기초가 닦여져 있는 만큼 한글의 표현에는 제약이 없는 날이 곧 올 것이다. 그리고 인터넷 상에서 검색하고 표현할 수 있는 한자의 수도 아주 크게 늘어날 전망이다. 이 만큼 오기까지 한글을 연구하고 가다듬어 디지털 세계에서 한글 (더불어 한자까지)이 온전히 제 기능을 발휘할 수 있도록 노력해 온 모든 이들에게 경의를 표한다.

 

덧붙여. 유니코드에서 한자 처리 문제 중에 호환 영역 한자 처리 문제가 있다. 간단히 얘기하자면 李와 같은 한자는 코드 값이 두 개가 있다는 문제인데 역통에서는 호환 영역 한자를
사용하고 있지 않다. 즉 李와 李가 서로 다른 코드로 구현되는 경우는 없다.

 

2005.04.09 10:13

http://blog.daum.net/wlghkwk615/1794426