출처 : http://honeybox.tistory.com/181

 

조합형/완성형/유니코드의 모든 것

 

제목: 한글 및 한국어 정보 처리 코드
(한국어 정보처리의 과제)

작성: 전상훈 (한국어정보처리연구소)
날짜: 99.01.01.
email: konan2@chollian.net klipl@klipl.com


배포자: 위형복
■ 배포 목적: 한글의 조합형/완성형 등 한글 코드에 대한 지식과
유니코드에 대한 전반적인 지식을 보급하고자 함.
■ 배포자 연락처: dtpdosa@netian.com



이 글은 1998년 10월에 작성하여 1998년 11월 마이크로소프트웨어에 게재된 글이다. 마이크로소프트웨어 잡지에는 <표>와 <그림>이 많이 있지만 원래의 글에는 편집상 빠져 있다. 마이크로소프트웨어 잡지에는 따로 편집하여 <표>와 <그림>이 추가된 것이며, 이 글에서도 빠져 있다. 또한 마이크로소프트웨어 잡지에서 편집하는 과정에서 원래의 글과는 약간의 차이가 발생하였는데, 이 글도 마이크로소프트웨어 잡지에 게재된 내용과는 약간의 차이가 있음을 밝힌다.

(월간 마이크로소프트 1998년 11월호 특집 참조 요망)

 

차 례

■ 들어가는 말 - —„차를 타고 온 최시맨과 뉵다리 馱방각하의 만남

한글 코드의 정의
.......
● 한글 코드의 종류와 원리
..............
▶ N바이트 한글 코드
..............
▶ 3바이트 한글 코드와 자소형 한글 코드
..............
▶ KSC5601-1987완성형 코드
..............
▶ 상용 조합형 코드
..............
▶ KSC5657-1991 확장 표준 코드(필자가 편의상 지정한 이름)
..............
▶ KSC5601-1992 조합형 코드

■ 잘 못 끼어진 첫 단추는 이렇게 끼워졌다.
.......
● KSC5601-1987이 보급되는 과정

■ KS완성형 코드의 문제점

■ 확장 완성형 코드
.......
● 확장 완성형 코드가 지닌 한계와 문제점
.......
● 확장 완성형으로 한글을 표현하는 데 문제가 있는가?
.......
● 사실상 표준으로 영향력을 미치게 될 확장완성형

■ 유니코드에서 한글 코드 배정
.......
● 유니코드 일반적인 구조와 한글 처리 원리
.......
● 유니코드에서 한자는 어떻게 되었는가
.......
● 유니코드는 한글 및 한국어를 완벽하게 처리할 수 있는가

■ 한글 윈도우98과 문서처리기에서 한글 코드 및 한글 처리

■ 한글 표준 코드는 어떻게 처리되어야 하는가

■ 코드 변환에 대하여
.......
● KS완성형 <-> 조합형(상용)
.......
● KS완성형 <-> 유니코드
.......
● 조합 <-> 유니코드

■ 정보는 자원이자 곧 국가 경쟁력이다.


박스기사

▶ [박스] ISO-2022 규격
▶ [박스] Unicode와 ISO-10646의 관계
▶ [박스] KSC5700코드와 문제점 - 제 1차 한글 코드 표준화 위원회 회의록
▶ [박스] 유니코드에서 현대 한글 완성형 11172자를 획득하는 과정
▶ [박스] 한글 코드별 효율성 비교 검토
▶ 참고 문헌

■ 들어가는 말 - —„차를 타고 온 최시맨과 뉵다리 馱방각하의 만남

정 보 검색이나 인터넷 검색이라는 말이 일반인에게 알려진 것은 최근 2 ~ 3년도 채 되지 않았다. 그럼에도 불구하고 이제는 어린 유치원생부터 중년의 주부나 노년의 할아버지까지 인터넷을 따라잡기에 여념이 없다. 아마도 인터넷이 지닌 무한한 잠재성과 정보화 사회로 가는 길목에서, 정보를 어디서 얼마나 어떻게 획득하느냐가 생존을 좌우하기 때문일 것이다. 이러한 와중에서 필자에게 문득 재미있는 생각이 떠올랐다. 한때 폭발적인 인기를 끌었던 펩시콜라 광고에 나오는 최시맨과 드라마로 유명했던 馱방각하가 팔씨름을 한다면 과연 누가 이길지 궁금했다. 그래서 먼저 이들이 있을 만한 인터넷 홈페이지를 찾아보았는데 뜻밖에도 찾을 수가 없었다. 펩시맨은 있어도 [최시맨]은 찾을 수가 없었고, [馱방각하]를 찾으면 대부분 찾지 못했으며 설령 찾았다 하더라도 소가 뒷걸음 치다가 쥐잡는 격으로 얼떨결에 찾는 것을 보고서 놀라지 않을 수 없었다. 검색 결과를 보면, 시스템 장애가 발생하였으므로 회사로 연락을 하라고 하던가, 다른 단어는 멀쩡한데 이런 단어는 바빠서 항상 처리할 수 없다든가, 아니면 이런 검색어는 문법 오류가 있다고 답하던가, [馱방각하]는 [饯방각하, 깎방각하]로 바꾸어서 돌려보내고, [최시콜라]는 [钰시콜라]로 바꾸어서 보내면서 찾을 수가 없다는 것이다. 아주 재미있는 결과이지만 그다지 유쾌하지는 않았다. 필자가 검색했던 인터넷 검색 엔진들은 한글 처리 부문에서 자타가 공인하는 최고 수준의 회사라는 점에서 어떻게 이런 일 있을 수 있는지 매우 궁금했다. 아마도 이러한 문제는 필자뿐만 아니라 독자에게도 궁금하게 다가올 듯한 문제이므로 그 이유를 더듬어 보기 위해서 글을 쓰게 되었다.

이 러한 문제는 한글 코드와 밀접한 관련이 있기 때문에, 먼저 한글 코드가 무엇이며, 그러한 코드는 어떻게 변해왔는지 간단하게 살펴보고, 각각의 특징을 살펴보면서 윈도우95에 이은 윈도우98의 등장은 어떠한 관계가 있으며, 앞으로 발전 방향은 무엇인지 함께 생각해보자.

............................................................................................... ◀ 차 례

■ 한글 코드의 정의

컴 퓨터는 내부적으로 정보를 처리하기 위해서 2진수 형태로 처리되기 때문에 인간이 사용하는 언어로는 사용할 수가 없다. 그래서 인간의 언어를 컴퓨터가 사용할 수 있도록 이진수의 대응 관계를 정의한 것을 문자 코드라고 한다. 따라서 한글 코드라는 것은 한글 및 한국어를 컴퓨터 내부에서 이진수로 처리하도록 정의해 놓은 문자 집합이다. 여기서 한글 및 한국어라고 하는 이유는 한글과 함께 사용하는 숫자, 영문자, 한자, 기타 등등의 문자를 포함하기 때문이다. (앞으로는 간단하게 한글 코드라고 부르겠다.)

초 기의 컴퓨터는 영어권 문화에서 만들어진 기계였으므로 컴퓨터를 쉽게 다루기 위해서 영어로 된 명령을 사용하도록 제작되었다. 이러한 컴퓨터가 국내에 처음 들어왔을 무렵에는 소수의 전문 교육을 받은 사람들만이 컴퓨터를 다루었기 때문에 영어를 그대로 사용했다. 그러다가 컴퓨터의 보급이 점차 증가되기 시작하면서 한국어로 된 명령과 한국어를 처리할 수 있는 프로그램이 필요하게 되었다. 그런데 그 당시 컴퓨터로는 한국어를 처리하려면 여러 가지 어려운 문제가 있었는데, 가장 커다란 문제는 기본적으로 컴퓨터는 1바이트 체계로 되어 있었기 때문에 최대한 표현할 수 있는 문자는 256자였다는 점이다. 현대 한글은 11172자였으므로 256자까지 표현할 수밖에 없는 1바이트 체계로는 현대 한글을 전혀 표현할 수가 없었다. 그래서 능력있는 개인이나 기업들이 하나 둘씩 각각의 한글 처리 방법을 고안하게 되었다. 이때까지만 해도 컴퓨터에서 한글을 사용한다는 것 자체가 대단한 일이었으므로 처리 방법이나 구현 원리 같은 것은 중요한 문제가 아니었다.

그림. 한글 코드의 예

 

문자

이진수

십육진수

1011000010100001

B0A1

1011000010100010

B0A2


............................................................................................... ◀ 차 례

● 한글 코드의 종류와 원리

현 재 국내에서 사용하거나 사용되었던 한글 코드는 많이 있지만 현실적으로 지금 사용하거나 앞으로 사용하게 될 코드 혹은 이미 사용되었지만 중요한 의의를 지닌 것들을 중심으로 설명하는데 한글 코드를 분류하는 기준과 각각의 한글 코드에 대하여 알아보자.

한 글 코드를 분류하는 기준은 여러 가지가 있지만 가장 중요한 기준은 한글 한 음절을 표현하는데 소요되는 바이트 수와 8번째 비트를 사용 여부이며 지금까지 제정되거나 사용되었던 것은 여러 가지가 있었지만 현실적으로 사용하거나 중요한 역할을 하는 것만 다루겠다.

............................................................................................... ◀ 차 례

▶ N바이트 한글 코드

이 것은 한글을 풀어 쓴 것과 같이 각각 자음과 모음을 한 바이트씩 처리하는 것이다. 따라서 한글 한 음절을 표현하기 위해서는 길이가 2바이트부터 5바이트까지 사용한다. 그래서 보통은 멀티바이트(multi-byte)코드라고도 한다. 이것은 80년대 초반에 널리 사용되었으며 7비트 아스키 환경에서도 사용할 수 있다는 장점이 있지만 한글 처리에서는 적합하지 않아서 곧바로 사라지게 된다. 무엇보다도 가장 문제가 되었던 것은 문자를 비교하거나 순서대로 정렬(sort)할 경우에 한글 순서와 맞지 않는다는 것이다. 이렇게 문제가 많아서 사라진 코드를 설명하는 데에는 다른 이유가 있다. 그것은 현재에 정보 검색, 맞춤법 검사, 자동 색인, 형태소 분석 등등에서는 N바이트 코드방식을 이용하고 있다는 점이다. 그 이유는 완성형이나 조합형 코드로는 언어 정보를 처리할 수 없기 때문인데, 현대어는 물론이고 옛한글은 더욱 불가능하다. 물론 유니코드는 현대어와 옛한글을 거의 모두 처리할 수 있도록 되어 있으므로 유니코드에서 다시 설명하겠다.

그림. N바이트 한 음절 구성 예

나 = ㄴ + ㅏ => 2바이트

닥 = ㄷ + ㅣ + ㄱ => 3바이트

삶 = ㅅ + ㅏ + ㄹ + ㅁ => 4바이트

觫 = ㄱ + ㅗ + ㅏ + ㄹ + ㅁ => 5바이트

............................................................................................... ◀ 차 례

▶ 3바이트 한글 코드와 자소형 한글 코드

3 바이트 한글 코드는 한글 한 음절을 초성, 중성, 종성으로 나누고 각각 한 바이트씩 배정하여 처리하는 것으로 한글 한 음절을 처리하기 위해서 3바이트를 사용하여 붙여진 이름이다. 이것도 일종의 조합형 코드이지만 한글 1음절을 표현할 때 2바이트 조합형 코드보다 1바이트를 더 많이 사용하기 때문에 비효율적이어서 자취를 감추게 된다.

자 소형 코드는 특별히 제정되었거나 널리 사용된 코드는 아니지만 필자가 편의상 설명하는 코드이다. 이 코드는 한글을 표현하기 위해서 자소 단위로 처리하는 것으로 N바이트 한글 코드와 거의 똑같으며 조합형 코드로는 처리할 수 없는 언어 정보를 처리하기 위해서 필요에 따라 만들어 사용하는 코드이다. 이 코드를 설명하는 이유는 현재 인터넷 정보검색, 맞춤법 검사기, 자동 색인 등에서 이 방식을 거의 사용하고 있기 때문이다. 이 코드는 사용하는 원칙이나 방법이 공식적으로 제정된 적은 없고 필요한 분야에서 각자 만들어 사용하고 있는 실정이며, 유니코드가 제정되면서 현실화되기도 한다.[그림. N바이트 코드 참조]

............................................................................................... ◀ 차 례

▶ KSC5601-1987완성형 코드

KSC5601 에서 채택한 방식을 한글을 음절 단위로 순서대로 배치하여 각각의 코드값을 부여하는 방식이다. 구현 방식을 보면 첫 번째 바이트와 두 번째 바이트 모두 164 ~ 256까지의 영역만을 사용한다. 그래서 실제로 사용 가능한 문자는 94 * 94(8836)자이므로 현대 한글 11172자를 모두 표현할 수가 없는 문제점이 발생한다. 이와 같은 문제를 피하기 위해서 많이 사용하는 한글 음절 2350자, 한자 4888자, 특수문자 1128자, 나머지 470자를 배정한다. [그림. KSC5601코드의 글자 배치]

............................................................................................... ◀ 차 례

▶ 상용 조합형 코드

한 글 한 음절을 초성, 중성, 종성으로 나누어 각각 5비트씩 배정하고 7비트 아스키코드에서 사용하지 않는 최상위 비트(MSB)에 '1'로 배정하여 2바이트로 처리한다. 첫 번째 바이트 최상위 비트가 '1'로 되어 있으면 한글 한 음절로 해석하고, '0'으로 되어 있으면 영문자로 구분한다. 그런데 조합형 코드는 회사별로 서로 다르게 제정하였으나 KS완성형 코드가 제정되면서부터 대부분의 조합형 코드는 자취를 감추게 되었고, 상용 조합형(삼보 조합형 혹은 KSSM 조합형)만이 표준 코드 제정 이후에도 계속해서 사용되었으므로 대개 조합형 코드라는 것은 이것을 가리킨다.[그림. 조합형 코드]

............................................................................................... ◀ 차 례

▶ KSC5657-1991 확장 표준 코드(필자가 편의상 지정한 이름)

KSC5601-1987 완성형 코드의 제정과 함께 불거진 코드에 대한 문제점을 보완하기 위해서 1991년에 만들어진 것으로, 한글 1930자, 한자 2856자, 옛한글 1677자 등이 추가되었다. 그런데 앞서 표준으로 제정되었던 KSC5601 완성형 코드를 부분적으로 보완하였기 때문에 현대 한글 6892자는 빠져버린다. 하지만 확장 표준 코드에서 한자가 7744자로 늘어나고 옛한글이 표준 코드에 반영되었다는 점이 중요하다. 실제로 이 코드는 전혀 사용하지 않았기 때문에 확장 코드를 기억하는 사람이 없지만 나중에 한자와 옛한글을 표준 코드에 다루는 데 중요한 단서가 된다.

............................................................................................... ◀ 차 례

▶ KSC5601-1992 조합형 코드

KSC5601-1987 완성형 코드에서는 모든 현대 한글을 표현할 수 없다는 점에서 민족 문화의 계승 발전과 산업 및 기술적 측면에서 많은 문제점을 노출시켰다. 그래서 정부는 현대 한글을 완벽하게 표현할 수 있는 조합형의 필요성을 인식하여 1992년에 이르러 또 하나의 표준 코드(KSC5601-1992)를 제정하게 되는데, 이로 인하여 표준 한글 코드가 두 개가 되어 버린다. 또한 이미 KS완성형 코드로 작성된 문서와 데이터와는 호환성이 없어서 현실적으로는 거의 사용하지 않게 된다. 이 때 제정된 조합형은 상용 조합형 코드와 구성이 거의 비슷하지만 몇 글자의 코드는 다르게 배정되어 있으며, 현재의 몇몇 응용 프로그램에서는 상용 조합형 대신에 표준 조합형 코드를 지원하고 있는 실정이다.(1987년을 기점으로 주로 사용하는 조합형을 상용 조합형 코드라고 하며, 1992년에 제정된 조합형 코드를 표준 조합형 코드라고 한다.)

............................................................................................... ◀ 차 례

■ 잘 못 끼어진 첫 단추는 이렇게 끼워졌다.

컴 퓨터에서 한글 코드 문제를 이해하기 위해서는 한글 코드에 관한 역사적인 흐름을 이해해야 하는데, 한글 코드가 실질적인 표준으로 제정되는 1987년 전후에 상황을 살펴보고, 이어서 한글 코드의 정의와 이미 사용하거나 사용했던 한글 코드의 특징을 차례대로 알아보겠다.

1974 년 처음으로 한국 공업 규격 KSC 5601-1974가 제정되었으며, 뒤이어 1977년에 KSC 5714-1977이 제정되었다. 이 때는 한글 자모 51자와 한자 7200자를 정해놓았으며 특히 자모에 의한 처리는 한계가 많았기 때문에 조합형과 완성형 코드가 등장하게 된다. 완성형 코드로 된 KSC 5619-1982와 조합형으로 된 KSC 5601-1982가 생겨났다. 여기서 중요한 점은 각각의 코드가 국가 표준으로 제정이 되었다는 뜻이지 실제로 모두가 이렇게 사용했다는 뜻은 아니다. 당시의 컴퓨터 제조 업체는 각각의 한글 코드 체계를 사용했으며 대부분의 회사들은 조합형의 장점 때문에 조합형을 사용하고 있었다. 그러한 가운데 개인용 컴퓨터가 대중화되면서 한글 코드 문제도 본격적으로 불거지기 시작했다. 예를 들어, A라는 회사에서 사용하던 한글 문서(코드)는 B라는 회사 컴퓨터에서는 사용할 수 없고, 역으로 B에서 사용하던 한글 문서(코드)는 A라는 회사에서 사용할 수 없게 되어 버린 것이다. 이와 같은 한글 코드간의 호환성이라는 문제가 대두되면서 나름대로 노력을 시도하였지만 별다른 효과가 없었다. 이 때까지만 해도 소프트웨어는 하드웨어를 팔기 위한 하나의 수단이었으므로 일단 컴퓨터를 많이 팔아서 세력을 얻는 방법이 효과적이라고 여겼기 때문에 해결이라는 것은 애당초 생각조차 하기 힘들었던 시기였다. 시간이 지날수록 불편함이 가중되었고 그만큼 사용자들의 표준화 요구도 더욱 절실해졌다. 이러한 문제를 해결하기 위해서 업체 중심으로 한글 코드 표준화를 시도하게 되었다. 처음에는 대부분 조합형 코드를 사용하고 있었으므로 완성형보다는 조합형을 지지하게 되었다. 그러나 각각 자신의 코드를 중심으로 표준화를 시도하다 보니 아무런 결말도 낼 수 없었는데, 자신의 코드를 포기할 경우 이전에 판매했던 제품과의 호환성이 문제가 될 뿐만 아니라 판매에도 중요한 영향을 미치기 때문에 사실상 다른 회사의 코드를 지지할 수가 없었다. 당시 이십여 개의 회사가 참여했으며 시간이 지날수록 조합형 코드를 포기하는 쪽으로 결론이 나면서 최종적으로 완성형을 채택하게 되었다.(앞으로는 KSC5601-1987내지는 KS완성형 코드라고 부르겠다. 이전의 완성형 코드와는 차이가 있으며 현재의 표준 코드는 조합형도 채택되어 있기 때문에 혼동할 우려가 있으므로 주의하기 바란다.) 물론 이 때 완성형을 채택하게 되는 아주 중요한 이유가 있다. 그것은 국제 표준화 기구(ISO)에서 정한 국제 규격과 호환성 때문이었다.(ISO-2022참조)

............................................................................................... ◀ 차 례

● KSC5601-1987이 보급되는 과정

우 여곡절 끝에 1987년에 완성형을 표준으로 하는 KSC5601-1987(혹은 KS완성형 코드)이 제정되었어도 상당수의 컴퓨터 및 소프트웨어 제조 회사들은 계속해서 조합형을 사용하다가 국가에서 주도한 행정 전산망 사업에서 KS완성형을 기본 코드로 채택하면서부터 점차 보급되기 시작한다. 게다가 뒤이은 교육용 컴퓨터 보급 사업에서는 행정 전산망과 호환되는 코드를 사용한다는 원칙을 제시되면서부터 본격적으로 KS완성형 코드가 보급되었다. 더욱이 개인용 컴퓨터의 운영 프로그램인 DOS를 제작하였던 마이크로소프트사가 1989년에 이르러서는 조합형을 포기하고 KS완성형을 지원하였으며, 중대형 컴퓨터의 운영 프로그램인 UNIX 진영에서도 KS완성형을 공식적으로 지원하면서 사실상 표준으로 자리잡아 가게 된다.

여 기서 짚고 넘어가 할 중요한 부분이 있다. 현재 한국은 물론 전 세계적으로 개인용 컴퓨터 운영 프로그램 판매에서 막대한 시장 점유율을 자랑하는 마이크로소프트사는 그 당시에 조합형을 사용하고 있었으며, 국가적 표준 코드(완성형) 보급 정책과 맞물려 조합형을 포기하였다는 점이다. 그러다가 1995년 윈도우95를 발매하면서 확장(통합) 완성형 코드를 제정하여 발표하는 과정에서 여론의 비판적인 화살을 맞으면서 완성형 코드가 마치 마이크로소프트사의 산물인 양 비추어졌던 점을 상기하면서 주목하기 바란다.

또 한가지 덧붙여 주목할 점은 그 당시 한글 코드 표준화에 참여하고 오늘날까지도 컴퓨터를 판매하는 회사가 KS완성형 코드를 채택하였다는 것은 만들어냈다는 뜻과는 다르다는 것이다. 말뜻 그대로 통일된 표준 코드로써 채택된 완성형 코드를 수용하는 동시에 보급하는 역할을 하게 되었던 것이고, KS완성형 코드를 제정하는 순간에는 전산 전문가와 통신 전문가들만 참여했으며, 국어학자나 출판 문화 사업에 관계된 종사자는 없었다는 점이다.

KS 완성형이 표준 코드로 보급되면서 서서히 논쟁이 불붙기 시작한다. 1989년에 이르러서는 컴퓨터 전문 잡지를 비롯하여 일간지, 컴퓨터 통신 등을 통해서 KS완성형 코드의 문제점이 제기된다. 이 때, 제기된 문제점은 여러 가지가 있지만 무엇보다도 글자를 모두 표현할 수 없다는 점이 가장 큰 문제였다. 이렇게 문제가 불거져 나오면서 KS완성형 코드를 보완하는 개정작업에 들어갔으며 그 결과 1991년 12월에 KSC5657을 제정한다. 그러나 이것마저도 충분히 검토하지 않고 제정됨으로써 사실상 보급되지 않게 된다.

............................................................................................... ◀ 차 례

■ KS완성형 코드의 문제점

KS완성형의 문제점을 설명하기 전에 먼저 한글 코드가 지녀야 하는 기본적인 원칙이 있다.

무 엇보다도 한글 특성을 반영해야 한다는 점이다. 표현 가능한 문자는 모두 처리할 수 있어야 하며, 옛한글도 현대어처럼 다룰 수 있어야 하고, 비한글 문자(한자, 영문자, 일문자, 기타 문자)도 사용하는데 문제가 없어야 한다. 그 다음으로는 기본적으로 7비트 아스키코드로 동작하는 영문 자료와 제어 문자들과는 충돌하지 말아야 하고, 보다 중요한 정보 처리를 위해서는 음절을 넘어서 자소 단위로 처리할 수 있어야 한다. 끝으로 국제적인 표준 규격을 따라야 하며, 산업 현장에서 현실적으로 수용할 수 있어야 하며, 정부의 정책적인 지원이 있어야 한다.

이러한 기본적인 원칙을 중심으로 KS완성형을 살펴 보면 다음과 같은 문제점이 발생한다.

가 장 중요한 것은 표현 가능한 현대 한글을 모두 표현할 수 없었으므로 한글 특성을 살리지 못 한다는 점이다. KS완성형 코드는 현대 한글 11172자 중에서 2350자만을 처리할 수 있기 때문에 문제가 발생한다. 간단히 예를 들자면, "최시콜라, 최시맨, 馱방각하, —„차, 뉵다리"등을 표현할 수 없다. 또한 '쓩'이라는 자는 KS완성형 코드에는 있지만 'ˆ

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,